ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

PaddleHub EfficientNetB0 图像分类模块(efficientnetb0_small_imagenet)实战指南:安装、预测与 Serving 部署

PaddleHub EfficientNetB0 图像分类模块(efficientnetb0_small_imagenet)实战指南:安装、预测与 Serving 部署 PaddleHub EfficientNetB0 图像分类模块efficientnetb0_small_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 模块efficientnetb0_small_imagenet展开该模块以谷歌提出的轻量级网络 EfficientNetB0 为骨干基于 ImageNet-2012 数据集训练输入规格为 224×224×3可对图片进行 1000 类分类预测。通过阅读本文你将掌握该模块的安装方式、命令行与 Python 接口两种预测玩法、classificationAPI 的完整参数语义以及基于 PaddleHub Serving 的在线服务部署与 HTTP 调用全流程并理解其背后的数据预处理、推理与后处理实现细节。一、模块基本信息与模型背景efficientnetb0_small_imagenet是当前仓库modules/image/classification/efficientnetb0_small_imagenet/目录下提供的一个图像分类模块其基本属性如下属性内容模块名称efficientnetb0_small_imagenet类别图像分类网络EfficientNet数据集ImageNet-2012是否支持 Fine-tuning否模型大小20MB最新更新日期-数据指标-从模型原理上看EfficientNet 是 Google 提出的轻量级网络主干由MBConvMobile Inverted Bottleneck Conv模块堆叠而成并引入了Squeeze-and-ExcitationSE通道注意力操作来优化网络结构——前者通过深度可分离卷积与倒置残差结构显著降低参数量和计算量后者让网络能自适应地对不同通道特征进行加权从而在较小模型尺寸下保持较强的分类精度。该模块基于 EfficientNetB0 结构在 ImageNet-2012 上训练完成可直接接收 224×224×3 的图片输入。需要注意的是当前模块不支持 Fine-tuning即它被定位为一个开箱即用的推理模型通过 PaddleHub 统一封装后支持命令行、Python 接口以及在线 Serving 三种使用形态。二、环境依赖与安装1、环境依赖使用该模块前需要满足以下依赖版本要求paddlepaddle 1.6.2paddlehub 1.6.0PaddleHub 的安装方式可参考 PaddleHub 安装指南2、安装模块在满足依赖后通过hub install命令即可一键安装该模块$ hub install efficientnetb0_small_imagenet安装过程中如遇到问题可参考平台相关的快速开始文档Windows 快速开始 | Linux 快速开始 | Mac 快速开始如需安装指定版本例如移除 Fluid API 的 1.1.0 版本可以使用带版本号的安装命令$ hub install efficientnetb0_small_imagenet1.1.0三、模块 API 预测1、命令行预测安装完成后可直接通过hub run命令在命令行完成图像分类$ hub run efficientnetb0_small_imagenet --input_path /PATH/TO/IMAGE从 module.py 的run_cmd实现可以看出命令行入口实际是classification接口的封装它还暴露了以下可选参数方便在不写代码的情况下控制推理行为--input_path待分类图片路径必填--batch_size批大小默认1--use_gpu是否使用 GPU默认False--top_k返回置信度最高的前 k 个类别默认1。关于命令行调用 PaddleHub 模块的完整指令说明可进一步参考 PaddleHub 命令行指令。2、Python 接口预测示例在 Python 代码中仅需两行核心代码即可完成一次分类预测import paddlehub as hub import cv2 classifier hub.Module(nameefficientnetb0_small_imagenet) result classifier.classification(images[cv2.imread(/PATH/TO/IMAGE)]) # or # result classifier.classification(paths[/PATH/TO/IMAGE])images与paths两种传参方式等价可任选其一其中images需要传入 BGR 颜色空间的numpy.ndarray列表即cv2.imread的默认输出格式。3、classification API 详解classification接口的完整签名如下def classification(imagesNone, pathsNone, batch_size1, use_gpuFalse, top_k1):参数说明imageslist[numpy.ndarray]图片数据列表每个元素 shape 为 [H, W, C]颜色空间为 BGRpathslist[str]图片路径列表batch_sizeint批大小默认1use_gpubool是否使用 GPU 推理默认False。若使用 GPU请先设置CUDA_VISIBLE_DEVICES环境变量top_kint返回预测结果中置信度最高的前 k 个类别默认1。返回值reslist[dict]分类结果列表每个元素是一个字典key 为类别名称value 为对应的置信度概率。例如{Pembroke: 0.98}。GPU 使用的底层校验从 module.py 源码可以看到当use_gpuTrue时模块会先检查环境变量CUDA_VISIBLE_DEVICES是否被正确设置要求其首字符可被解析为整数否则会抛出如下异常提示RuntimeError: Environment Variable CUDA_VISIBLE_DEVICES is not set correctly. If you wanna use gpu, please set CUDA_VISIBLE_DEVICES as cuda_device_id.因此在实际使用 GPU 推理前务必先执行类似export CUDA_VISIBLE_DEVICES0的设置。四、源码级实现剖析从输入图片到分类结果为了让读者对该模块的预测链路有更深理解这里结合仓库源码梳理一次完整推理的内部流程。模块目录共包含以下文件module.py模块主类与预测逻辑data_feed.py数据读取与预处理processor.pysoftmax 与后处理label_list.txtImageNet 1000 类标签与模型输出维度一一对应test.py模块单元测试1、数据预处理data_feed.pydata_feed.py 中的reader负责把输入图片转换为模型需要的张量process_image的具体处理流程为短边缩放resize_short(img, target_size256)将图片短边等比缩放到 256中心裁剪crop_image(img, target_size224, centerTrue)从缩放后的图片中心裁剪出 224×224 区域DATA_DIM 224通道转换非 RGB 模式统一转换为 RGB随后transpose((2, 0, 1))将 HWC 调整为 CHW归一化像素值除以 255 缩放到 [0, 1] 后减去均值、除以标准差img_mean np.array([0.485, 0.456, 0.406]).reshape((3, 1, 1)) img_std np.array([0.229, 0.224, 0.225]).reshape((3, 1, 1))这里的均值/标准差与 module.py 中get_pretrained_images_mean/get_pretrained_images_std返回的数值一致采用的是 ImageNet 训练的常用统计量。2、推理执行module.pymodule.py 的classification方法实现要点如下通过reader生成器收集所有预处理后的图片并按batch_size切分成多个 batch 依次推理预测器使用 Paddle Inference 创建_set_config中同时初始化了 CPU 与 GPU 两套 predictorGPU 分支通过检测CUDA_VISIBLE_DEVICES环境变量决定是否创建GPU 显存池初始大小设为 1000MB每个 batch 通过input_handle.copy_from_cpu(...)喂入数据predictor.run()执行推理后从输出 handle 取出网络原始 logits。3、后处理processor.pyprocessor.py 的postprocess对每个样本执行对 logits 施加softmax得到类别概率分布使用np.argsort降序排列取前top_k个索引根据索引在label_list中查找类别名标签格式为类别名, 类别描述取逗号前的部分组织成{label: probability}字典返回。五、基于 PaddleHub Serving 的在线服务部署PaddleHub Serving 可将该图像分类模块部署为可对外提供 HTTP 服务的在线推理服务。第一步启动 PaddleHub Serving运行启动命令$ hub serving start -m efficientnetb0_small_imagenet服务启动后即完成图像分类在线服务的部署默认监听端口为 8866。注意如果使用 GPU 进行预测需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量若使用 CPU则无需设置。第二步发送预测请求服务端配置完成后使用以下代码即可发送预测请求并获取结果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/efficientnetb0_small_imagenet r requests.post(urlurl, headersheaders, datajson.dumps(data)) # 打印预测结果 print(r.json()[results])请求体中images字段是经过 base64 编码的图片字符串列表服务端接收到请求后会将其解码并送入模型推理。这与 module.py 中标注了serving装饰器的serving_method相对应——该入口负责把 base64 字符串解码为图片后复用分类流程完成推理最终结果通过results字段返回。六、模块质量验证单元测试仓库为该模块提供了较完整的单元测试 test.py可直接用于验证模块的可用性测试覆盖了以下场景test_classification1通过paths传图并断言结果包含Pembroke柯基犬类别且置信度大于 0.5test_classification2通过images传入cv2.imread读取的 ndarray验证images方式test_classification3use_gpuTrue场景下的 GPU 推理test_classification4传入不存在的文件路径应抛出AssertionError对应data_feed.py中的文件存在性断言test_classification5向images传入字符串而非 ndarray 应抛出TypeErrortest_save_inference_model验证save_inference_model能正确导出model.pdmodel与model.pdiparams推理模型文件。这些测试用例一方面印证了paths/images两种调用方式与参数校验逻辑另一方面也演示了如何对该类 PaddleHub 模块进行端到端验证。七、版本更新历史版本说明1.0.0初始发布1.1.0移除 Fluid API如需升级/安装 1.1.0 版本可使用$ hub install efficientnetb0_small_imagenet1.1.0小结efficientnetb0_small_imagenet是一个体积小巧约 20MB、开箱即用的 ImageNet 图像分类模块。通过hub run命令行、classificationPython 接口与 PaddleHub Serving 三种方式你可以分别满足快速验证、程序化集成与在线服务化的需求。结合仓库内 module.py、data_feed.py 与 processor.py 的源码可以完整还原其预处理 → Paddle Inference 推理 → softmax 后处理的预测链路为二次开发或同类 CV 模块的接入提供直接参考。【免费下载链接】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),仅供参考
返回列表