人工智能大模型微调模型推理服务【免费下载链接】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 仓库中的 ginet_resnet50vd_ade20k 模块系统讲解基于 PaddleHub 的图像语义分割模型从环境安装、API 预测到基于 OpticDiscSeg 数据集完成 Fine-tune再到以 PaddleHub Serving 部署在线分割服务的完整链路。读完本文你将掌握hub install的模块安装方式、hub.Module的预测与微调调用约定、PaddleHub Trainer 的训练流程以及基于 HTTP 的图像分割服务化部署方案并能结合仓库源码理解 GINet 图交互网络的核心结构。一、模型基本信息ginet_resnet50vd_ade20k 是仓库中位于 modules/image/semantic_segmentation/ginet_resnet50vd_ade20k 目录下的图像分割模块其官方信息如下Module Nameginet_resnet50vd_ade20kCategoryImage SegmentationNetworkginet_resnet50vdDatasetADE20KFine-tuning supported or notYesModule Size214MBData indicators-Latest update date2021-12-14该模块的模型实现基于 GINetGraph Interaction Network for Scene Parsing见论文 GINet: Graph interaction network for scene parsing 中定义默认num_classes150对应 ADE20K 的 150 个语义类别通过moduleinfo装饰器注册为 PaddleHub 模块类型为CV/semantic_segmentation版本 1.0.0。1. 网络结构速览从源码结构可以梳理出该模型的三层组成骨干网络 ResNet50_vd实现在 resnet.py包含 4 个 stage[3, 4, 6, 3]个残差块输出多尺度特征图通道数依次为 256/512/1024/2048并支持 multi-grid 空洞卷积。JPUJoint Pyramid Upsampling当jpuTrue默认时使用paddleseg.models.layers.JPU([512, 1024, 2048], width512)融合骨干网络的多层特征。GIHead图交互头实现在 module.py内部包含GlobalReasonUnit全局推理单元与GraphLayer。其中GlobalReasonUnit依据图式全局推理网络Graph-Based Global Reasoning Networks实现视觉节点图与类别节点图之间的双向信息传递GraphTransfer完成视觉图与类别图的注意力迁移最终通过 1×1 卷积输出逐像素分类 logits并以双线性插值恢复到输入分辨率。此外当enable_auxiliary_lossTrue默认时模型在骨干网络第 3 层输出c3上附加一个AuxLayer辅助分割头用于辅助监督训练。模型的forward返回[主输出, 辅助输出]的 logits 列表这一结构与 PaddleHub 分割模块基类的训练逻辑见下文相互呼应。二、安装与环境依赖1. 环境依赖使用该模块前需要满足以下版本要求paddlepaddle 2.0.0paddlehub 2.0.0此外模块目录下的 requirements.txt 声明了运行时的额外依赖paddleseg 2.3.0JPU、AuxLayer 等组件来自 PaddleSeg 的paddleseg.models.layers安装模块时需一并保证。2. 安装模块在满足依赖后执行以下命令安装该模块$ hub install ginet_resnet50vd_ade20k如安装过程中遇到问题可参考仓库中的平台快速入门文档Windows 快速入门Linux 快速入门Mac 快速入门安装完成后模块即可通过hub.Module(nameginet_resnet50vd_ade20k)在任意 Python 脚本中加载。三、模块 API 预测1. 预测代码示例加载预训练模型并对单张图片进行分割预测的完整代码如下import cv2 import paddle import paddlehub as hub if __name__ __main__: model hub.Module(nameginet_resnet50vd_ade20k) img cv2.imread(/PATH/TO/IMAGE) result model.predict(images[img], visualizationTrue)这里model.predict继承自 PaddleHub 分割模块基类ImageSegmentationModule实现在 paddlehub/module/cv_module.py其核心流程是对输入图片执行模块内置的Compose([Normalize()])预处理见 module.py模型前向得到 logits 后取第一个输出并argmax得到整数类别索引的预测 mask通过reverse_transform将预测 mask 还原到原始图像尺寸返回uint8数组result中每个元素即对应一张输入图片的分割 masknp.ndarray当visualizationTrue时将分割结果叠加在原图上透明度权重 0.6保存到save_path/image/并将伪彩色类别图保存到save_path/mask/。predict 关键参数参数含义默认值images图片路径str或 BGR 格式、形状为 [H, W, C] 的 ndarray可传入列表必填batch_size预测时的批大小1visualization是否将识别结果保存为图片文件Truesave_path结果保存路径seg_result四、如何开始 Fine-tune在完成 PaddlePaddle 与 PaddleHub 安装后即可使用 ginet_resnet50vd_ade20k 模型对分割数据集如 OpticDiscSeg 视盘分割数据集进行微调。整体流程分为四步定义数据预处理 → 下载并使用数据集 → 加载预训练模型 → 选择优化策略并启动训练。Step 1: 定义数据预处理方式from paddlehub.vision.segmentation_transforms import Compose, Resize, Normalize transform Compose([Resize(target_size(512, 512)), Normalize()])paddlehub.vision.segmentation_transforms是 PaddleHub 针对图像分割任务提供的数据增强模块内置了Compose、Resize、Normalize等丰富的预处理算子用户可以根据自己的任务需求自由组合替换。Step 2: 下载数据集并使用from paddlehub.datasets import OpticDiscSeg train_reader OpticDiscSeg(transform, modetrain)参数说明transforms数据预处理方式mode选择数据模式可选项为train、test、val默认为train。数据集的准备代码可以参考 paddlehub/datasets/opticdiscseg.py。OpticDiscSeg继承自 PaddleHub 的SegDataset基类并通过download_data(urlhttps://paddleseg.bj.bcebos.com/dataset/optic_disc_seg.zip)装饰器实现自动下载——首次实例化时会从网络下载数据集并解压到用户目录下的$HOME/.paddlehub/dataset/optic_disc_seg目录再根据mode读取对应的train_list.txt/val_list.txt/test_list.txt文件列表。该数据集提取自 iChallenge-AMD 数据集共 2 个类别视盘/背景因此num_classes2ignore_index255。Step 3: 加载预训练模型import paddlehub as hub model hub.Module(nameginet_resnet50vd_ade20k, num_classes2, pretrainedNone)参数说明name预训练模型名称即ginet_resnet50vd_ade20knum_classes目标类别数微调 OpticDiscSeg 时需设置为 2覆盖 ADE20K 的默认 150 类pretrained是否加载自己训练的模型权重若为None则加载模块自带参数。从 module.py 的源码可以看到当pretrained非空时通过paddle.load(pretrained)加载自定义参数否则从模块目录下的model.pdparams加载预训练参数。注意文档中该参数名在个别版本中写作load_checkpoint语义相同——None时使用提供的默认预训练参数。Step 4: 选择优化策略并启动训练import paddle from paddlehub.finetune.trainer import Trainer scheduler paddle.optimizer.lr.PolynomialDecay(learning_rate0.01, decay_steps1000, power0.9, end_lr0.0001) optimizer paddle.optimizer.Adam(learning_ratescheduler, parametersmodel.parameters()) trainer Trainer(model, optimizer, checkpoint_dirtest_ckpt_img_seg, use_gpuTrue) trainer.train(train_reader, epochs10, batch_size4, log_interval10, save_interval4)训练配置说明学习率策略使用多项式衰减PolynomialDecay初始学习率 0.01、衰减步数 1000、衰减幂次 0.9、终止学习率 0.0001优化器Adam挂载上述学习率调度器Trainercheckpoint_dir指定 checkpoint 保存目录示例为test_ckpt_img_seguse_gpuTrue表示使用 GPU 训练。从 paddlehub/finetune/trainer.py 可以看到Trainer 会调用paddle.set_device(gpu/cpu)设置运行设备在指定目录创建 checkpoint 与 VisualDL 日志目录支持断点续训自动扫描epoch_*文件恢复状态多卡环境下会自动包装paddle.DataParalleltrain 参数epochs10训练轮数、batch_size4批大小、log_interval10日志打印间隔、save_interval4每 4 个 epoch 保存一次 checkpoint。训练时的损失计算与分割模块基类的training_step保持一致见 paddlehub/module/cv_module.py对模型输出的每个 logits主输出 辅助输出分别与标签计算交叉熵损失并取平均从而让辅助分割头参与监督。模型预测微调后Fine-tune 过程中在验证集上表现最优的模型会被自动保存到${CHECKPOINT_DIR}/best_model目录${CHECKPOINT_DIR}即训练时checkpoint_dir指定的目录。使用该最优模型进行预测的predict.py脚本如下import paddle import cv2 import paddlehub as hub if __name__ __main__: model hub.Module(nameginet_resnet50vd_ade20k, pretrained/PATH/TO/CHECKPOINT) img cv2.imread(/PATH/TO/IMAGE) model.predict(images[img], visualizationTrue)predict 参数说明images原始图像路径或 BGR 格式图片visualization是否保存可视化结果默认为 Truesave_path结果保存路径默认为seg_result。NOTE进行预测时所选择的 module、checkpoint_dir 与 dataset 必须和 Fine-tune 时使用的一致否则类别数不匹配会导致预测失败或结果错误。五、服务部署PaddleHub ServingPaddleHub Serving 可以将上述图像分割能力部署为在线服务对外提供 HTTP API。第一步启动 PaddleHub Serving运行启动命令$ hub serving start -m ginet_resnet50vd_ade20k执行后即完成一个图像分割服务化 API 的部署默认端口号为 8866。NOTE如果使用 GPU 进行预测需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量如export CUDA_VISIBLE_DEVICES0仅使用 CPU 时无需设置。第二步发送预测请求服务端配置好后以下代码即可实现发送预测请求并获取预测结果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 org_im cv2.imread(/PATH/TO/IMAGE) data {images:[cv2_to_base64(org_im)]} headers {Content-type: application/json} url http://127.0.0.1:8866/predict/ginet_resnet50vd_ade20k r requests.post(urlurl, headersheaders, datajson.dumps(data)) mask base64_to_cv2(r.json()[results][0])请求与响应的数据交互方式如下客户端将图片编码为 Base64 字符串放入 JSON 的images字段发送到http://127.0.0.1:8866/predict/ginet_resnet50vd_ade20k服务端通过ImageSegmentationModule的serving_method见 paddlehub/module/cv_module.py将 Base64 解码回图片、调用predict得到分割 mask再编码为 Base64 返回客户端从响应的results字段取出 mask 的 Base64 字符串并解码回np.ndarray即得到与输入图像同尺寸的分割结果。六、更新历史1.0.0初始发布。七、延伸阅读想更深入理解 GINet 的图交互机制可阅读 module.py 中的GIHead、GlobalReasonUnit、GraphLayer、GCN与GraphTransfer实现骨干网络细节参见 resnet.py底层卷积/残差模块参见 layers.py分割数据集基类与示例数据集见 paddlehub/datasets/base_seg_dataset.py 与 paddlehub/datasets/opticdiscseg.py训练器与分割模块基类的完整 API 可参考 paddlehub/finetune/trainer.py 与 paddlehub/module/cv_module.py仓库中还提供了其它基于 PaddleHub 的图像分割模块可按需在 modules/image/semantic_segmentation 目录中浏览。赞分享人工智能大模型微调模型推理服务【免费下载链接】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 目标检测实践基于 PaddleHub 的 YOLOv3-ResNet50-vd-COCO2017 模块安装、预测与 Serving 部署全指南PaddleFormers 目标检测实践基于 PaddleHub 的 YOLOv3 ResNet50 vd COCO2017 模块安装、预测与 Serving人工智能大模型微调模型推理服务基于 PaddleHub 的 GINet 语义分割实战ginet_resnet101vd_cityscapes 模块的预测、Fine-tune 与 Serving 部署指南基于 PaddleHub 的 GINet 语义分割实战ginet_resnet101vd_cityscapes 模块的预测、Fine tune 与 Servi人工智能大模型微调模型推理服务基于 PaddleHub 的 AnimeGAN V2 图像风格迁移实战animegan_v2_paprika_97 模型安装、API 调用与 Serving 部署基于 PaddleHub 的 AnimeGAN V2 图像风格迁移实战animegan_v2_paprika_97 模型安装、API 调用与 Serving人工智能大模型微调模型推理服务上一篇UE4SS终极配置指南打造你的虚幻引擎游戏Mod开发环境下一篇APK安装器Windows系统原生运行安卓应用的革命性解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考