拓冰建站拓冰建站
首页 / 资讯中心 / 正文

PaddleHub 图像分类实战:基于 rexnet_1_0_imagenet 模块的预测、Fine-tune 与 Serving 部署

人工智能大模型微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载导读rexnet_1_0_imagenet是 PaddleHub 提供的基于 ReXNet 网络架构、在 ImageNet-2012 上预训练的轻量图像分类模块模型大小约 28MB支持命令行与 Python API 两种预测方式并可直接借助 PaddleHub 的Trainer在 Flowers 等自定义数据集上进行 Fine-tune。阅读本文后你将掌握该模块的安装、单张/批量图片分类预测、Fine-tune 全流程数据预处理、数据集加载、优化器配置、模型保存与加载以及通过 PaddleHub Serving 将分类能力服务化的完整实战方案。一、模型基本信息与设计原理项目内容模型名称rexnet_1_0_imagenet类别图像-图像分类网络ReXNet数据集ImageNet-2012是否支持 Fine-tuning是模型大小28MB指标-最新更新日期2021-09-14ReXNet 的网络设计思想ReXNet 由 NAVER AI Lab 提出其核心出发点是一套全新的网络设计原则。作者认为常规的通道配置会在网络中产生表征瓶颈representational bottleneck从而影响模型性能。为了研究这一瓶颈作者分析了由一万个随机网络生成的特征矩阵的秩并进一步研究了整个网络的通道配置规律最终提出了一套简单有效的设计原则来缓解表征瓶颈使每一层都尽可能成为扩张层expand layer从而提升特征表达能力。在仓库源码 modules/image/classification/rexnet_1_0_imagenet/module.py 中可以清楚地看到这套设计原则的具体落点通道渐进扩张ReXNetV1.__init__中通过inplanes final_ch / (self.depth // 3 * 1.0)让各阶段的输出通道数随网络深度线性增长避免了传统网络中通道数骤变带来的表征瓶颈线性瓶颈块LinearBottleneck当扩张系数t ! 1时先用 1×1 卷积升维再使用num_groupdw_channels的 3×3 深度可分离卷积最后以 1×1 卷积投影回目标通道SE 注意力SE模块通过全局平均池化 两个 1×1 卷积含Sigmoid激活对通道维度进行重标定默认se_ratio12残差捷径LinearBottleneck.forward中当stride 1 and in_channels channels时启用 shortcut 连接out[:, 0:self.in_channels] x将输入特征叠加到输出上可配置宽度/深度系数width_mult1.0、depth_mult1.0分别控制通道数与层数缩放模块名中的1_0即对应width_mult1.0。从模块的类装饰器moduleinfo(namerexnet_1_0_imagenet, typeCV/classification, version1.0.0, metaImageClassifierModule)可以确认该模块以ImageClassifierModule为基类因而天然继承了训练步、验证步、预测与 Serving 的完整能力详见后文。分类标签与类别数未指定label_list时模型会从同目录下的 label_list.txt 读取 1000 个 ImageNet-2012 类别名如tench、goldfish、great white shark……并将class_dim自动设置为标签数量一旦传入自定义label_list分类头维度会立即切换为自定义类别数这也是 Fine-tune 的基础机制之一。二、安装1. 环境依赖paddlepaddle 2.0.0paddlehub 2.0.02. 安装模块$ hub install rexnet_1_0_imagenet如安装过程中遇到问题可参考仓库中的分平台零基础安装指南零基础 Windows 安装零基础 Linux 安装零基础 MacOS 安装三、模型 API 预测1. 命令行预测$ hub run rexnet_1_0_imagenet --input_path /PATH/TO/IMAGE --top_k 5其中--input_path指定待分类图片路径--top_k指定输出置信度最高的前 k 个类别。从源码 paddlehub/module/cv_module.py 的add_module_config_arg可以看到--top_k的默认值为 1run_cmd会将命令行参数解析后调用self.predict(images[args.input_path], top_kargs.top_k)最终以「类别名 → 置信度」字典列表的形式返回结果。2. 预测代码示例import paddle import paddlehub as hub if __name__ __main__: model hub.Module(namerexnet_1_0_imagenet) result model.predict([flower.jpg])model.predict的底层实现在 cv_module.py 的ImageClassifierModule.predict中核心流程为逐张图片执行self.transforms预处理Resize 到 256×256、CenterCrop 到 224×224、按 ImageNet 均值/方差归一化按batch_size默认 1组 batch 并前向推理得到preds与feature对preds做softmax再np.argsort(preds)[:, ::-1][:, :top_k]取置信度最高的 top-k 个类别映射为可读类别名。3. 如何开始 Fine-tune在完成 PaddlePaddle 与 PaddleHub 安装后参考仓库 demo/image_classification/train.py 中的模式执行python train.py即可使用rexnet_1_0_imagenet对 Flowers 等数据集进行 Fine-tune。Step 1: 定义数据预处理方式import paddlehub.vision.transforms as T transforms T.Compose([T.Resize((256, 256)), T.CenterCrop(224), T.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225])], to_rgbTrue)transforms数据增强模块定义了丰富的数据预处理方式用户可按照需求替换为自己需要的数据预处理方式。该组参数与模块内置的ReXNetV1.transforms见 module.py保持一致即输入图片会先被 Resize 到 256×256再中心裁剪为 224×224并按 ImageNet 统计量归一化。Step 2: 下载数据集并使用from paddlehub.datasets import Flowers flowers Flowers(transforms) flowers_validate Flowers(transforms, modeval)参数说明transforms数据预处理方式mode选择数据模式可选项有train、test、val默认为train。数据集的准备代码可以参考 paddlehub/datasets/flowers.py。hub.datasets.Flowers()会通过download_data(url...)装饰器自动从网络下载flower_photos.tar.gz并解压到用户目录下$HOME/.paddlehub/dataset目录数据集包含roses、tulips、daisy、sunflowers、dandelion共 5 个类别self.num_classes 5train/test/val三种模式分别读取train_list.txt、test_list.txt、validate_list.txt。更多细节可查阅 Flowers 数据集 API 文档。Step 3: 加载预训练模型model hub.Module(namerexnet_1_0_imagenet, label_list[roses, tulips, daisy, sunflowers, dandelion])参数说明name选择预训练模型的名字label_list设置输出分类类别默认为 ImageNet-2012 的 1000 个类别。传入自定义label_list后模型构造时会将class_dim覆盖为len(label_list)即 5从而替换分类头此时若不传入load_checkpoint仍会加载 ImageNet 预训练权重仅分类层维度按新类别数调整注意预训练分类层的参数在类别数不一致时不会被严格对应这正是后续需要 Fine-tune 的原因。Step 4: 选择优化策略和运行配置optimizer paddle.optimizer.Adam(learning_rate0.001, parametersmodel.parameters()) trainer Trainer(model, optimizer, checkpoint_dirimg_classification_ckpt) trainer.train(flowers, epochs100, batch_size32, eval_datasetflowers_validate, save_interval1)运行配置TrainerTrainer实现见 paddlehub/finetune/trainer.py主要控制 Fine-tune 的训练包含以下可控制的参数model被优化模型optimizer优化器选择use_gpu是否使用 GPU 训练False时调用paddle.set_device(cpu)use_vdl是否使用 VisualDL 可视化训练过程训练日志会写入checkpoint_dir/visualizationcheckpoint_dir保存模型参数的地址训练中断后会自动从该目录恢复最近的epoch_*检查点compare_metrics保存最优模型的衡量指标比较方法默认为「指标值越大越好」。运行配置trainer.traintrainer.train见 trainer.py主要控制具体的训练过程包含以下可控制的参数train_dataset训练时所用的数据集epochs训练轮数batch_size训练的批大小如果使用 GPU请根据实际情况调整 batch_sizenum_workersDataLoader 的子进程数量默认为 0eval_dataset验证集设置后会在每个save_interval轮次执行一次评估log_interval打印日志的间隔单位为执行批训练的次数save_interval保存模型的间隔频次单位为执行训练的轮数collate_fn自定义 batch 合并函数默认按第 0 维堆叠。训练过程中每个 batch 会依次执行training_step前向 交叉熵损失 accuracy 指标见ImageClassifierModule.validation_step、optimizer_steploss.backward()后optimizer.step()与optimizer_zero_grad若设置了eval_dataset每个save_interval轮次末会调用evaluate计算验证集 loss 与 acc并在指标优于历史最优时把模型保存为best_model。模型预测当完成 Fine-tune 后Fine-tune 过程在验证集上表现最优的模型会被保存在${CHECKPOINT_DIR}/best_model目录下同时记录metrics.pkl其中${CHECKPOINT_DIR}目录为 Fine-tune 时所选择的保存 checkpoint 的目录。我们使用该模型来进行预测predict.py 脚本如下import paddle import paddlehub as hub if __name__ __main__: model hub.Module(namerexnet_1_0_imagenet, label_list[roses, tulips, daisy, sunflowers, dandelion], load_checkpoint/PATH/TO/CHECKPOINT) result model.predict([flower.jpg])NOTE进行预测时所选择的 module、checkpoint_dir、dataset 必须和 Fine-tune 所用的一样。源码中load_checkpoint不为None时会通过paddle.load(load_checkpoint)加载并set_dict覆盖模型参数因此这里应传入${CHECKPOINT_DIR}/best_model目录下的模型参数文件如model.pdparams路径。四、服务部署PaddleHub Serving 可以部署一个在线分类任务服务对外提供 HTTP 接口。第一步启动 PaddleHub Serving$ hub serving start -m rexnet_1_0_imagenet运行以上命令即完成了一个分类任务服务化 API 的部署默认端口号为 8866可在启动命令中通过--port修改见 paddlehub/commands/serving.py。NOTE如使用 GPU 预测则需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量否则不用设置。Serving 的请求处理入口是ImageClassifierModule.serving_method见 cv_module.py它接收 base64 编码的图片列表与top_k参数解码后调用predict并把结果封装为{data: [...]}返回同时将 numpy 置信度转换为 Pythonfloat以便 JSON 序列化。第二步发送预测请求配置好服务端后以下代码即可实现发送预测请求并获取预测结果import requests import json import cv2 import base64 import numpy as np def cv2_to_base64(image): data cv2.imencode(.jpg, image)[1] return base64.b64encode(data.tostring()).decode(utf8) def base64_to_cv2(b64str): data base64.b64decode(b64str.encode(utf8)) data np.fromstring(data, np.uint8) data cv2.imdecode(data, cv2.IMREAD_COLOR) return data # 发送HTTP请求 org_im cv2.imread(/PATH/TO/IMAGE) data {images: [cv2_to_base64(org_im)], top_k: 2} headers {Content-type: application/json} url http://127.0.0.1:8866/predict/rexnet_1_0_imagenet r requests.post(urlurl, headersheaders, datajson.dumps(data)) data r.json()[results][data]请求体中的images为 base64 编码的图片数组top_k控制每个请求返回的候选类别数量服务端解码图片并完成推理后results.data中即包含每个输入图片「类别名 → 置信度」的字典可直接用于业务集成。五、更新历史1.0.0初始发布。六、扩展阅读模块源码与分类标签modules/image/classification/rexnet_1_0_imagenet/module.py、modules/image/classification/rexnet_1_0_imagenet/label_list.txt分类模块基类predict / serving / run_cmd 实现paddlehub/module/cv_module.pyFine-tune 训练器Trainer / train 参数详解paddlehub/finetune/trainer.pyFlowers 数据集实现与文档paddlehub/datasets/flowers.py、docs/docs_ch/api/datasets/flowers.rst可直接运行的参考训练脚本demo/image_classification/train.py图像分类预测示例demo/image_classification/predict.py分平台安装指南Windows / Linux / MacOS赞分享人工智能大模型微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载相关推荐PaddleHub 实战基于 repvgg_a0_imagenet 的图像分类预测、Fine-tune 与 Serving 部署全指南PaddleHub 实战基于 repvgg_a0_imagenet 的图像分类预测、Fine tune 与 Serving 部署全指南 本文以 PaddleH人工智能大模型微调模型推理服务PaddleHub 图像分类实战指南基于 PaddleFormers 完成预训练模型 Fine-tune 与 Serving 部署PaddleHub 图像分类实战指南基于 PaddleFormers 完成预训练模型 Fine tune 与 Serving 部署 本指南以 PaddleFo人工智能大模型微调模型推理服务PaddleHub HRNet40 图像分类模型实战从命令行预测到 Fine-tune 与 Serving 部署PaddleHub HRNet40 图像分类模型实战从命令行预测到 Fine tune 与 Serving 部署 本文以 PaddleHub 开源仓库中的 h人工智能大模型微调模型推理服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门