免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

PaddleHub 图像分类模块实战:res2net101_vd_26w_4s_imagenet 的安装、预测与 Serving 部署指南

PaddleHub 图像分类模块实战:res2net101_vd_26w_4s_imagenet 的安装、预测与 Serving 部署指南 PaddleHub 图像分类模块实战res2net101_vd_26w_4s_imagenet 的安装、预测与 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本指南围绕 PaddleHub 图像分类模块res2net101_vd_26w_4s_imagenet展开完整讲解该 Res2Net 预训练分类模型的环境依赖、安装方式、命令行与 Python 双通道预测、classificationAPI 的参数语义与返回结构以及基于 PaddleHub Serving 的在线服务部署全流程。读完本文你将能够独立完成该模块的本地推理与 HTTP 服务化调用并结合仓库源码理解其数据预处理、推理与后处理的完整内部链路。一、模块概览基于 Res2Net 的 ImageNet 图像分类模型res2net101_vd_26w_4s_imagenet是 PaddleHub 官方提供的图像分类模块其核心信息如下表所示来源README_en.md项目说明模块名称res2net101_vd_26w_4s_imagenet类别图像分类image classification网络Res2Net数据集ImageNet-2012是否支持 Fine-tuning否模块大小179MB最新更新日期-数据指标-Res2Net 是对 ResNet 的一种改进方案其核心思想是在不增加计算负载的前提下提升模型性能——它通过在一个残差块内部按通道维度构造层级化的残差连接即 26w_4s 所代表的宽度与尺度配置使网络在更细粒度上捕捉多尺度特征。该模块基于 Res2Net 结构在 ImageNet-2012 上训练完成接受大小为 224 × 224 × 3 的图片输入可直接通过命令行或 Python 接口完成预测。从仓库源码看该模块的入口类是 module.py 中的Res2Net101vd26w4sImagenet通过moduleinfo装饰器注册了模块元信息当前版本 1.1.0类型为CV/image_classification并实现了classification、serving_method、run_cmd三个对外入口分别支撑 Python 调用、Serving 服务与命令行调用三条使用路径。二、环境依赖与模块安装1. 环境依赖使用该模块前需满足以下依赖版本paddlepaddle 1.6.2paddlehub 1.6.0PaddleHub 的完整安装方式参见安装指南各平台零基础安装教程可参考 Windows 快速开始、Linux 快速开始 与 Mac 快速开始。2. 安装模块执行以下命令即可完成模块安装$ hub install res2net101_vd_26w_4s_imagenet安装成功后模块会连同其预训练模型参数一起下载到本地。结合 module.py 的__init__实现可以看到模块加载时会从res2net101_vd_26w_4s_imagenet_model/model读取推理模型并读取同目录下的 label_list.txt共 1000 行对应 ImageNet 1000 类标签每行格式为类别名, 详细释义作为分类标签词典。三、命令行预测安装完成后最快捷的预测方式是使用hub run命令$ hub run res2net101_vd_26w_4s_imagenet --input_path /PATH/TO/IMAGE命令行调用相关的详细指令说明可参见 PaddleHub 命令行指令。从 module.py 的run_cmd实现可以看到命令行模式实际支持以下可选参数--use_gpu是否使用 GPU 推理默认False--batch_size批大小默认1--top_k返回概率最高的前 k 个类别默认1--input_path待预测图片路径必填。命令内部最终会转化为classification(paths[args.input_path], batch_size..., use_gpu...)调用执行推理。四、Python API 预测1. 预测代码示例在 Python 脚本中先通过hub.Module(name...)加载模块再调用classification接口即可完成预测import paddlehub as hub import cv2 classifier hub.Module(nameres2net101_vd_26w_4s_imagenet) result classifier.classification(images[cv2.imread(/PATH/TO/IMAGE)]) # or # result classifier.classification(paths[/PATH/TO/IMAGE])两种传入方式等价images直接传图片的numpy.ndarray数据paths传图片文件路径二者可以同时传入并合并处理。2. classification API 详解classification的完整签名如下def classification(imagesNone, pathsNone, batch_size1, use_gpuFalse, top_k1):各参数语义参数类型说明imageslist[numpy.ndarray]图片数据列表每个元素的 shape 为 [H, W, C]颜色空间必须为 BGR与 OpenCV 的cv2.imread读取结果一致pathslist[str]图片路径列表batch_sizeint批大小模块会按此大小分批送入推理引擎use_gpubool是否使用 GPU 推理若使用 GPU请先设置CUDA_VISIBLE_DEVICES环境变量top_kint返回预测概率最高的前 k 个类别返回值reslist[dict]列表中的每个元素对应一张输入图片的分类结果为{标签名: 概率}形式的字典。例如返回{Pembroke: 0.98}表示模型判定该图是威尔士柯基犬Pembroke且置信度为 0.98。3. 源码内部链路从图片到分类结果该 API 的完整执行链路可以从仓库源码逐层还原第一步数据预处理data_feed.pyreader生成器会遍历paths与images传入的所有图片并逐张执行process_image预处理resize_short(img, target_size256)保持宽高比将短边缩放至 256 像素使用 LANCZOS 重采样crop_image(img, target_size224, centerTrue)从中心裁剪出 224 × 224 区域DATA_DIM 224统一转换为 RGB 颜色空间转为float32并缩放到 [0, 1]随后按 ImageNet 统计均值/标准差做标准化均值img_mean [0.485, 0.456, 0.406]标准差img_std [0.229, 0.224, 0.225]这与 module.py 中get_expected_image_width/get_expected_image_height返回的 224、以及get_pretrained_images_mean/get_pretrained_images_std返回的均值/标准差完全一致确保输入分布与训练时一致。第二步Paddle Inference 推理module.py首次调用时通过_set_config基于model.pdmodel与model.pdiparams构建paddle.inference.Config并分别创建 CPU 与 GPU 两个 predictorGPU 配置使用 1000MB 初始显存池是否创建 GPU predictor 取决于CUDA_VISIBLE_DEVICES环境变量是否存在有效值预测时按batch_size将预处理后的图片分批构造为[N, 3, 224, 224]的张量经input_handle.copy_from_cpu灌入输入调用predictor.run()后从输出句柄取回原始 logits。第三步后处理processor.py对每张图的 logits 依次执行softmax得到概率分布再用np.argsort(...)[::-1]降序取前top_k个索引最后将索引映射为标签取label_list中每行逗号前的类别名作为 key对应概率作为 value组装成返回字典。五、Server 部署PaddleHub Serving 在线服务PaddleHub Serving 可以将图像分类能力一键部署为在线 HTTP 服务步骤如下。第一步启动 PaddleHub Serving$ hub serving start -m res2net101_vd_26w_4s_imagenet启动成功后服务默认监听8866端口。NOTE如果使用 GPU 进行预测需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量否则无需设置。从 paddlehub/commands/serving.py 的实现看ServingCommand会为服务写入 PID 文件存放在配置目录下名为serving_port.json并依据经验公式worker 数 CPU 核数 × 2 1配置多进程 worker见number_of_workers以支撑并发的预测请求。第二步发送预测请求服务就绪后用以下代码即可发送 HTTP 请求获取分类结果import requests import json import cv2 import base64 def cv2_to_base64(image): data cv2.imencode(.jpg, image)[1] return base64.b64encode(data.tostring()).decode(utf8) # 发送HTTP请求 data {images:[cv2_to_base64(cv2.imread(/PATH/TO/IMAGE))]} headers {Content-type: application/json} url http://127.0.0.1:8866/predict/res2net101_vd_26w_4s_imagenet r requests.post(urlurl, headersheaders, datajson.dumps(data)) # 打印预测结果 print(r.json()[results])请求要点说明图片以base64 编码字符串形式放入 JSON 的images字段请求 URL 路径格式为http://host:port/predict/模块名服务端收到请求后会调用 module.py 中的serving_method先通过base64_to_cv2见 processor.py将 base64 字符串解码为 BGR 图像再复用classification完成推理并返回结果因此响应结构与本地 API 完全一致。六、测试用例与结果验证仓库为该模块提供了完整的单元测试 test.py覆盖了主要使用场景test_classification1/2分别以paths和images方式预测一张柯基犬图片断言结果中包含Pembroke类别且置信度大于 0.5test_classification3验证use_gpuTrue路径测试中通过os.environ[CUDA_VISIBLE_DEVICES] 0预先声明 GPU 设备test_classification4传入不存在的图片路径no.jpg时断言抛出AssertionError对应 data_feed.py 中的文件存在性校验test_classification5images传入字符串而非numpy.ndarray时断言抛出TypeErrortest_save_inference_model验证模块可导出model.pdmodel与model.pdiparams推理模型文件。这些用例既验证了模块功能的正确性也清晰地展示了各类异常输入的边界行为可作为二次开发或接入时的参考。七、版本与更新历史1.0.0初始发布1.1.0移除 Fluid API当前仓库源码中moduleinfo的version1.1.0即对应此版本。如需安装指定版本可执行$ hub install res2net101_vd_26w_4s_imagenet1.1.0八、小结res2net101_vd_26w_4s_imagenet提供了一个开箱即用的 Res2Net 图像分类方案一条命令完成安装命令行、Python API、Serving 服务三种方式覆盖了从本地实验到在线部署的完整链路。结合 module.py、data_feed.py 与 processor.py 的源码开发者可以清晰地理解短边缩放 → 中心裁剪 → 归一化 → 推理 → softmax top-k的完整处理管线便于在此基础上替换输入、调整top_k/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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表