基于 PaddleHub 的图像分类实战:使用 resnet50_vd_imagenet_ssld 完成微调、预测与服务化部署
人工智能预训练微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载本指南以demo/image_classification为实战入口系统讲解如何在 PaddleHub 框架下使用预训练图像分类模型resnet50_vd_imagenet_ssld完成「命令行/脚本预测 → 数据集微调Fine-tune→ checkpoint 加载预测 → Serving 在线服务部署」的完整闭环。读者阅读完本文后将掌握 PaddleHub 图像分类模块的调用范式、Flowers 数据集的使用方式、Trainer训练与评估流程以及如何将微调产物一键发布为 HTTP 分类服务。环境与依赖运行本文示例前需要先安装以下依赖与仓库demo/image_classification/README.md及modules/image/classification/resnet50_vd_imagenet_ssld/README.md声明一致paddlepaddle 2.0.0rc模块侧要求 2.0.0paddlehub 2.0.0安装 PaddlePaddle 与 PaddleHub 后可先通过hub install显式安装分类模块$ hub install resnet50_vd_imagenet_ssldhub install会将模块下载到本地 hub 目录后续hub.Module与hub run均可直接按名称加载。命令行预测一条命令完成推理加载预训练模型的最快方式是使用hub run命令行工具$ hub run resnet50_vd_imagenet_ssld --input_path /PATH/TO/IMAGE --top_k 5--input_path待预测图片的路径--top_k返回概率最高的前 K 个类别示例为 5。命令执行后模型会输出每张图片 Top-K 的类别名称与对应置信度。该方式适合快速验证模块可用性或做单张图片的即席推理。脚本预测在 Python 中调用模块在代码中调用同样简洁核心就是hub.Module加model.predictimport paddle import paddlehub as hub if __name__ __main__: model hub.Module(nameresnet50_vd_imagenet_ssld,) result model.predict([PATH/TO/IMAGE])未指定label_list时模块会使用模型自带的 ImageNet-2012 类别作为输出标签见下文 Step3。predict返回每个输入图片的 Top-1默认top_k1分类结果字典列表。Fine-tune 全流程四步走在完成 PaddlePaddle 与 PaddleHub 安装后进入demo/image_classification目录直接执行python train.py即可开始使用resnet50_vd_imagenet_ssld对 Flowers 数据集 等数据进行微调。仓库中的 train.py 即为可直接运行的完整脚本其逻辑可拆分为 4 个步骤。Step1定义数据预处理方式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是数据增强/预处理管线用户可按需替换。各算子定义位于 paddlehub/vision/transforms.pyT.Resize((256, 256))将图片缩放到目标尺寸。target_size支持 int 或 (h, w) 二元组interpolation默认LINEAR可选NEAREST / LINEAR / CUBIC / AREA / LANCZOS4 / RANDOM六种模式源码见transforms.py的Resize类T.CenterCrop(224)从图片中心裁剪出224 x 224区域与 ResNet 系列标准的输入尺寸保持一致T.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225])使用 ImageNet 数据集的均值/方差做通道归一化to_rgbTrue统一转换为 RGB 通道顺序避免 BGR/RGB 混用导致预测异常。这里使用的预处理参数与模块内部module.py中transforms方法modules/image/classification/resnet50_vd_imagenet_ssld/module.py中Resize((256, 256)) CenterCrop(224) Normalize同一组配置完全一致保证训练与推理阶段输入分布对齐。Step2下载数据集并使用from paddlehub.datasets import Flowers flowers Flowers(transforms) flowers_validate Flowers(transforms, modeval)transforms数据预处理方式mode数据模式可选train、test、val默认为train。Flowers数据集的实现见 paddlehub/datasets/flowers.py类装饰器download_data(urlhttps://bj.bcebos.com/paddlehub-dataset/flower_photos.tar.gz)会在首次实例化时自动从网络下载数据并解压到hubenv.DATA_HOME即$HOME/.paddlehub/dataset目录下无需手动准备数据数据集包含 5 个类别num_classes 5对应train_list.txt / test_list.txt / validate_list.txt三个文件列表由mode决定加载哪个文件__getitem__中读取图片路径与标签并调用self.transforms(img_path)完成预处理返回(图像, 标签)二元组。Step3加载预训练模型model hub.Module(nameresnet50_vd_imagenet_ssld, label_list[roses, tulips, daisy, sunflowers, dandelion])name预训练模型名称label_list自定义输出分类类别不传时默认使用 ImageNet-2012 的 1000 类标签。从模块源码module.py可以看到label_list直接决定全连接分类头的输出维度传入时class_dim len(label_list)否则读取模块目录下的 label_list.txt 构建标签表。因此在微调阶段传入 5 个花类别后模型最后一层Linear的神经元数会相应变为 5配合冻结/微调预训练骨干即可适配新任务。PaddleHub 还提供大量图像分类预训练模型如xception、mobilenet、efficientnet等本仓库modules/image/classification/目录下即收录了对应模块。想切换模型时只需更换name参数# 更换name参数即可无缝切换efficientnet模型, 代码示例如下 model hub.Module(nameefficientnetb7_imagenet)NOTE目前部分模型尚未完全升级到 Paddle 2.0 动态图版本切换模型时请以对应模块 README 标注的版本状态为准。Step4选择优化策略和运行配置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)优化策略Paddle 2.0 提供了SGD、Adam、Adamax等多种优化器示例选用Adamlearning_rate全局学习率默认 1e-3parameters待优化的模型参数即model.parameters()。运行配置Trainer实现在 paddlehub/finetune/trainer.py负责整体训练流程可配置参数包括model被优化模型optimizer优化器use_gpu是否使用 GPU 训练use_vdl是否使用 VisualDL 可视化训练过程checkpoint_dir保存模型参数的目录compare_metrics保存最优模型时的衡量指标默认比较acc。trainer.train控制具体训练过程参数如下train_dataset训练数据集epochs训练轮数batch_size批大小使用 GPU 时请根据显存实际情况调整num_workers数据加载 worker 数量默认为 0eval_dataset验证集log_interval打印日志的间隔单位为执行批训练的次数save_interval保存模型的间隔频次单位为训练轮数。从trainer.py的train方法实现约第 255 行起可以确认训练循环的关键行为当current_epoch % save_interval 0且一个 epoch 结束时保存 checkpoint并会在每个保存节点对验证集执行评估若当前指标优于历史最优_compare_metrics则将模型保存到${checkpoint_dir}/best_model目录。这就是「验证集上表现最优的模型被自动保留」这一机制的源码依据。模型预测加载微调产物完成微调后验证集表现最优的模型保存在${CHECKPOINT_DIR}/best_model目录下其中${CHECKPOINT_DIR}即训练时设置的checkpoint_dir。使用该模型预测的 predict.py 脚本如下import paddle import paddlehub as hub if __name__ __main__: model hub.Module(nameresnet50_vd_imagenet_ssld, label_list[roses, tulips, daisy, sunflowers, dandelion], load_checkpoint/PATH/TO/CHECKPOINT) result model.predict([flower.jpg])关键点在于load_checkpoint/PATH/TO/CHECKPOINT指定微调产物的 checkpoint 路径后模块__init__见module.py会通过paddle.load(load_checkpoint)[0]加载自定义权重并覆盖预训练参数源码中打印load custom checkpoint success不传该参数时则加载模型自带的resnet50_vd_ssld.pdparams预训练权重。NOTE进行预测时所选择的module、checkpoint_dir、dataset必须与 Fine-tune 时保持一致否则类别映射与权重维度会对不上。model.predict的底层实现在 paddlehub/module/cv_module.pyImageClassifierModule.predict约第 82 行模型切换到eval()模式并关闭梯度对输入图片批量执行预处理 → 前向推理 →F.softmax得到概率分布 →np.argsort降序取 Top-K 索引最后结合self.labels映射为可读的类别名。服务部署Serving 在线分类服务PaddleHub Serving 可将微调好的模型部署为在线分类任务服务。Step1启动 PaddleHub Serving$ hub serving start -m resnet50_vd_imagenet_ssld执行后即完成分类任务服务化 API 的部署默认端口号为8866。NOTE如使用 GPU 预测需在启动服务前设置CUDA_VISIBLE_DEVICES环境变量纯 CPU 环境无需设置。Step2发送预测请求服务端就绪后用以下代码即可发送图片并获取分类结果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/resnet50_vd_imagenet_ssld r requests.post(urlurl, headersheaders, datajson.dumps(data)) data r.json()[results][data]请求体采用 JSON 格式images字段为 base64 编码的图片列表top_k指定返回的候选类别数服务端响应中的results[data]即为每张图片的 Top-K 分类结果。这样便完成了一个可直接被业务系统调用的图像分类 HTTP API。延伸阅读与使用建议模型细节resnet50_vd_imagenet_ssld是 ResNet-D 结构变体模型元信息类别、网络、数据集、版本、是否支持微调等见 模块 README网络结构由ConvBNLayer、BottleneckBlock堆叠而成forward返回(logits, feature)二元组后者可作为图像特征向量用于检索、相似度等下游任务见 module.py自定义数据集参考 flowers.py 继承paddle.io.Dataset并实现__getitem__/__len__即可将Flowers替换为业务自己的图像分类数据训练可视化将Trainer的use_vdl置为True后可在 VisualDL 中实时观察 loss 与 acc 曲线便于调整learning_rate与epochsbatch_size 调整GPU 显存受限时可调小batch_size反之增大batch_size可提升训练吞吐需同步关注显存占用。赞分享人工智能预训练微调模型推理服务【免费下载链接】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 resnet50_vd_imagenet_ssld 图像分类模块预测、Fine-tune 与服务化部署实战指南PaddleHub resnet50_vd_imagenet_ssld 图像分类模块预测、Fine tune 与服务化部署实战指南 本指南以 PaddleHu人工智能预训练微调模型推理服务基于 PaddleHub 使用 PPLCNet_x1_5 进行图像分类安装、API 调用与服务化部署实战基于 PaddleHub 使用 PPLCNet_x1_5 进行图像分类安装、API 调用与服务化部署实战 本指南以开源仓库 PaddleFormers 中 p人工智能预训练微调模型推理服务PaddleHub 图像分类实战resnet50_vd_imagenet_ssld 模型安装、Fine-tune 与服务化部署全指南PaddleHub 图像分类实战resnet50_vd_imagenet_ssld 模型安装、Fine tune 与服务化部署全指南 导读 本文以 Paddl人工智能预训练微调模型推理服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考