PaddleHub 人像抠图实战modnet_resnet50vd_matting 模型安装、预测与 Serving 部署全指南【免费下载链接】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 仓库中 modnet_resnet50vd_matting 模型文档 为主体系统讲解基于 PaddleHub 的人像 Matting精细化分割/抠图模型的完整使用链路。你将掌握MODNet 人像抠图的核心原理与模型基本信息、环境依赖与安装方式、命令行与 Python API 两种预测形态、predict接口各参数的实际含义含 Trimap 引导机制以及基于 PaddleHub Serving 的在线服务部署与 HTTP 请求调用。文中所有参数与行为均以仓库内 module.py、processor.py 等源码为事实依据确保内容可直接对照源码验证。一、模型基本信息modnet_resnet50vd_matting 是 PaddleHub 提供的人像 Matting抠图模型其模型卡片信息如下项目内容模型名称modnet_resnet50vd_matting类别图像-抠图网络modnet_resnet50vd数据集百度自建数据集是否支持 Fine-tuning否模型大小535MB指标SAD112.73最新更新日期2021-12-03说明以上指标与数据均来自 README.md 模型卡片SADSum of Absolute Differences绝对误差和是 Matting 任务常用的精度评价指标数值越低表示预测 Alpha 遮罩与真值越接近。1. 什么是 MattingMatting精细化分割/影像去背/抠图是指借由计算前景的颜色和透明度将前景从影像中撷取出来的技术可用于替换背景、影像合成、视觉特效在电影工业中被广泛使用。影像中的每个像素会有一个代表其前景透明度的值称作阿法值Alpha一张影像中所有阿法值的集合称作阿法遮罩Alpha Matte。将影像被遮罩所涵盖的部分取出即可完成前景的分离modnet_resnet50vd_matting 即可直接生成人像抠图结果。2. 模型出处与源码实现该模型源自 PaddleSeg release/2.3 分支的 contrib/Matting 实现仓库内的 module.py 是其在 PaddleHub 中的封装核心要点如下类MODNetResNet50Vd通过moduleinfo(namemodnet_resnet50vd_matting, typeCV/matting, version1.0.0)注册为 PaddleHub 模块其中typeCV/matting决定了该模块在命令行与 Serving 中被识别为 CV 类抠图任务模型结构上采用ResNet50_vd 骨干网络 MODNet 三分支解码头MODNetHead由LRBranch低分辨率语义分支、HRBranch高分辨率细节分支与FusionBranch融合分支组成见 module.py这一结构对应 MODNet 论文 Is a Green Screen Really Necessary for Real-Time Portrait Matting?arXiv:2011.11961中的设计骨干网络 resnet.py 中的ResNet50_vd基于 Bag of Tricks for Image Classification with Convolutional Neural NetworksarXiv:1812.01187实现采用 vd虚拟下采样模式在 stem 阶段使用平均池化降采样并逐阶段输出多尺度特征feat_channels [64, 256, 512, 1024, 2048]供 MODNet 各分支使用。二、安装与环境依赖1. 环境依赖根据 README.md 与 requirements.txt运行该模型需要满足依赖版本要求paddlepaddle 2.2.0paddlehub 2.1.0paddleseg 2.3.0其中paddleseg是强依赖模型的预处理算子如ResizeByShort、ResizeToIntMult、Normalize在 processor.py 中直接from paddleseg.transforms import functional调用因此必须安装对应版本的 PaddleSeg。2. 安装模型在满足上述依赖的前提下执行$ hub install modnet_resnet50vd_matting安装完成后PaddleHub 会将该模块登记到本地模块管理器中后续命令行、Python API 与 Serving 三种调用方式均通过模块名modnet_resnet50vd_matting引用。如安装时遇到环境问题可参考仓库内的快速开始文档零基础 Windows 安装 | 零基础 Linux 安装 | 零基础 MacOS 安装。三、模型 API 预测1. 命令行预测安装完成后可以直接通过 PaddleHub 命令行调用$ hub run modnet_resnet50vd_matting --input_path /PATH/TO/IMAGEhub run命令内部会通过runnable装饰的run_cmd方法执行见 module.py。结合 run.py 的命令分发逻辑该模块命令行支持以下参数参数类型默认值说明--input_pathstr必填输入图片路径--trimap_pathstrNoneTrimap 路径提供后可显著提升抠图边缘精度--output_dirstrmodnet_resnet50vd_matting_output结果保存目录--visualizationboolTrue是否将结果保存为图片关于命令行调用 PaddleHub 模块的完整指令说明可参考 PaddleHub 命令行指令。2. 预测代码示例Python 侧调用只需三行核心代码import paddlehub as hub import cv2 model hub.Module(namemodnet_resnet50vd_matting) result model.predict([/PATH/TO/IMAGE]) print(result)其中result为list(numpy.ndarray)每个元素对应一张输入图的 Alpha 预测结果形状与输入图一致数值范围为 0~255uint8255 表示完全不透明的前景像素0 表示背景像素。3. predict API 详解predict方法的完整签名如下见 module.pydef predict(self, image_list, trimap_listNone, visualizationFalse, save_pathmodnet_resnet50vd_matting_output):参数说明参数类型默认值含义image_listlist(str | numpy.ndarray)必填图片输入路径列表或 BGR 格式的[H, W, C]numpy 数据列表trimap_listlist(str | numpy.ndarray)NoneTrimap 输入路径列表或灰度图单通道[H, W]数据列表不传时模型进行全自动抠图visualizationboolFalse是否保存可视化结果save_pathstrmodnet_resnet50vd_matting_output当visualizationTrue时结果的保存目录返回resultlist(numpy.ndarray)人像分割结果列表即每张输入图对应的 Alpha 遮罩。Trimap 的引导机制当传入 Trimap 时模型输出会经过 processor.py 中save_alpha_pred的硬约束处理——alpha[trimap 0] 0Trimap 黑色区域强制为背景alpha[trimap 255] 255Trimap 白色区域强制为前景中间灰色区域未知区保留模型预测值。这意味着用户可以通过标注粗略的三分类掩膜背景/前景/未知来纠正模型在复杂场景下的误分割这也是在实际业务中提升抠图质量最直接的手段。4. 预测流程的源码级解读一次predict调用的完整数据流以 module.py 与 processor.py 为依据为预处理preprocess依次执行LoadImages读图并 BGR→RGB、ResizeByShort短边缩放到 512长边等比缩放、ResizeToIntMult将宽高调整为 32 的整数倍满足网络下采样对齐要求、Normalize使用 mean/std 0.5 归一化随后转为 CHW 张量并增加 batch 维度前向推理在paddle.no_grad()下将图片送入ResNet50_vd骨干提取多尺度特征feat_list再由MODNetHead的低分辨率、高分辨率与融合三个分支产出最终 Alpha 预测见 module.py反向变换reverse_transform依据预处理阶段记录的trans_info将预测结果逐级双线性插值回原始输入尺寸后处理与保存Alpha 数值乘以 255 转为 uint8经save_alpha_pred应用 Trimap 约束后写入结果列表若visualizationTrue则以时间戳命名保存为 PNG 到save_path目录。四、服务部署PaddleHub ServingPaddleHub Serving 可将该人像 Matting 模型部署为在线 HTTP 服务供外部系统通过 RESTful 接口调用。第一步启动 PaddleHub Serving$ hub serving start -m modnet_resnet50vd_matting执行后即完成一个人像 Matting 在线服务 API 的部署默认监听端口为8866该默认值在 serving.py 的--port参数中定义。服务内部通过serving装饰的serving_method对外提供预测能力见 module.py接收 base64 编码的图片可选 Trimap内部解码为 BGR 后调用predict再将结果编码为 base64 字符串返回。NOTE如使用 GPU 预测需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量指定 GPU 设备不使用 GPU 则无需设置。更多 Serving 启动、停止与多模块配置的说明可参考 Serving 使用文档。第二步发送预测请求配置好服务端后以下代码即可发送预测请求并保存抠图结果import requests import json import cv2 import base64 import time 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请求 data {images:[cv2_to_base64(cv2.imread(/PATH/TO/IMAGE))]} headers {Content-type: application/json} url http://127.0.0.1:8866/predict/modnet_resnet50vd_matting r requests.post(urlurl, headersheaders, datajson.dumps(data)) for image in r.json()[results][data]: data base64_to_cv2(image) image_path str(time.time()) .png cv2.imwrite(image_path, data)请求要点接口路径http://127.0.0.1:8866/predict/{模块名}其中modnet_resnet50vd_matting必须与启动服务时-m指定的模块名一致请求体JSON 格式images字段为 base64 编码的图片字符串列表如需要传入 Trimap可参考serving_method的trimaps参数源码位于 module.pyTrimap 会先转为灰度图再参与预测响应解析响应中的results.data为 base64 编码的 Alpha 结果列表解码后即为可保存的抠图 PNG服务停止可通过hub serving stop --port 8866安全停止服务实现见 serving.py。五、更新历史1.0.0初始发布2021-12-03。六、使用注意事项不支持 Fine-tuning该模块以推理预测为主要用途模型卡片明确标注不支持微调请勿尝试对其进行训练流程接入输入约定predict的 numpy 输入需为 BGR 格式与 OpenCV 读取一致、shape 为[H, W, C]Trimap 需为灰度单通道[H, W]模块内部会进行 RGB 转换与归一化无需用户自行预处理输入尺寸预处理会将短边缩放至 512 并将宽高对齐到 32 的整数倍因此输入图片的分辨率不宜过小否则细节会因下采样而损失结果语义返回的 Alpha 图可直接与原始 RGB 图像做 alpha 合成以替换背景这是抠图结果最典型的应用方式硬件提示Serving 场景下如需 GPU 加速务必在启动服务前设置CUDA_VISIBLE_DEVICES否则默认使用 CPU 推理。通过本文你已经可以完整掌握 modnet_resnet50vd_matting 从环境准备、安装、命令行/代码预测到在线服务部署的整个落地链路如需深入网络细节可继续阅读仓库内的 module.pyMODNet 三分支实现、resnet.pyResNet50_vd 骨干与 processor.py预处理与后处理流水线三份核心源码。【免费下载链接】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),仅供参考
