
PaddleHub VGG11_ImageNet 图像分类模块实战指南安装、命令行与 Python API 预测全解析【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleFormers本指南以 modules/image/classification/vgg11_imagenet/README.md 为主体系统讲解 PaddleHub 中vgg11_imagenet图像分类模块的基本信息、环境准备、安装方式、命令行预测与 Python API 调用方法并结合仓库内 VGG 系列模块源码vgg16_imagenet 模块、VGG 网络实现深入剖析其网络结构、数据预处理与推理流程。读者读完本文后将能够独立完成该模块的安装部署并通过两种方式对任意图片执行 ImageNet 1000 类分类预测。一、模型基本信息VGG11 是什么vgg11_imagenet是 PaddleHub 提供的图像分类预训练模型模块其基本信息如下表所示模型名称vgg11_imagenet类别图像-图像分类网络VGG数据集ImageNet-2012是否支持 Fine-tuning否模型大小507MB最新更新日期-数据指标-VGG 是由牛津大学计算机视觉组Visual Geometry Group与 DeepMind 于 2014 年提出的图像分类模型系列。该系列的核心贡献在于系统探索了卷积神经网络的深度与其性能之间的关系通过实验证明了在合理设计的条件下增加网络深度能够在一定程度上提升网络的最终性能。时至今日VGG 仍被大量图像任务目标检测、语义分割、姿态估计等用作特征提取的 BackBone 网络。本模块的网络结构为VGG11即 VGG 系列中最浅的变体11 层权重网络卷积组深度配置为[1, 1, 2, 2, 2]通道数沿64 → 128 → 256 → 512 → 512逐级扩展末端为三个全连接层fc6/fc7/fc8最终通过 softmax 输出 1000 类概率。模型基于 ImageNet-2012 数据集训练接受输入图片大小为224 × 224 × 3宽 × 高 × 通道支持直接通过命令行或 Python 接口进行预测。需要说明当前仓库镜像中vgg11_imagenet目录仅保留了文档README.md 与 README_en.md而同一 VGG 系列的vgg16_imagenet目录保留了完整模块源码module.py、vgg.py、data_feed.py、processor.py。VGG11 与 VGG16 共享同一套网络范式仅在深度配置上不同因此下文源码级解析均以该系列实现为参考。二、VGG 网络结构源码解析从 vgg.py 的源码结构可以看到 VGG 系列实现的几个关键设计1. 深度配置表源码通过depth_cfg字典维护不同深度变体的卷积层数量配置self.depth_cfg {16: [2, 2, 3, 3, 3], 19: [2, 2, 4, 4, 4]}即每个卷积组对应vgg_base [64, 128, 256, 512, 512]的通道数中堆叠的 3×3 卷积层个数。VGG11 的对应配置为[1, 1, 2, 2, 2]层数更少、参数量更小约 507MB 权重文件推理速度也更快。2. 标准卷积块与池化每个卷积组由多个3×3、stride1、padding1的卷积层叠加构成组与组之间插入2×2、stride2的最大池化_pooling_block见 vgg.py实现特征图尺寸减半。3. 分类头在不启用 extra blocks 的纯分类模式下网络末端依次连接两个 4096 维全连接层fc6/fc7与一个输出维度为class_dim1000的fc8层最后接 softmax 输出类别概率见 vgg.py。4. 可迁移的 context 接口模块基类中还提供了context()方法见 module.py支持以trainable、pretrained、get_prediction等参数控制是否加载预训练权重、是否输出预测结果或仅输出body_feats骨干特征。虽然本模块在信息表中标记为不支持 Fine-tuning即开箱即用地直接推理分类结果但从源码结构看context()与with_extra_blocks机制为将 VGG 用作下游任务特征提取骨干预留了能力。三、环境依赖与模块安装1、环境依赖使用vgg11_imagenet模块前需要先安装以下依赖paddlepaddle 1.4.0飞桨深度学习框架paddlehub 1.0.0PaddleHub 预训练模型管理工具安装方法参见 PaddleHub 安装文档。2、安装模块执行以下命令将vgg11_imagenet安装到本地$ hub install vgg11_imagenet安装完成后模块默认存放在${HUB_HOME}/.paddlehub/modules目录下若未设置${HUB_HOME}环境变量则默认存放在用户主目录$HOME下之后即可通过命令行或 Python API 调用。若安装过程中遇到问题可参考以下平台快速上手文档零基础 Windows 安装零基础 Linux 安装零基础 MacOS 安装3、版本指定安装如需安装指定版本可使用指定版本号例如回退到初始发布版本 1.0.0$ hub install vgg11_imagenet1.0.0四、模型 API 预测1、命令行预测通过命令行即可完成单张图片的分类预测$ hub run vgg11_imagenet --input_path /PATH/TO/IMAGE其中--input_path指定待预测图片的路径。PaddleHub 命令行工具为 CV 类任务统一使用--input_path指定输入图片路径NLP 类任务则使用--input_text更多命令行指令说明参见 PaddleHub 命令行指令。从 module.py 的源码可以看到命令行的实际执行流程为add_module_config_arg()注册可配置参数--use_gpu是否使用 GPU默认False与--batch_size预测批大小默认1add_module_input_arg()注册输入参数--input_path单张图片路径与--input_file包含多条图片路径的文本文件按行解析run_cmd()解析参数后调用classification()完成批量预测。因此除单张图片外也支持通过--input_file传入一个文本文件每行一个图片路径实现批量预测。2、预测代码示例Python API在 Python 环境中可通过以下代码完成图片分类预测import paddlehub as hub import cv2 classifier hub.Module(namevgg11_imagenet) test_img_path /PATH/TO/IMAGE input_dict {image: [test_img_path]} result classifier.classification(datainput_dict)上述示例中hub.Module(namevgg11_imagenet)用于加载本地已安装的模块classifier.classification(...)返回每个输入图片的预测结果列表其中每个元素为{类别标签: 概率}形式的字典。说明README 中给出的classification(datainput_dict)为早期版本接口的调用形式。从当前仓库 vgg16_imagenet/module.py 的实现看classification()的完整签名为def classification(self, pathsNone, imagesNone, use_gpuFalse, batch_size1, top_k1):其中paths为图片路径列表images为[N, H, W, C]的 numpy 图像数组use_gpu控制推理设备batch_size控制批大小top_k控制返回概率最高的前 k 个类别源码中会被限制在[1, 1000]区间内。两种形式本质等价均返回list[dict]结构。3、分类接口 API 说明接口定义def classification(data)参数datadict 类型key 为imagestr 类型value 为待检测的图片路径列表list 类型返回resultlist 类型每个元素对应该输入图片的预测结果。预测结果为 dict 类型key 为该图片分类结果的 label类别名value 为该 label 对应的概率。从源码实现看module.py返回结果内部通过对 softmax 输出执行np.argsort(res)[::-1][:top_k]得到概率从高到低的前 k 个类别再通过label_file.txt中加载的 1000 个类别名见 processor.py 的load_label_info映射为可读的类别标签。4、推理设备与预测器配置模块在初始化时会自动检测运行环境并完成预测器配置见 module.py始终构建 CPU 预测器AnalysisConfigcreate_paddle_predictor关闭 GPU 与 glog 日志当检测到环境变量CUDA_VISIBLE_DEVICES且首个字符可被解析为整数时额外构建 GPU 预测器显存池初始大小为 500MB推理阶段依据use_gpu参数选择对应的 CPU/GPU 预测器执行前向计算。五、图片预处理流程在将图片送入网络前模块会按照 ImageNet 标准流程对输入图像进行预处理见 data_feed.py短边缩放先将图片短边缩放到 256 像素resize_short使用 LANCZOS 插值中心裁剪在缩放后的图片中心裁剪出 224 × 224 区域crop_image(centerTrue)通道转换若非 RGB 模式则转换为 RGB归一化像素值除以 255 缩放到[0, 1]再按 ImageNet 统计均值/标准差做标准化均值img_mean [0.485, 0.456, 0.406]标准差img_std [0.229, 0.224, 0.225]预处理后将图像由HWC布局转置为CHW布局transpose((2, 0, 1))与网络输入要求[N, 3, 224, 224]对齐DATA_DIM 224。这一预处理与 module.py 中get_pretrained_images_mean/get_pretrained_images_std返回的数值完全一致也与 ImageNet 主流预训练模型的处理惯例保持一致。六、更新历史1.0.0初始发布vgg11_imagenet模块首次发布提供基于 ImageNet-2012 训练的 VGG11 图像分类预测能力。可通过以下命令安装该版本$ hub install vgg11_imagenet1.0.0七、总结与使用建议vgg11_imagenet作为 PaddleHub 图像分类模块中的一个轻量级 VGG 变体使用门槛低、开箱即用一条hub install命令完成安装一条hub run命令或几行 Python 代码即可对任意图片输出 ImageNet 1000 类的分类结果。在使用时建议注意以下几点输入图片建议接近正方形且分辨率不低于 224 × 224避免中心裁剪丢失过多主体信息默认使用 CPU 推理若机器具备 NVIDIA GPU可通过命令行--use_gpu True或 Python API 的use_gpuTrue参数加速需要批量预测时使用--input_file传入图片路径文本文件或通过 Python API 设置batch_size若希望获得前 k 个候选类别而非单一最优类别可通过 Python API 的top_k参数控制vgg16 同系列实现支持module.py。如需进一步了解 PaddleHub 的整体命令体系、模块管理与 Serving 部署能力可继续阅读 PaddleHub 命令行指令 以及 PaddleHub Serving 一键服务部署同类图像分类模块如vgg16_imagenet、resnet50_vd_imagenet_ssld等可在 modules/image/classification 目录中查阅。【免费下载链接】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),仅供参考