
人工智能大模型微调模型推理服务【免费下载链接】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_3_0_imagenet 模块 为核心完整讲解基于 PaddleHub 的 ReXNet 图像分类模型的安装、命令行与 Python API 预测、Flowers 数据集 Fine-tune 以及 Serving 在线服务部署全流程。读完本文你将掌握如何在本地通过hub install/hub run快速体验 1000 类 ImageNet 分类使用Trainer完成自定义花卉分类任务的迁移学习并将训练好的模型一键封装为 HTTP 分类服务。一、模型基本信息1.1 模块速览项目内容模型名称rexnet_3_0_imagenet类别图像-图像分类网络ReXNet数据集ImageNet-2012是否支持 Fine-tuning是模型大小200MB指标-最新更新日期2021-09-14该模块由 module.py 实现通过moduleinfo声明了namerexnet_3_0_imagenet、typeCV/classification、version1.0.0等元信息并以ImageClassifierModule作为元基类因此天然继承了 PaddleHub 图像分类模块的predict、命令行hub run与 Serving 能力详见 cv_module.py。1.2 ReXNet 网络原理ReXNet 由 NAVER AI Lab 提出是一套基于新网络设计原则设计的网络。作者认为常规网络设计会产生表征瓶颈Representational Bottleneck从而影响模型性能。为研究表征瓶颈作者研究了由一万个随机网络生成的特征矩阵的秩Rank并研究了整个层的通道配置以设计更准确的网络架构最终提出了一套简单有效的设计原则来缓解表征瓶颈。从本仓库的 module.py 源码结构看模型实现与论文设计原则一一对应通道渐进式扩展input_ch16、final_ch180、width_mult3.0在构造特征层时每个 block 的通道数按inplanes final_ch / (self.depth // 3 * 1.0)线性递增确保每一层都成为扩展层expand layer避免出现表征瓶颈Linear Bottleneck 堆叠核心算子LinearBottleneckmodule.py 中定义由 1x1 扩展卷积 3x3 深度可分离卷积groupsdw_channels 可选 SE 模块 1x1 投影构成采用 Swish / ReLU6 激活SE 注意力use_seTrue、se_ratio12SE类通过全局平均池化与 1x1 卷积生成通道注意力并加权深度与宽度配置depth_mult1.0各阶段 block 数为[1, 2, 2, 3, 3, 5]步长为[1, 2, 2, 2, 1, 2]SE 使用位置为[False, False, True, True, True, True]分类头nn.Dropout(dropout_ratio)默认 0.2后接 1x1 卷积映射到class_dim默认 1000个类别。1.3 类别标签模块目录下的 label_list.txt 共包含 1000 行即 ImageNet-2012 的 1000 个类别从tench、goldfish到ear、toilet tissue。ReXNetV1.__init__中若未显式传入label_list则会自动读取该文件并据此设置class_dim len(self.labels)。二、安装与环境依赖2.1 环境依赖使用本模型需要满足paddlepaddle 2.0.0paddlehub 2.0.02.2 安装模块在终端执行$ hub install rexnet_3_0_imagenet安装时会自动下载模型权重。若安装遇到问题可参考仓库中的零基础安装文档零基础 Windows 安装零基础 Linux 安装零基础 MacOS 安装三、模型 API 预测3.1 命令行预测安装完成后直接通过hub run对单张图片进行 Top-K 分类预测$ hub run rexnet_3_0_imagenet --input_path /PATH/TO/IMAGE --top_k 5该命令最终由ImageClassifierModule.run_cmdcv_module.py 中定义解析执行--input_path指定图片路径必填--top_k指定返回概率最高的类别个数默认为 1解析后调用self.predict(images[args.input_path], top_kargs.top_k)。3.2 Python API 预测在代码中加载模型并预测import paddle import paddlehub as hub if __name__ __main__: model hub.Module(namerexnet_3_0_imagenet) result model.predict([flower.jpg])model.predict的签名与行为定义于 cv_module.py 的ImageClassifierModule.predict为images(list[np.ndarray])待预测图片元素为 BGR 格式的np.ndarraybatch_size(int)预测批大小默认 1top_k(int)每张图返回概率最高的 k 个类别默认 1。其内部流程为对每张图执行模块内置的预处理self.transformsResize 到 256x256、CenterCrop 224、按 ImageNet 均值方差 Normalize前向得到 logits 后经F.softmax转为概率再np.argsort取 Top-K最后以{类别名: 概率}字典列表形式返回。模块内置预处理与 Fine-tune 时使用的预处理完全一致定义于 module.py 的ReXNetV1.transformstransforms 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)3.3 如何开始 Fine-tune在完成 PaddlePaddle 与 PaddleHub 安装后执行python train.py即可使用 rexnet_3_0_imagenet 对 Flowers 等数据集进行 Fine-tune。完整可运行的示例可参考 demo/image_classification/train.py该示例基于resnet50_vd_imagenet_ssld将其中的name替换为rexnet_3_0_imagenet即可。下面按步骤展开。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.pyFlowers类通过download_data(urlhttps://bj.bcebos.com/paddlehub-dataset/flower_photos.tar.gz)装饰器标注hub.datasets.Flowers()会自动从网络下载数据集并解压到用户目录下$HOME/.paddlehub/dataset目录数据集共 5 类num_classes 5train模式读取train_list.txt、test模式读取test_list.txt、其余val读取validate_list.txt。Step3加载预训练模型model hub.Module(namerexnet_3_0_imagenet, label_list[roses, tulips, daisy, sunflowers, dandelion])参数说明name选择预训练模型的名字label_list设置输出分类类别默认为 Imagenet2012 类别即读取模块目录下的 label_list.txt。传入label_list后module.py 中class_dim len(self.labels)分类头输出维度随之变为 5从而与 Flowers 数据集对齐。此外ReXNetV1构造器还暴露了input_ch、final_ch、width_mult、depth_mult、use_se、se_ratio、dropout_ratio、bn_momentum等网络结构参数默认值分别为 16、180、3.0、1.0、True、12、0.2、0.9若传入load_checkpoint会加载该路径下的model.pdparams自定义权重否则加载模块自带的 ImageNet 预训练权重。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)Trainer实现在 trainer.py主要控制 Fine-tune 的训练包含以下可控制的参数model被优化模型optimizer优化器选择use_gpu是否使用 GPU 训练默认 False为 True 时执行paddle.set_device(gpu)use_vdl是否使用 VisualDL 可视化训练过程默认 True日志写入checkpoint_dir/visualizationcheckpoint_dir保存模型参数的地址默认ckpt_{time.time()}compare_metrics保存最优模型的衡量指标默认为以validation_step返回的第一个指标比较越大越好。trainer.train主要控制具体的训练过程包含以下可控制的参数train_dataset训练时所用的数据集epochs训练轮数batch_size训练的批大小如果使用 GPU请根据实际情况调整 batch_sizenum_workers数据加载子进程数量默认为 0eval_dataset验证集设置后会在每个save_interval轮执行一次评估log_interval打印日志的间隔单位为执行批训练的次数默认 10save_interval保存模型的间隔频次单位为执行训练的轮数默认 10collate_fn自定义组 batch 函数默认 None。训练过程中Trainer会在每个save_interval轮将模型参数与优化器状态分别保存为model.pdparams、model.pdopt当验证集指标优于历史最优时将最优模型额外保存到${CHECKPOINT_DIR}/best_model目录并写入metrics.pkl。从源码看Trainer还支持断点续训启动时自动扫描checkpoint_dir下形如epoch_{N}的目录并恢复模型与优化器状态。模型预测当完成 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_3_0_imagenet, label_list[roses, tulips, daisy, sunflowers, dandelion], load_checkpoint/PATH/TO/CHECKPOINT) result model.predict([flower.jpg])完整示例可参考 demo/image_classification/predict.py。NOTE进行预测时所选择的 module、checkpoint_dir、dataset 必须和 Fine-tune 所用的一样否则标签对齐与权重形状可能不一致。四、服务部署PaddleHub ServingPaddleHub Serving 可以部署一个在线分类任务服务将上一步训练好的模型封装为可并发访问的 HTTP API。第一步启动 PaddleHub Serving运行启动命令$ hub serving start -m rexnet_3_0_imagenet这样就完成了一个分类任务服务化 API 的部署默认端口号为 8866。NOTE如使用 GPU 预测则需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量否则不用设置。Serving 场景下服务端调用的是ImageClassifierModule.serving_methodcv_module.py 中定义接收 base64 编码的图片列表与top_k参数解码后经predict得到结果并转换为 float 返回。第二步发送预测请求配置好服务端以下代码即可实现发送预测请求、获取预测结果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_3_0_imagenet r requests.post(urlurl, headersheaders, datajson.dumps(data)) data r.json()[results][data]其中请求体images为 base64 图片列表top_k控制返回的类别数量服务地址为http://127.0.0.1:8866/predict/rexnet_3_0_imagenet返回结构为{results: {data: [...]}}。五、更新历史1.0.0初始发布2021-09-14。赞分享人工智能大模型微调模型推理服务【免费下载链接】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 HRNet40 图像分类模型实战从命令行预测到 Fine-tune 与 Serving 部署PaddleHub HRNet40 图像分类模型实战从命令行预测到 Fine tune 与 Serving 部署 本文以 PaddleHub 开源仓库中的 h人工智能大模型微调模型推理服务PaddleHub 图像分类实战基于 rexnet_1_0_imagenet 模块的预测、Fine-tune 与 Serving 部署PaddleHub 图像分类实战基于 rexnet_1_0_imagenet 模块的预测、Fine tune 与 Serving 部署 导读 rexnet_1人工智能大模型微调模型推理服务DLSS Swapper3分钟掌握游戏DLSS版本管理的终极技巧 DLSS Swapper3分钟掌握游戏DLSS版本管理的终极技巧 还在为游戏画质模糊而烦恼吗想体验最新DLSS版本带来的视觉提升却苦于复杂的文件替换人工智能大模型微调模型推理服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考