资讯动态

PaddleHub HRNet40 图像分类模型实战:从命令行预测到 Fine-tune 与 Serving 部署

发布时间:2026/9/23 16:51:50 来源:尧图企业网站定制
人工智能预训练微调模型推理服务【免费下载链接】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 开源仓库中的hrnet40_imagenet图像分类模块模块文档为核心系统讲解 HRNet 高分辨率网络的模型结构、环境安装、命令行与 Python API 预测、基于 Flowers 数据集的 Fine-tune 全流程以及 PaddleHub Serving 服务化部署。读完本文你将掌握在 PaddlePaddle 2.0 PaddleHub 2.0 环境下完整走通加载预训练模型 → 数据预处理 → 微调训练 → 最优模型保存 → 在线服务部署的端到端图像分类实战链路。一、模型基本信息hrnet40_imagenet是 PaddleHub 提供的图像分类预训练模块核心信息如下项目内容模型名称hrnet40_imagenet类别图像-图像分类网络HRNet数据集ImageNet-2012是否支持 Fine-tuning是模型大小333MB指标-最新更新日期2021-09-14当前版本1.0.0HRNetHigh-Resolution Net是微软亚洲研究院在 2019 年提出的神经网络结构。与之前先下采样提取深层语义、再恢复分辨率的传统卷积网络不同HRNet 在整个网络深层阶段依然保持高分辨率特征图的并行计算因此输出的关键点热图在空间位置上更加精确。这种全程保持高分辨率的特性使得它在对空间分辨率敏感的视觉任务如关键点检测、目标检测、语义分割中同样表现突出。从仓库源码看module.py 中通过moduleinfo装饰器注册了该模块typeCV/classificationsummary明确说明该模块使用 ImageNet 数据集训练类别标签列表见 label_list.txt共 1000 类即 ImageNet-2012 标准类别。二、HRNet40 网络结构与源码实现解析2.1 高分辨率多分支并行架构在 module.py 的HRNet40类中网络宽度self.width 40并通过self.channels字典定义了不同宽度18/30/32/40/44/48/60/64对应的分支通道数。对于 width40第 2 阶段通道数[40, 80]第 3 阶段通道数[40, 80, 160]第 4 阶段通道数[40, 80, 160, 320]同时num_modules_2, num_modules_3, num_modules_4 1, 4, 3表示第 2/3/4 阶段分别堆叠 1、4、3 个 HighResolutionModule。整个前向流程forward为两个 stride2 的 3×3 卷积conv_layer1_1、conv_layer1_2对输入降采样Layer1堆叠 4 个 BottleneckBlock 提取初始特征依次经过tr1/st2、tr2/st3、tr3/st4三个TransitionLayer Stage组合逐步将单分支扩展为 2、3、4 个并行高分辨率分支分类头LastClsOut对各分支做 Bottleneck 处理并通过cls_head_conv_list逐级融合多尺度特征经过 1×1 卷积、全局平均池化后由nn.Linear(2048, class_dim)输出分类 logits。2.2 核心组件的底层实现从源码结构看HRNet40 由以下可复用组件组成各组件在 module.py 中均有对应实现ConvBNLayer卷积 BatchNorm 组合层卷积默认不带 biasBatchNorm 负责激活actrelu或NoneBasicBlock/BottleneckBlock标准残差块支持downsample短接与可选的 SE 注意力模块has_se本模型未启用self.has_se FalseBranches并行分支每个分支独立堆叠block_num4个 BasicBlockFuseLayers多分辨率特征融合层高分辨率分支通过F.upsample(..., modenearest)上采样与低分辨率分支对齐相加低分辨率分支通过 stride2 卷积逐步降采样后相加HighResolutionModule一个分支计算 特征融合的完整模块Stage多个 HighResolutionModule 的顺序堆叠。这种多分支并行 反复跨分辨率融合的设计正是 HRNet 能在深层保持高分辨率特征的关键也是它与 ResNet 等串行下采样网络的本质区别。三、环境依赖与模块安装3.1 环境依赖使用hrnet40_imagenet需要满足以下版本要求paddlepaddle 2.0.0paddlehub 2.0.03.2 安装模块执行以下命令安装模块$ hub install hrnet40_imagenet若安装过程中遇到问题可参考仓库内的零基础安装文档零基础 Windows 安装零基础 Linux 安装零基础 MacOS 安装四、模型 API 预测4.1 命令行预测hub run命令通过 paddlehub/commands/run.py 中的RunCommand实现它加载指定 Module调用被runnable装饰的run_cmd方法见 cv_module.py该方法会解析--input_path与--top_k两个参数并执行预测$ hub run hrnet40_imagenet --input_path /PATH/TO/IMAGE --top_k 5参数说明--input_path待预测图片的路径必填--top_k返回置信度最高的前 k 个分类结果默认值为 1。4.2 Python 代码预测import paddle import paddlehub as hub if __name__ __main__: model hub.Module(namehrnet40_imagenet) result model.predict([flower.jpg])predict方法定义在 cv_module.py 的ImageClassifierModule中其内部流程为将模型切换为 eval 模式并在paddle.no_grad()下推理对输入图像依次执行模块内置的transforms预处理前向得到 logits 后经F.softmax转为概率通过np.argsort(preds)[:, ::-1][:, :top_k]取出 Top-k 类别索引并映射为self.labels中的类别名称返回形如[{类别名: 概率值}, ...]的字典列表。其中transforms在 module.py 中定义与 Fine-tune 阶段保持一致Resize 256 → CenterCrop 224 → 按 ImageNet 均值/方差归一化。五、基于 Flowers 数据集进行 Fine-tune在完成 PaddlePaddle 与 PaddleHub 安装后执行python train.py即可使用hrnet40_imagenet对 Flowers 数据集进行 Fine-tune。完整代码参考 demo/image_classification/train.py该示例默认使用resnet50_vd_imagenet_ssld将name替换为hrnet40_imagenet即可无缝切换。下面按四步拆解。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数据增强模块实现见 paddlehub/vision/transforms.py提供了丰富的数据预处理方式用户可按需替换T.Compose按顺序组合多个预处理算子to_rgbTrue表示将 OpenCV 读入的 BGR 图像转为 RGBchannel_first默认为 True最终输出[C, H, W]布局T.Resize((256, 256))将图像缩放到 256×256支持NEAREST/LINEAR/CUBIC/AREA/LANCZOS4/RANDOM等插值模式默认LINEART.CenterCrop(224)从图像中心裁剪出 224×224 区域T.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225])使用 ImageNet 数据集的均值与标准差做标准化与该预训练模型的训练分布保持一致。Step 2下载数据集并使用from paddlehub.datasets import Flowers flowers Flowers(transforms) flowers_validate Flowers(transforms, modeval)参数说明transforms数据预处理方式mode数据模式可选项有train、test、val默认为train。Flowers数据集的实现见 paddlehub/datasets/flowers.py它是一个 5 分类花卉数据集num_classes 5通过download_data装饰器在首次使用时自动从网络下载并解压到用户目录下的$HOME/.paddlehub/dataset目录源码中对应hubenv.DATA_HOME下的flower_photos目录随后按train_list.txt/test_list.txt/validate_list.txt读取样本路径与标签。Step 3加载预训练模型model hub.Module(namehrnet40_imagenet, label_list[roses, tulips, daisy, sunflowers, dandelion])参数说明name预训练模型的名字即hrnet40_imagenetlabel_list设置输出分类类别默认为 ImageNet-2012 的 1000 类对应 label_list.txt传入自定义列表后模型最后的全连接层输出维度会动态调整为len(label_list)。加载时module.py 会从模块目录加载预训练权重model.pdparams若指定了load_checkpoint参数则优先加载该路径下的微调权重。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)优化策略PaddlePaddle 2.0 提供了SGD、Adam、Adamax等多种优化器其中Adam常用参数learning_rate全局学习率默认 1e-3parameters待优化的模型参数。运行配置Trainer主要控制 Fine-tune 的训练实现见 paddlehub/finetune/trainer.py包含以下可控制参数参数说明model被优化模型必须是paddle.nn.Layer实例optimizer优化器选择use_gpu是否使用 GPU 训练设为 True 时调用paddle.set_device(gpu)use_vdl是否使用 VisualDL 可视化训练过程默认 True日志写入checkpoint_dir/visualizationcheckpoint_dir保存模型参数的地址未指定时默认为ckpt_时间戳compare_metrics保存最优模型的衡量指标比较方法默认取验证指标字典第一个 key越大越好trainer.train主要控制具体的训练过程参数如下参数说明train_dataset训练时所用的数据集epochs训练轮数batch_size训练的批大小使用 GPU 时请根据显存实际情况调整num_workers数据加载子进程数量默认为 0eval_dataset验证集设置后每个save_interval轮执行一次评估log_interval打印日志的间隔单位为执行的批训练次数默认 10save_interval保存模型的间隔频次单位为训练轮数默认 10从 trainer.py 的实现可以看到每个 epoch 结束时若满足save_interval条件Trainer 会先对验证集执行evaluate再通过compare_metrics判断当前验证指标是否优于历史最优若更优则将模型权重与优化器状态保存到${checkpoint_dir}/best_model同时记录metrics.pkl。每个 epoch 的 checkpointmodel.pdparamsmodel.pdopt也会按轮保存断点续训时_load_checkpoint会自动恢复最近一轮的状态。训练日志loss、acc、lr、ETA由logger.train输出并同步写入 VisualDL。模型预测加载 Fine-tune 结果Fine-tune 完成后验证集上表现最优的模型保存在${CHECKPOINT_DIR}/best_model目录下${CHECKPOINT_DIR}为训练时选择的 checkpoint 目录。使用该模型预测的脚本参考 demo/image_classification/predict.py如下import paddle import paddlehub as hub if __name__ __main__: model hub.Module(namehrnet40_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 时保持一致否则类别映射与权重维度不匹配会导致预测错误。六、服务部署PaddleHub ServingPaddleHub Serving 可以将hrnet40_imagenet部署为一个在线分类任务服务整体分两步完成。第一步启动 PaddleHub Serving$ hub serving start -m hrnet40_imagenet执行该命令即完成分类任务服务化 API 的部署默认端口号为8866。NOTE如使用 GPU 预测需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量否则无需设置。第二步发送预测请求服务端配置完成后以下代码即可发送预测请求并获取结果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/hrnet40_imagenet r requests.post(urlurl, headersheaders, datajson.dumps(data)) data r.json()[results][data]服务端处理逻辑由 cv_module.py 中被serving装饰的serving_method承担它接收 base64 编码的图片列表解码为 BGR 图像后调用predict支持top_k参数并将每个类别的概率统一转换为float后封装进{data: ...}返回给客户端。七、更新历史1.0.0初始发布。八、延伸阅读图像分类 Fine-tune 通用流程文档docs/docs_ch/finetune/image_classification.md自定义数据集接入指南docs/docs_ch/finetune/customized_dataset.md训练器实现paddlehub/finetune/trainer.py数据集实现paddlehub/datasets/flowers.py数据预处理算子paddlehub/vision/transforms.py本仓库modules/image/classification目录下还提供了大量可直接替换的 ImageNet 预训练分类模块如 resnet、mobilenet、efficientnet、resnext、hrnet 全系列等只需将hub.Module(name...)中的模型名替换即可复用本文介绍的完整流程。赞分享人工智能预训练微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载相关推荐NCMconverter技术解密打破音乐格式壁垒的Go语言解决方案NCMconverter技术解密打破音乐格式壁垒的Go语言解决方案 在数字音乐时代格式兼容性往往成为用户体验的隐形障碍。网易云音乐的NCM格式凭借其加密保护人工智能预训练微调模型推理服务PaddleHub 图像着色实战基于 user_guided_colorization 的 Fine-tune、命令行预测与服务化部署PaddleHub 图像着色实战基于 user_guided_colorization 的 Fine tune、命令行预测与服务化部署 本指南以 docs/d人工智能预训练微调模型推理服务AI4R高级教程如何扩展与定制自己的机器学习算法AI4R高级教程如何扩展与定制自己的机器学习算法 AI4RArtificial Intelligence for Ruby是一个专为Ruby开发者设计的机人工智能预训练微调模型推理服务上一篇把微信公众号变成RSS一份可私有化的完整自托管笔记下一篇苍穹(CangChain)框架技术文档创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价