ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

基于 PaddleHub 的 ESNet_x0_25 轻量级图像分类模型实战指南:安装、预测与 Serving 部署

基于 PaddleHub 的 ESNet_x0_25 轻量级图像分类模型实战指南:安装、预测与 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点击查看免费下载导读esnet_x0_25_imagenet是 PaddleHub 生态中一个基于百度自研轻量级网络 ESNetEnhanced ShuffleNet的 ImageNet-2012 图像分类预训练模型模型规模参数 scale 为 x0.25。本指南以该模块的 README.md 为核心脉络结合仓库内的网络结构源码与预测实现完整讲解从环境安装、命令行预测、Python API 调用到 PaddleHub Serving 在线服务部署的全流程并深入剖析 ESNet 的网络设计细节与预处理/后处理管线帮助读者在 ARM 设备或 CPU 场景下快速落地轻量级图像分类能力。一、模型基本信息ESNet 是什么模型名称esnet_x0_25_imagenet类别图像-图像分类网络ESNet数据集ImageNet-2012是否支持 Fine-tuning否模型大小10 MB最新更新日期2022-04-02数据指标Acc1.1 模型介绍ESNetEnhanced ShuffleNet是百度自研的轻量级网络它在 ShuffleNetV2 的基础上融合了 MobileNetV3、GhostNet、PPLCNet 的优点组合成一个在 ARM 设备上速度更快、精度更高的网络。由于其出色的表现PaddleDetection 推出的 PP-PicoDet 目标检测模型使用了 ESNet 作为 backbone配合更强的目标检测算法刷新了目标检测模型在 ARM 设备上的 SOTA 指标。本模块是 ESNet 在模型规模参数 scale 为x0.25下的图像分类模型模型大小仅 10 MB适合资源受限的移动端 / 嵌入式场景。1.2 从源码看 ESNet 的网络设计在 model.py 中可以看到 ESNet 的完整 Paddle 实现其核心构件包括channel_shuffle(x, groups)ShuffleNet 系列标志性的通道混洗操作通过reshape→transpose→reshape三步实现源码见 model.py#L294-L300ESBlock1不降采样的基本块将输入在通道维 split 成两半一路走1x1 卷积 → 3x3 深度可分离卷积并引入SE 注意力模块SEModule由 AdaptiveAvgPool2D 两个 1x1 卷积 Hardsigmoid 构成对应 MobileNetV3 思想最后 concat 后做 channel shuffleESBlock2stride2 的降采样块采用双分支结构右侧主干分支 左侧 shortcut 分支两个分支分别下采样后 concat再经过concat_dw深度卷积与concat_pw逐点卷积融合对应 GhostNet / PPLCNet 中的低成本卷积思想ConvBNLayerConv BatchNorm Hardswish激活的标准组合激活函数可由if_act控制make_divisible将通道数对齐到 8 的整数倍提升 ARM 设备上的计算效率。网络主体按stage_repeats [3, 7, 3]堆叠 13 个 blockMODEL_STAGES_PATTERN {ESNet: [blocks[2], blocks[9], blocks[12]]}最后接AdaptiveAvgPool2D → last_conv(1x1, 扩展到 class_expand1280) → Hardswish → Dropout → Flatten → Linear分类头输出 1000 类 logits整体结构见 model.py#L428-L492。ESNet_x0_25()工厂函数通过ESNet(scale0.25, ...)实例化即所有 stage 通道数均乘以 0.25对应make_divisible(116 * scale)、make_divisible(232 * scale)、make_divisible(464 * scale)这正是x0.25命名与 10MB 体积的来源。二、安装2.1 环境依赖使用本模块需要满足以下依赖paddlepaddle 1.6.2paddlehub 1.6.0PaddleHub 的安装方法参见 如何安装 paddlehub。2.2 安装模块$ hub install esnet_x0_25_imagenet安装完成后模块默认存放在${HUB_HOME}/.paddlehub/modules目录下若未设置HUB_HOME环境变量则保存在用户主目录下参见 PaddleHub 命令行工具说明。安装时如遇问题可参考零基础 Windows 安装零基础 Linux 安装零基础 MacOS 安装三、模型 API 预测3.1 命令行预测通过命令行方式调用分类模型只需指定输入图片路径$ hub run esnet_x0_25_imagenet --input_path /PATH/TO/IMAGECV 类任务统一通过--input_path指定输入数据NLP 类任务则使用--input_text更多命令用法见 PaddleHub 命令行指令。从 module.py#L110-L130 的run_cmd实现可以看出命令行预测实际就是在内部组装--input_path、--use_gpu、--batch_size、--top_k四个参数后调用classification()方法$ hub run esnet_x0_25_imagenet --input_path /PATH/TO/IMAGE --top_k 5 --use_gpu其中--use_gpu为 store_true 开关、--batch_size与--top_k默认值均为 1见 module.py#L141-L148。3.2 预测代码示例import paddlehub as hub import cv2 classifier hub.Module(nameesnet_x0_25_imagenet) result classifier.classification(images[cv2.imread(/PATH/TO/IMAGE)]) # or # result classifier.classification(paths[/PATH/TO/IMAGE])3.3 classification API分类接口的完整签名如下def classification(imagesNone, pathsNone, batch_size1, use_gpuFalse, top_k1):参数说明参数类型说明imageslist[numpy.ndarray]图片数据每个元素的 shape 均为 [H, W, C]颜色空间为BGRpathslist[str]图片的路径列表batch_sizeintbatch 的大小默认 1use_gpubool是否使用 GPU若使用 GPU请先设置CUDA_VISIBLE_DEVICES环境变量top_kint返回预测结果的前 k 个类别返回值res(list[dict])分类结果列表每个元素均为字典包含以下 keyclass_ids种类索引scores置信度label_names种类名称images与paths可以单独使用也可以同时传入源码会依次合并处理。若不提供任何输入则会打印提示信息并直接返回。3.4 预测流程源码解读在 module.py#L54-L108 中可以看到classification的完整实现预测管线如下设备初始化paddle.disable_static()切换到动态图模式use_gpuTrue时设备为gpu:0否则为cpu输入规范化images输入逐张执行image[:, :, ::-1]paths输入通过cv2.imread读取后同样翻转通道 —— 这正对应 API 文档中颜色空间为 BGR的约定opencv 读入为 BGR翻转后转 RGB 送入网络预处理管线对每张图依次执行create_operators(self.config[Infer][transforms])构建的预处理算子详见下文 3.5 节分批推理按batch_size收集数据paddle.to_tensor转 Tensor 后送入模型兼容模型输出为 list、dictlogits/output 键等多种形式后处理postprocess_func Topk(top_k, self.label_path)对 logits 做 softmax 并取前 k 个结果。模块加载时module.py#L44-L52 会读取ESNet_x0_25.yaml配置文件、imagenet1k_label_list.txt标签文件与ESNet_x0_25_pretrained.pdparams预训练权重用paddle.loadset_dict完成权重复制。3.5 预处理与后处理算子预处理算子由配置驱动在 processor.py 中实现create_operators会根据 yaml 中的算子名动态实例化。常用算子包括ResizeImage支持按resize_short按短边等比缩放或固定size缩放底层封装了 cv2 与 PIL 两种后端插值方式支持 nearest / bilinear / area / bicubic / lanczosCropImage从图像中心裁剪指定尺寸中心裁剪用于推理RandCropImage/RandFlipImage随机裁剪与随机翻转主要用于训练阶段的数据增强NormalizeImage(img * scale - mean) / std归一化默认 mean[0.485, 0.456, 0.406]、std[0.229, 0.224, 0.225]、scale1/255ToCHWImage将 HWC 布局转 CHW适配 Paddle 张量格式。后处理使用Topk类processor.py#L319-L374对网络输出做softmax得到概率分布argsort取前 topk 个索引再通过imagenet1k_label_list.txt的类别映射表将索引翻译为label_namesscores 保留 5 位小数。若标签文件缺失label_names为空但class_ids与scores仍正常返回。四、服务部署PaddleHub Serving 在线服务PaddleHub Serving 可以一键部署一个图像识别的在线服务。第一步启动 PaddleHub Serving$ hub serving start -m esnet_x0_25_imagenet执行上述命令后即完成图像识别在线服务的部署默认端口号为 8866。NOTE如使用 GPU 预测需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量否则无需设置。从 serving.py 的源码可以看到端口可通过--port/-p参数自定义默认值即为 8866self.parser.add_argument(--port, -p, nargs?, default8866)服务内部会加载模块并通过 HTTP 协议对外提供/predict/{module_name}接口。第二步发送预测请求服务端配置完成后以下代码即可实现发送预测请求、获取预测结果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/esnet_x0_25_imagenet r requests.post(urlurl, headersheaders, datajson.dumps(data)) # 打印预测结果 print(r.json()[results])请求时图片需先编码为 base64 字符串随 JSON 提交服务端收到请求后通过模块的serving_methodmodule.py#L132-L139调用base64_to_cv2解码图片并执行classification()最终返回与 3.3 节相同结构的分类结果。这种方式非常适合将分类能力封装成独立微服务供其他系统通过 HTTP 调用。五、更新历史1.0.0初始发布如需安装指定版本可执行$ hub install esnet_x0_25_imagenet1.0.0总结esnet_x0_25_imagenet模块完整覆盖了轻量级图像分类从模型下载 → 命令行/API 预测 → HTTP 服务化的闭环流程模型层面ESNet 融合 ShuffleNetV2、MobileNetV3、GhostNet、PPLCNet 的设计思想x0.25 尺度下模型仅 10 MB适合 ARM 设备部署可进一步阅读 model.py 理解其 block 结构与 scale 机制使用层面hub run、hub.Module(...).classification()、hub serving start三种方式覆盖命令行、Python 脚本与在线服务三大场景工程层面预处理/后处理算子与配置解耦可通过 yaml 灵活调整便于迁移到自定义分类任务。相关文档可继续参阅PaddleHub 命令行指令、PaddleHub 安装指南。如需了解同系列更大规模的 ESNet 模型scalex0.5模型大小 12 MB可查看同目录下的 esnet_x0_5_imagenet README。赞分享人工智能预训练微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载相关推荐超轻量OCR微服务实战基于PaddleHub Serving的分布式部署指南超轻量OCR微服务实战基于PaddleHub Serving的分布式部署指南 你是否还在为OCR服务的高并发处理发愁是否因复杂的分布式架构设计望而却步本文人工智能计算机视觉OCR深度学习大模型RAGCANN/hcomm通信通道屏障操作HcommChannelFenceOnThread 产品支持情况 Ascend 950PR/Ascend 950DT支持 Atlas A3 训练系列产品/At人工智能预训练微调模型推理服务如何使用Phoenix Swagger生成专业API文档从配置到部署的终极指南如何使用Phoenix Swagger生成专业API文档从配置到部署的终极指南 Phoenix Swagger是为Phoenix框架提供Swagger集成的强人工智能预训练微调模型推理服务上一篇【亲测免费】 推荐使用Vue-cropperjs - 简化图片裁剪的Vue组件下一篇Velocity React 项目教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表