拓冰建站拓冰建站
首页 / 资讯中心 / 正文

PaddleFormers 图像分类模型 rexnet_1_5_imagenet:安装、预测、Fine-tune 与服务化部署全指南

人工智能大模型微调模型推理服务【免费下载链接】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 仓库中的rexnet_1_5_imagenet图像分类模块展开系统讲解该预训练模型的安装方式、命令行与 Python API 预测方法、基于 PaddleHub Trainer 的完整 Fine-tune 流程含数据预处理、数据集加载、优化器配置与 checkpoint 管理以及如何通过 PaddleHub Serving 将分类模型部署为在线 HTTP 服务。读完本文你将掌握从单张图片分类到自定义数据集微调再到服务化上线的完整技术链路并能结合仓库源码理解其底层实现原理。一、模型基本信息1.1 模块速览项目内容模型名称rexnet_1_5_imagenet类别图像-图像分类网络ReXNet数据集ImageNet-2012是否支持 Fine-tuning是模型大小57MB指标-最新更新日期2021-09-141.2 模型介绍ReXNetRevisiting and Improving ConvNets由 NAVER AI Lab 提出是一套基于新的网络设计原则设计的网络。作者针对现有网络中具有代表性的表征瓶颈Representative Bottleneck问题提出了一套系统化的设计原则常规的网络设计会产生表征瓶颈从而影响模型性能。为研究该问题作者对由一万个随机网络生成的特征矩阵秩进行了统计分析并进一步研究了整个网络的通道配置以设计更准确的网络架构。最终提出了一套简单有效的设计原则来缓解表征瓶颈从而在相近计算量下获得更好的分类精度。仓库中以width_mult1.5的配置实现了 ReXNet-V1 变体即1.5的来历权重使用 ImageNet-2012 数据集预训练完整实现位于 module.py。1.3 源码中的网络结构要点从 module.py 的ReXNetV1类实现可以看到该模型的核心设计线性瓶颈模块LinearBottleneck当 expansion 系数t ! 1时先用1x1卷积升维并接 Swish 激活再做3x3深度可分离卷积num_groupdw_channels可选地插入 SE 模块最后用1x1卷积投影回目标通道。当stride 1且输入通道数不大于输出通道数时启用 shortcut 残差连接out[:, 0:self.in_channels] x保证信息流通。SE 注意力模块对特征图做自适应全局平均池化后经两个1x1卷积中间通道压缩为channels // se_ratio与 Sigmoid 生成通道权重再与原特征逐通道相乘。通道渐进式扩增按照final_ch / (self.depth // 3)的步长逐层线性增加通道数避免通道配置上的表征瓶颈。超参数input_ch16、final_ch180、width_mult1.5、depth_mult1.0、class_dim1000、use_seTrue、se_ratio12、dropout_ratio0.2、bn_momentum0.9。标签与分类头若不传label_list模块会读取同目录下的 label_list.txtImageNet-2012 的 1000 个类别分类头为Dropout 1x1 Conv2D输出维度等于类别数。模块通过moduleinfo装饰器注册为 PaddleHub 模块namerexnet_1_5_imagenettypeCV/classificationversion1.0.0并继承ImageClassifierModule基类获得predict、serving_method、run_cmd等标准能力见 cv_module.py。二、安装2.1 环境依赖使用该模块前请确认环境满足以下版本要求paddlepaddle 2.0.0paddlehub 2.0.02.2 安装模块在终端执行以下命令即可安装$ hub install rexnet_1_5_imagenet如您安装时遇到问题可参考零基础Windows安装 | 零基础Linux安装 | 零基础MacOS安装。三、模型 API 预测3.1 命令行预测安装完成后可直接通过hub run命令对单张图片进行分类--top_k控制返回概率最高的前 K 个类别$ hub run rexnet_1_5_imagenet --input_path /PATH/TO/IMAGE --top_k 5从 cv_module.py 的run_cmd实现可以看到该命令实际解析两个参数--input_path必填图片路径与--top_k可选默认值为 1随后调用self.predict(images[args.input_path], top_kargs.top_k)完成推理。3.2 预测代码示例在 Python 脚本中调用同样简洁import paddle import paddlehub as hub if __name__ __main__: model hub.Module(namerexnet_1_5_imagenet) result model.predict([flower.jpg])predict方法的完整签名与行为见 cv_module.py说明如下images(list[np.ndarray])待预测图片列表元素为 BGR 格式的np.ndarraybatch_size(int)预测批大小默认 1top_k(int)每张图片输出前 K 个分类结果默认 1返回值results(list[dict])每张图片的预测结果格式为{类别名: 概率}的字典。推理过程在paddle.no_grad()下进行先经self.transforms预处理再前向得到 logits经F.softmax转为概率最后按概率降序取前top_k个类别并映射为标签名。模块内置的预处理流程module.py为Resize((256, 256)) → CenterCrop(224) → Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225])to_rgbTrue。3.3 如何开始 Fine-tune在完成 PaddlePaddle 与 PaddleHub 安装后通过执行python train.py即可开始使用rexnet_1_5_imagenet对 Flowers 等数据集进行 Fine-tune。参考的完整训练脚本可见 demo/image_classification/train.py。整体分为以下 4 个步骤Step1定义数据预处理方式import paddlehub.vision.transforms as T transforms T.Compose([T.Resize((256, 256)), T.CenterCrop(224), T.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225])], to_rgbTrue)transforms数据增强模块定义了丰富的数据预处理方式用户可按照需求替换自己需要的数据预处理方式。Step2下载数据集并使用from paddlehub.datasets import Flowers flowers Flowers(transforms) flowers_validate Flowers(transforms, modeval)参数说明transforms数据预处理方式mode选择数据模式可选项有train、test、val默认为train。数据集的准备代码可以参考 flowers.pyhub.datasets.Flowers()会自动从网络下载数据集flower_photos.tar.gz5 分类roses、tulips、daisy、sunflowers、dandelion并解压到用户目录下$HOME/.paddlehub/dataset目录。从源码可见train模式读取train_list.txt、test模式读取test_list.txt、val模式读取validate_list.txt每行形如图片相对路径 标签id__getitem__会调用传入的transforms对图片做预处理并返回(图像张量, 标签)。API 文档可参考 flowers.rst。Step3加载预训练模型model hub.Module(namerexnet_1_5_imagenet, label_list[roses, tulips, daisy, sunflowers, dandelion])参数说明name选择预训练模型的名字label_list设置输出分类类别默认为 ImageNet-2012 类别。从 module.py 的实现可以看到传入label_list后class_dim会自动取类别列表长度分类头输出维度随之改变同时模块构造时会自动加载model.pdparams预训练权重若指定load_checkpoint则加载自定义 checkpoint。Step4选择优化策略和运行配置optimizer paddle.optimizer.Adam(learning_rate0.001, parametersmodel.parameters()) trainer Trainer(model, optimizer, checkpoint_dirimg_classification_ckpt) trainer.train(flowers, epochs100, batch_size32, eval_datasetflowers_validate, save_interval1)优化策略Paddle 2.0 提供了SGD、Adam、Adamax等多种优化器其中Adam常用配置为learning_rate全局学习率默认为 1e-3与parameters待优化模型参数。运行配置Trainer主要控制 Fine-tune 的训练实现见 trainer.py包含以下可控制参数参数说明model被优化模型optimizer优化器选择use_vdl是否使用 VisualDL 可视化训练过程checkpoint_dir保存模型参数的地址compare_metrics保存最优模型的衡量指标默认取validation_step返回的主指标越大越好trainer.train主要控制具体的训练过程包含以下可控制参数参数说明train_dataset训练时所用的数据集epochs训练轮数batch_size训练的批大小如果使用 GPU请根据实际情况调整num_workersworkers 的数量默认为 0eval_dataset验证集设置后 Trainer 会按save_interval轮执行一次评估log_interval打印日志的间隔单位为执行批训练的次数save_interval保存模型的间隔频次单位为执行训练的轮数训练过程中的底层行为同样可以在 trainer.py 中印证每轮训练使用DistributedBatchSampler构造可打乱的数据加载器training_step在 cv_module.py 中由validation_step复用计算softmax_with_cross_entropy损失与paddle.metric.accuracy准确率若开启use_vdlloss 与指标会通过LogWriter写入checkpoint_dir/visualization每隔save_interval轮会保存model.pdparams与model.pdopt检查点并在eval_dataset存在时执行评估、记录最优指标。3.4 模型预测Fine-tune 之后当完成 Fine-tune 后Fine-tune 过程在验证集上表现最优的模型会被保存在${CHECKPOINT_DIR}/best_model目录下其中${CHECKPOINT_DIR}目录为 Fine-tune 时所选择的保存 checkpoint 的目录。我们使用该模型来进行预测predict.py 脚本如下import paddle import paddlehub as hub if __name__ __main__: model hub.Module(namerexnet_1_5_imagenet, label_list[roses, tulips, daisy, sunflowers, dandelion], load_checkpoint/PATH/TO/CHECKPOINT) result model.predict([flower.jpg])NOTE:进行预测时所选择的 module、checkpoint_dir、dataset 必须和 Fine-tune 所用的一样。四、服务部署PaddleHub Serving 可以部署一个在线分类任务服务。第一步启动 PaddleHub Serving运行启动命令$ hub serving start -m rexnet_1_5_imagenet这样就完成了一个分类任务服务化 API 的部署默认端口号为 8866。NOTE:如使用 GPU 预测则需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量否则不用设置。第二步发送预测请求配置好服务端以下数行代码即可实现发送预测请求、获取预测结果import requests import json import cv2 import base64 import numpy as np def cv2_to_base64(image): data cv2.imencode(.jpg, image)[1] return base64.b64encode(data.tostring()).decode(utf8) def base64_to_cv2(b64str): data base64.b64decode(b64str.encode(utf8)) data np.fromstring(data, np.uint8) data cv2.imdecode(data, cv2.IMREAD_COLOR) return data # 发送HTTP请求 org_im cv2.imread(/PATH/TO/IMAGE) data {images:[cv2_to_base64(org_im)], top_k:2} headers {Content-type: application/json} url http://127.0.0.1:8866/predict/rexnet_1_5_imagenet r requests.post(urlurl, headersheaders, datajson.dumps(data)) data r.json()[results][data]请求体中images为 base64 编码的图片列表top_k指定返回的类别个数服务端收到请求后会调用模块的serving_method见 cv_module.py将 base64 解码为 BGR 图像后走与本地predict完全一致的前向推理流程返回格式为{data: [{类别名: 概率, ...}, ...]}的 JSON 结果。五、更新历史1.0.0初始发布。六、进一步阅读网络结构源码modules/image/classification/rexnet_1_5_imagenet/module.pyImageNet-2012 标签文件modules/image/classification/rexnet_1_5_imagenet/label_list.txt分类模块基类predict / serving / run_cmdpaddlehub/module/cv_module.pyFine-tune 训练器实现paddlehub/finetune/trainer.pyFlowers 数据集实现paddlehub/datasets/flowers.py 与 API 文档可运行的训练脚本示例demo/image_classification/train.py图像分类 Fine-tune 通用教程docs/docs_ch/finetune/image_classification.md赞分享人工智能大模型微调模型推理服务【免费下载链接】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 图像分类实战resnet50_vd_imagenet_ssld 模型安装、Fine-tune 与服务化部署全指南PaddleHub 图像分类实战resnet50_vd_imagenet_ssld 模型安装、Fine tune 与服务化部署全指南 导读 本文以 Paddl人工智能大模型微调模型推理服务PaddleFormers 中 ALBERT-Chinese-Small 预训练模型实战指南安装、Fine-tune 预测与服务化部署PaddleFormers 中 ALBERT Chinese Small 预训练模型实战指南安装、Fine tune 预测与服务化部署 本指南围绕仓库 mod人工智能大模型微调模型推理服务PaddleFormers 中 fcn_hrnetw48_cityscapes 图像分割模型实战预测、Fine-tune 与 Serving 部署全指南PaddleFormers 中 fcn_hrnetw48_cityscapes 图像分割模型实战预测、Fine tune 与 Serving 部署全指南 本指人工智能大模型微调模型推理服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门