ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

PaddleFormers(PaddleHub)vgg13_imagenet 图像分类模块:安装、预测 API 与 VGG13 实现解析

PaddleFormers(PaddleHub)vgg13_imagenet 图像分类模块:安装、预测 API 与 VGG13 实现解析 PaddleFormersPaddleHubvgg13_imagenet 图像分类模块安装、预测 API 与 VGG13 实现解析【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleFormers导读本文围绕 PaddleFormers 仓库中modules/image/classification/vgg13_imagenet模块文档展开系统讲解基于 VGG13 网络、在 ImageNet-2012 数据集上训练的图像分类 PaddleHub 模块的安装方法、命令行与 Python 双入口预测方式、classificationAPI 的完整参数语义并结合仓库内同系列模块的源码深入剖析输入图像预处理流程、VGG 主干网络结构与 1000 类标签映射原理。读完本文你将能够独立安装并调用vgg13_imagenet完成单张图片的类别预测并能读懂 PaddleHub 图像分类模块的内部实现机制。一、模型基本信息根据模块文档vgg13_imagenet的核心元数据如下项目内容模块名称vgg13_imagenet类别image classification图像分类网络VGG数据集ImageNet-2012是否支持 Fine-tuning否模块大小508MB最新更新日期-数据指标-模型介绍VGG 是由牛津大学视觉组University of Oxford与 DeepMind 于 2014 年提出的一系列图像分类模型该系列模型系统探索了卷积神经网络深度与性能之间的关系通过实验证明了网络越深性能越好的趋势。直至今日VGG 仍被大量图像任务用作特征提取的 Backbone 网络。本模块采用 VGG13 结构基于 ImageNet-2012 数据集训练接受尺寸为 224 × 224 × 3 的输入图片支持直接通过命令行或 Python 接口进行预测。需要说明的是vgg13_imagenet目录在仓库中仅保留 README 元数据英文版与中文版模块的可执行实现与同系列的vgg16_imagenet模块共享同一套 PaddleHub 模块架构。因此本文后续的源码级解析将以仓库中vgg16_imagenet的完整实现module.py、vgg.py、data_feed.py等为参照二者在输入输出规格224×224×3、ImageNet 1000 类与 API 约定上完全一致仅网络深度配置不同。二、环境依赖与安装1、环境依赖安装vgg13_imagenet前需要满足以下两个基础环境要求paddlepaddle 1.4.0PaddlePaddle 深度学习框架为模块预测提供底层算子执行能力。paddlehub 1.0.0PaddleHub 模型管理及预测框架负责模型的下载、安装与统一调用。PaddleHub 的完整安装指引参见仓库文档 PaddleHub 安装指南。2、安装模块在满足上述依赖后通过 PaddleHub 命令行安装模块$ hub install vgg13_imagenet安装过程中如遇到问题可参考仓库提供的各平台快速上手文档Windows 快速上手Linux 快速上手MacOS 快速上手从 PaddleHub 的模块管理机制来看hub install会从模型仓库拉取模块包并注册到本地环境之后便可通过hub run命令行或hub.Module(name...)Python 接口随时调用。三、命令行预测安装完成后最快捷的预测方式是使用 PaddleHub 命令行$ hub run vgg13_imagenet --input_path /PATH/TO/IMAGE其中--input_path指定待预测图片的本地路径。执行后模块会输出该图片的预测类别及其对应的置信度概率。关于命令行调用的完整指令说明包括参数组、输入选项与配置选项的用法可进一步参阅仓库文档 PaddleHub 命令行指令。四、Python 预测代码示例在工程化场景中更推荐通过 Python API 进行预测。官方文档给出的示例代码如下import paddlehub as hub import cv2 classifier hub.Module(namevgg13_imagenet) test_img_path /PATH/TO/IMAGE input_dict {image: [test_img_path]} result classifier.classification(datainput_dict)这段代码的执行链路为hub.Module(namevgg13_imagenet)创建模块实例内部会加载预训练模型与标签文件将图片路径以{image: [path1, path2, ...]}的字典形式传入classification接口返回结果result为 list每个元素对应当前输入图片的分类结果 dict键为类别名label值为该类别对应的概率。关于 API 形态的说明需要提醒的是上例中的datainput_dict是早期版本的调用约定。从仓库内同系列模块vgg16_imagenet的模块实现来看classification接口实际接受的是更丰富的命名参数形态def classification(self, pathsNone, imagesNone, use_gpuFalse, batch_size1, top_k1):其中pathslist 类型每个元素为一张图片的文件路径imagesnumpy.ndarray 类型可直接传入图像数据形状为[N, H, W, C]use_gpubool 类型是否使用 GPU 进行预测默认Falsebatch_sizeint 类型批大小默认1top_kint 类型返回概率最高的前 k 个类别默认1源码中会将取值限制在[1, 1000]区间内top_k max(min(top_k, 1000), 1)。因此在较新版本中更推荐的调用写法是直接传路径列表import paddlehub as hub classifier hub.Module(namevgg13_imagenet) result classifier.classification( paths[/PATH/TO/IMAGE1, /PATH/TO/IMAGE2], use_gpuFalse, batch_size1, top_k3 )两种写法最终都会走到同一套图像预处理与预测管线详见下文第六节。五、classification API 详解模块对外暴露的分类接口定义如下def classification(data)参数datadict 类型key 为imagevalue 为待检测图片路径的 list。返回值resultlist[dict] 类型每个元素为对应输入图片的分类结果dict 的 key 为类别名 labelvalue 为该 label 对应的概率。源码层的执行流程结合vgg16_imagenet的模块实现可以还原classification的内部执行链路惰性初始化预测程序首次调用时通过self.context(trainableFalse, pretrainedTrue, get_predictionTrue)构建推理 Program加载预训练权重并clone(for_testTrue)得到推理图trainableFalse表示冻结网络参数不做梯度更新pretrainedTrue表示加载模块自带的 ImageNet 预训练权重。数据读取与预处理通过test_reader(paths, images)将路径或 ndarray 数据统一转换为预处理后的张量详见第六节。分批推理按batch_size切分输入将批数据包装为PaddleTensor后交给预测器执行。结果后处理对输出概率向量执行np.argsort降序排列取前top_k个索引再通过标签文件映射为类别名最终返回[{label: prob}, ...]结构。命令行参数的对应关系从add_module_config_arg与add_module_input_arg可以看到命令行参数与 API 参数的映射--input_pathstr指定单张图片路径--input_filestr指定一个文本文件文件内每行一条图片路径通过txt_parser.parse解析后批量预测--use_gpubool默认 False是否使用 GPU--batch_sizeint默认 1预测批大小。run_cmd装饰器将命令行参数解析后统一转调self.classification(pathsinput_data, use_gpu..., batch_size...)这正是hub run命令能够工作的底层机制。六、输入图像预处理流程解析图片从磁盘加载到送入网络之前需要经过标准化的预处理。仓库中vgg16_imagenet的数据读取实现完整呈现了这一流程DATA_DIM 224 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))process_image的具体步骤为等比缩放resize_short将图片短边缩放到 256 像素target_size256长边按比例缩放使用Image.LANCZOS高质量插值中心裁剪crop_image从缩放后的图片中心裁剪出 224 × 224 的区域centerTrue与训练阶段随机裁剪形成对应模式归一非 RGB 模式统一转换为 RGB标准化像素值除以 255 归一化到[0, 1]再减去均值[0.485, 0.456, 0.406]、除以标准差[0.229, 0.224, 0.225]最后将 HWC 布局转置为 CHWtranspose((2, 0, 1))。这一组均值/标准差正是 ImageNet 数据集的经典统计量与模块实现中get_pretrained_images_mean/get_pretrained_images_std返回的[0.485, 0.456, 0.406]、[0.229, 0.224, 0.225]一致在推理时对输入做相同预处理是保证预训练权重发挥效力的关键前提。test_reader作为生成器同时兼容paths文件路径与imagesndarray 数据两种输入来源并对不存在的路径执行assert os.path.isfile(...)校验保证下游拿到的一定是有效图片。七、VGG 网络结构与模块源码解析1、VGG 主干结构vgg16_imagenet的网络实现VGG类以论文 Very Deep Convolutional Networks for Large-Scale Image Recognition 为依据核心配置如下depth_cfg {16: [2, 2, 3, 3, 3], 19: [2, 2, 4, 4, 4]} vgg_base [64, 128, 256, 512, 512]depth_cfg定义每个卷积阶段的卷积层数量vgg_base定义各阶段输出通道数。由此可推断VGG13 对应depth13的结构即为 5 个卷积阶段的 8 个卷积层2233313其中前 8 个为卷积层后接全连接层——本系列模块文档对 VGG13 的定义即为VGG 系列中 13 层配置的模型输入 224×224×3经逐阶段 3×3 卷积padding1、stride1、ReLU 激活与 2×2 最大池化逐层下采样最后接入fc6、fc7均为 4096 维与fc81000 维三层全连接经 softmax 输出 1000 类概率分布。2、分类头与输出在get_predictionTrue纯推理模式下网络输出层为out fluid.layers.fc(inputfc2, sizeself.class_dim, ...) out fluid.layers.softmax(out)class_dim1000对应 ImageNet-2012 的类别总数。推理时通过np.argsort(res)[::-1][:top_k]取概率最高的 k 个索引再借助标签文件共 1000 行每行格式为类名, 可能的同义词/别名由processor.py的load_label_info读入映射为可读的类别名称。模块在返回结果时取class_name.split(,)[0]即只保留主类别名。3、CPU/GPU 双预测器_set_config中模块同时构建了 CPU 与 GPU 两套AnalysisConfig预测器默认禁用 GPU 并关闭 IR 优化以适配 CPU 推理若检测到环境变量CUDA_VISIBLE_DEVICES设置了合法 GPU 编号则额外构建显存池 500MB 的 GPU 预测器。classification根据use_gpu参数在两者间切换这也是--use_gpu命令行参数生效的底层机制。八、版本说明Release Note模块当前发布版本为1.0.0初始发布可通过指定版本号重新安装$ hub install vgg13_imagenet1.0.0九、延伸阅读中文版模块文档vgg13_imagenet README中文同系列完整实现模块 API、预处理、网络定义vgg16_imagenet 模块目录图像分类 Demo 实战demo/image_classification 训练与预测示例更多图像分类模块ResNet、MobileNet、EfficientNet 等系列可在 modules/image/classification 目录下按需查阅本文内容均以当前仓库内模块文档与实际源码为准。实际运行时请根据你安装的 paddlepaddle / paddlehub 版本核对 API 形态差异例如datadict与paths两种传参方式并以模块help()输出的签名信息为最终依据。【免费下载链接】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),仅供参考
返回列表