尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于 PaddleHub 的 ISANet 图像分割实战:isanet_resnet50_voc 模型微调与部署全指南

基于 PaddleHub 的 ISANet 图像分割实战:isanet_resnet50_voc 模型微调与部署全指南 人工智能大模型微调模型推理服务【免费下载链接】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/semantic_segmentation/isanet_resnet50_voc模块为主线完整讲解 ISANetInterlaced Sparse Self-Attention语义分割模型在 PaddleHub 生态下的安装、API 预测、Fine-tune 微调与 Serving 服务化部署全流程并结合仓库源码剖析其网络结构与底层实现。读完本文你将能够独立使用isanet_resnet50_voc完成一次从数据集准备、训练配置到线上推理的完整分割任务。一、模块概览isanet_resnet50_voc是 PaddleHub 提供的一个图像语义分割预训练模型模块其基础信息如下属性值模块名称isanet_resnet50_voc类别图像分割Image Segmentation网络isanet_resnet50vd数据集PascalVOC2012是否支持 Fine-tuning是模型大小217MB最新更新日期2022-03-22该模块对应论文为 Lang Huang 等人的Interlaced Sparse Self-Attention for Semantic SegmentationarXiv:1907.12273。ISANet 的核心思想是将密集的全局自注意力拆解为长距离稀疏全局注意力 短距离稀疏局部注意力两个阶段在保持全局上下文建模能力的同时显著降低计算复杂度非常适合高分辨率语义分割场景。在 PaddleFormers 仓库中该模块的完整实现位于 modules/image/semantic_segmentation/isanet_resnet50_voc包含module.py网络主体、resnet.pyResNet50_vd 骨干、layers.py通用卷积/注意力层三个源码文件。二、环境依赖与模块安装1、环境依赖使用该模块前需要确保已安装以下 Python 依赖paddlepaddle 2.0.0paddlehub 2.0.0其中 PaddleHub 为模型加载、训练与部署的统一框架PaddlePaddle 提供底层计算能力。2、安装模块执行以下命令安装模型模块$ hub install isanet_resnet50_voc安装过程中如遇到环境问题可参考仓库中的官方安装指引Windows 快速开始、Linux 快速开始、Mac 快速开始。三、模块源码结构解析在动手使用之前先了解模块的源码组织有助于理解其工作原理。该模块目录下包含 4 个文件文件职责module.pyISANet 网络主体、ISAHead 分割头、SelfAttentionBlock 自注意力块resnet.pyResNet50_vd 骨干网络含空洞卷积配置layers.pyConvBNReLU、SyncBatchNorm、AttentionBlock 等通用组件README.md / README_en.md中英文使用文档1、ISANet 网络主体module.pymodule.py中通过moduleinfo装饰器注册模块元信息名称、类型CV/semantic_segmentation、版本1.0.0并定义ISANet(paddle.nn.Layer)类。其核心构造参数如下num_classes目标类别数默认21对应 PascalVOC2012 的 21 类含背景backbone_indices骨干网络输出的特征索引默认(2, 3)即取 C3、C4 两阶段特征isa_channelsISA 模块的通道数默认256down_factor将高、宽维度划分成的分组数(Ph, PW)默认(8, 8)enable_auxiliary_loss是否启用辅助损失默认Truealign_cornersF.interpolate的对齐参数默认Falsepretrained预训练权重路径或 URL默认None。从源码可见加载模型时若pretrained为None则会自动加载模块目录下内置的model.pdparams权重文件并打印load pretrained parameters success若传入自定义路径则打印load custom parameters success。2、ISAHead 分割头与交错稀疏注意力ISAHead是整个模块的精华所在其forward过程完整实现了论文中的交错稀疏自注意力输入 C3、C4 两阶段特征通过ConvBNReLU将 C4 降到中间通道数in_channels // 4按down_factor(8, 8)将特征图划分成Q_h × Q_w组先执行global_relation长距离全局注意力再执行local_relation短距离局部注意力拼接全局与局部注意力输出经out_conv融合后由cls分类头输出分割 logits若enable_auxiliary_lossTrue还会从 C3 特征经aux分支输出辅助 logits用于训练时辅助监督。其中SelfAttentionBlock继承自layers.py中的通用AttentionBlock其注意力计算流程为query/key/value 分别经 1×1 卷积投影 →paddle.matmul(query, key)计算相似度矩阵 → 按channels**-0.5缩放 → softmax 归一化 → 与 value 相乘得到上下文特征。3、ResNet50_vd 骨干resnet.py骨干网络ResNet50_vd基于Bag of Tricks for Image Classification with Convolutional Neural Networks中的 ResNet_vd 结构关键配置为layers50四个阶段深度为[3, 4, 6, 3]output_stride8即输出特征相对于输入图像的步长为 8对应空洞卷积字典{2: 2, 3: 4}stage2 膨胀率 2、stage3 膨胀率 4从而在不下采样的前提下扩大感受野multi_grid(1, 1, 1)作用于 stage4网络前向会依次返回每个阶段的特征列表供 ISAHead 按backbone_indices选取。4、注意力通用组件layers.pylayers.py还提供了若干可复用的基础层理解它们有助于自行扩展SyncBatchNormGPU 环境使用nn.SyncBatchNormCPU 环境自动降级为nn.BatchNorm2D见该文件开头的注释说明ConvBNReLU/ConvBN标准卷积 批归一化 ReLU组合AttentionBlock通用自注意力/非局部块支持 key/query 是否共享投影、是否下采样、是否带输出投影等开关SelfAttentionBlock即基于它实例化ASPPModule、AuxLayer、SeparableConvBNReLU空洞空间金字塔池化、辅助损失层与深度可分离卷积等分割任务常用组件。四、模型 API 预测安装完成后可以直接使用 PaddleHub 加载模型并对单张图片进行分割预测。1、预测代码示例import cv2 import paddle import paddlehub as hub if __name__ __main__: model hub.Module(nameisanet_resnet50_voc) img cv2.imread(/PATH/TO/IMAGE) result model.predict(images[img], visualizationTrue)代码说明hub.Module(nameisanet_resnet50_voc)会从本地若已安装加载该模块输入图片使用 OpenCV 读取格式为 BGR 的[H, W, C]ndarraypredict方法返回分割掩膜mask列表。2、predict 接口参数详解结合 paddlehub/module/cv_module.py 中ImageSegmentationModule.predict的实现其核心参数如下参数类型说明imageslist[str | np.ndarray]图片路径或 BGR 格式 ndarray 组成的列表batch_sizeint预测时的批大小默认1visualizationbool是否保存可视化结果默认Truesave_pathstr结果保存路径默认seg_result从源码可以看到预测时会依次执行图片经transform预处理Normalize→ 前向推理得到 logits →argmax取每个像素的类别索引 → 将预测结果reverse_transform回原图尺寸。当visualizationTrue时会在save_path下分别生成image/目录原图与分割结果叠加的彩色图融合权重 0.6和mask/目录伪彩色分割掩膜图。五、如何开始 Fine-tune该模块官方支持微调文档以OpticDiscSeg视盘分割数据集为例演示完整流程。OpticDiscSeg 提取自 iChallenge-AMD 眼底图像数据集是二分类分割任务num_classes2。Step 1定义数据预处理方式from paddlehub.vision.segmentation_transforms import Compose, Resize, Normalize transform Compose([Resize(target_size(512, 512)), Normalize()])segmentation_transforms是 PaddleHub 针对图像分割任务提供的数据增强/预处理模块实现在 paddlehub/vision/segmentation_transforms.py用户可按照需求替换或组合自己需要的预处理方式。几个常用算子Resize将图片与标注缩放到目标尺寸target_size默认(512, 512)支持NEAREST、LINEAR、CUBIC、AREA、LANCZOS4、RANDOM六种插值模式标注图固定使用最近邻插值Normalize按均值/标准差归一化默认mean(0.5, 0.5, 0.5)、std(0.5, 0.5, 0.5)Padding对图片和标注做右下角补零填充im_padding_value默认(128, 128, 128)、label_padding_value默认255Compose按列表顺序依次执行各算子默认to_rgbTrue将 BGR 转 RGB最终输出为[C, H, W]格式。Step 2下载数据集并使用from paddlehub.datasets import OpticDiscSeg train_reader OpticDiscSeg(transform, modetrain)参数说明transforms数据预处理方式mode数据模式可选项为train、test、val默认为train。数据集准备代码可参考 paddlehub/datasets/opticdiscseg.py。hub.datasets.OpticDiscSeg()会自动从网络下载数据集并解压到用户目录下$HOME/.paddlehub/dataset目录。从源码可见该数据集类通过download_data装饰器自动下载并定义了num_classes2、ignore_index255train/val/test三种模式分别读取train_list.txt、val_list.txt、test_list.txt其中 test 模式不要求标注文件。如果你要使用自己的分割数据可参照 paddlehub/datasets/base_seg_dataset.py 中的SegDataset基类它支持通过dataset_root、train_path、val_path、test_path传入自定义数据集路径列表文件每行格式为图片路径 标注路径空格分隔。Step 3加载预训练模型import paddlehub as hub model hub.Module(nameisanet_resnet50_voc, num_classes2, pretrainedNone)参数说明name预训练模型名称num_classes微调任务类别数视盘分割为 2 类因此需从默认的 21 改为 2pretrained/load_checkpoint是否加载自己训练的模型权重若为None则加载模块自带的 PascalVOC2012 预训练参数对应module.py中加载model.pdparams的分支。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 优化器绑定上述调度器与模型参数Trainer传入模型、优化器checkpoint_dir为 checkpoint 保存目录use_gpuTrue表示使用 GPU 训练train 参数epochs10训练轮数、batch_size4、log_interval10每 10 步打印一次日志、save_interval4每 4 个 epoch 保存一次 checkpoint。Trainer实现在 paddlehub/finetune/trainer.py其行为值得关注训练过程中会自动创建checkpoint_dir目录并在其中写入 VisualDL 可视化日志visualization子目录与epoch_N/格式的周期 checkpoint含model.pdparams和model.pdopt如果传入eval_datasetTrainer 会在每个save_interval周期执行评估并按compare_metrics默认取第一个主指标、越大越好比较将验证集上表现最优的模型保存到${CHECKPOINT_DIR}/best_model目录Trainer 支持断点续训启动时会扫描checkpoint_dir下所有epoch_*目录自动恢复最近的模型与优化器状态并打印当前指标支持多卡分布式训练paddle.distributed多卡场景会自动将模型包装为DataParallel。模型预测微调后Fine-tune 完成后验证集上表现最优的模型保存在${CHECKPOINT_DIR}/best_model目录其中${CHECKPOINT_DIR}即训练时指定的 checkpoint 保存目录。使用该模型进行预测的脚本如下import paddle import cv2 import paddlehub as hub if __name__ __main__: model hub.Module(nameisanet_resnet50_voc, pretrained/PATH/TO/CHECKPOINT) img cv2.imread(/PATH/TO/IMAGE) model.predict(images[img], visualizationTrue)Args 说明images原始图像路径或 BGR 格式图片ndarrayvisualization是否可视化/保存分割结果默认为Truesave_path结果保存路径默认保存路径为seg_result。注意进行预测时所选择的 module、checkpoint_dir、dataset 必须与 Fine-tune 时所用的一致即使用微调时同一个模型结构num_classes一致加载微调得到的权重。六、服务部署PaddleHub ServingPaddleHub Serving 可以将图像分割模型部署为在线 HTTP 服务。Step 1启动 PaddleHub Serving运行启动命令$ hub serving start -m isanet_resnet50_voc这样即完成了一个图像分割服务化 API 的部署默认端口号为 8866。NOTE如使用 GPU 预测需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量例如export CUDA_VISIBLE_DEVICES0否则无需设置。从 paddlehub/module/cv_module.py 的ImageSegmentationModule.serving_method实现可以看出服务端收到请求后会将 base64 编码的图片解码为 cv2 图像调用predict得到分割掩膜再以 base64 字符串形式返回结果。Step 2发送预测请求配置好服务端后以下代码即可实现发送预测请求并获取预测结果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/isanet_resnet50_voc r requests.post(urlurl, headersheaders, datajson.dumps(data)) mask base64_to_cv2(r.json()[results][0])请求要点客户端将图片通过cv2_to_base64转为 base64 字符串封装为 JSON 请求体键名为images值为列表POST 到http://127.0.0.1:8866/predict/isanet_resnet50_voc其中 URL 路径中的isanet_resnet50_voc为模块名响应中的results为 base64 编码的分割掩膜通过base64_to_cv2解码回 cv2 图像即可得到掩膜结果。七、更新历史1.0.0初始发布First release。八、小结本文围绕isanet_resnet50_voc模块从模块信息、源码结构、API 预测、Fine-tune 到 Serving 部署进行了全流程讲解。核心要点可总结为开箱即用hub install isanet_resnet50_voc安装后hub.Module即可直接加载并完成单张图片的分割预测微调范式清晰通过segmentation_transforms定义预处理、OpticDiscSeg加载数据、hub.Module加载预训练权重修改num_classes、Trainer执行训练与最优模型保存四步即可完成一次领域微调服务化便捷一条hub serving start命令即可部署在线分割服务配合 base64 编解码即可完成 HTTP 调用实现可深究仓库中 module.py、resnet.py、layers.py 完整呈现了交错稀疏自注意力的 PaddlePaddle 实现Trainer 与 SegDataset 则为自定义数据集微调提供了通用底座值得在真实项目中复用与扩展。赞分享人工智能大模型微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载相关推荐GhostNet 图像分类模型实战基于 PaddleHub 的 ghostnet_x1_0_imagenet 推理、微调与服务化部署指南GhostNet 图像分类模型实战基于 PaddleHub 的 ghostnet_x1_0_imagenet 推理、微调与服务化部署指南 GhostNet 是人工智能大模型微调模型推理服务基于 PaddleHub 的图像着色实战user_guided_colorization 模型 Fine-tune 与部署全指南基于 PaddleHub 的图像着色实战user_guided_colorization 模型 Fine tune 与部署全指南 本文以 PaddleForm人工智能大模型微调模型推理服务PaddleHub 图像分割实战指南基于 ocrnet_hrnetw18_voc 的 Fine-tune、预测与服务部署PaddleHub 图像分割实战指南基于 ocrnet_hrnetw18_voc 的 Fine tune、预测与服务部署 导读 本指南以 PaddleHub人工智能大模型微调模型推理服务上一篇15分钟快速上手在Linux上无缝运行Android应用的终极解决方案下一篇STM32高精度温度控制系统实战从传统开关控制到智能PID调节创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表