PaddleHub 人像抠图模型 modnet_hrnet18_matting 实战指南:安装、API 预测与 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点击查看免费下载本篇技术指南围绕 PaddleHub 开源仓库中的modnet_hrnet18_matting模块展开系统讲解人像 Matting抠图模型的环境安装、命令行/代码预测、predictAPI 参数细节以及基于 PaddleHub Serving 的在线服务部署全流程。读完本文你将掌握如何在本仓库PaddleFormers/PaddleHub环境中一键安装该 60MB 人像抠图模型并用三种方式命令行、Python 脚本、HTTP 服务获取前景 Alpha 遮罩结果。一、模型概览人像 Matting 与 modnet_hrnet18_mattingMatting精细化分割 / 影像去背 / 抠图是指通过计算前景的颜色和透明度将前景从影像中精确撷取出来的技术广泛用于替换背景、影像合成与视觉特效尤其在电影工业中。影像中每个像素都有一个代表前景透明度的值称为阿法值Alpha一张影像中所有 Alpha 值的集合称为阿法遮罩Alpha Matte将影像被遮罩覆盖的部分取出即可完成前景分离。modnet_hrnet18_matting正是用于生成这种人像 Alpha Matte 抠图结果的 PaddleHub 模块。该模块的官方基本信息如下项目内容模型名称modnet_hrnet18_matting类别图像-抠图网络modnet_hrnet18数据集百度自建数据集是否支持 Fine-tuning否模型大小60MB指标SAD 77.96最新更新日期2021-12-03从模块元数据看modnet_hrnet18_matting属于 PaddleHub CV/matting 类型模块见 modules/image/matting/modnet_hrnet18_matting/module.py 中的moduleinfo(typeCV/matting)声明版本 1.0.0作者为 paddlepaddle。模型结构HRNet-W18 骨干 MODNet 三分支解码头从仓库源码可以确认该模型是 MODNet论文Is a Green Screen Really Necessary for Real-Time Portrait Matting?的 PaddlePaddle 实现网络由两大部分构成骨干网络HRNet_W18定义在 modules/image/matting/modnet_hrnet18_matting/hrnet.py采用四阶段高分辨率网络各阶段通道数为(18, 36, 72, 144)并额外输出64通道的浅层特征feat_channels [64] stage4_num_channels。分割头MODNetHead由三个分支协同输出最终 Alpha Matte见 module.py 中的MODNetHead类LRBranch低分辨率分支基于 SE 模块SEBlock与低分辨率特征生成语义级预测HRBranch高分辨率分支融合 2x/4x 高分辨率细节特征负责边缘细节FusionBranch融合分支将高低分辨率结果与原始输入图像融合经 Sigmoid 输出最终pred_matte。推理非训练模式下forward只返回pred_matte训练模式下才返回semantic/detail/matte三个监督输出。模块实例化时若未指定pretrained权重路径会自动加载模块目录下的modnet-hrnet_w18.pdparams预训练参数。二、环境准备与安装1. 环境依赖使用本模块前需要先安装以下依赖paddlepaddle 2.2.0paddlehub 2.1.0paddleseg 2.3.0从 processor.py 的导入可以看到运行时还间接依赖opencv-pythoncv2、numpy、scipy用于高斯模糊核生成与PIL这些通常随 Paddle 生态一并安装缺失时可单独补充。2. 安装模块在满足上述依赖后执行一条命令即可安装$ hub install modnet_hrnet18_matting如安装过程中遇到问题可参考仓库内的零基础安装文档零基础 Windows 安装零基础 Linux 安装零基础 MacOS 安装三、模型 API 预测安装完成后可以通过命令行或 Python 代码两种方式进行人像抠图预测。1. 命令行预测$ hub run modnet_hrnet18_matting --input_path /PATH/TO/IMAGEhub run会定位到模块中由runnable装饰器标记的run_cmd方法paddlehub/commands/run.py 通过module._run_func(argv[1:])触发。结合 module.py 中run_cmd与add_module_config_arg/add_module_input_arg的定义该命令实际支持以下参数参数类型默认值说明--input_pathstr必填待抠图的图片路径--trimap_pathstrNone可选的三分图Trimap路径提供后可约束前景/背景区域--output_dirstrmodnet_hrnet18_matting_output可视化结果保存目录--visualizationboolTrue是否将结果保存为图片文件更完整的 PaddleHub 命令行指令说明见 PaddleHub 命令行指令。2. 预测代码示例import paddlehub as hub import cv2 model hub.Module(namemodnet_hrnet18_matting) result model.predict([/PATH/TO/IMAGE]) print(result)hub.Module(name...)会通过 paddlehub/module/module.py 的Module.init_with_name加载本地模块不存在时自动从服务器下载。3. predict API 详解def predict(self, image_list, trimap_list, visualization, save_path):人像 matting 预测 API用于将输入图片中的人像分割出来返回前景 Alpha 遮罩。参数参数类型默认值说明image_listlist(str | numpy.ndarray)无图片输入路径或 BGR 格式、形状为[H, W, C]的 numpy 数据trimap_listlist(str | numpy.ndarray)NoneTrimap 输入路径或单通道灰度图数据形状[H, W]源码中该参数实际默认为None即不提供时模型自动全图抠图visualizationboolFalse是否进行可视化将结果保存为图片文件save_pathstrmodnet_hrnet18_matting_output当visualizationTrue时结果图片的保存目录返回result(list(numpy.ndarray))模型分割结果列表每个元素为对应输入图的 Alpha 遮罩。4. 预处理与后处理流程源码级解析predict的完整数据流可以在 module.py 与 processor.py 中还原预处理preprocessself.transforms按P.Compose([P.LoadImages(), P.ResizeByShort(), P.ResizeToIntMult(), P.Normalize()])顺序执行——LoadImages从路径读图并转为 RGB默认to_rgbTruetrimap 读为单通道ResizeByShort将图片短边缩放到 512short_size512长边等比例缩放ResizeToIntMult将宽高调整为 32 的整数倍mult_int32满足下采样倍率要求Normalize使用均值/方差(0.5, 0.5, 0.5)归一化到[-1, 1]并转为CHW张量、增加 batch 维度。前向推理在paddle.no_grad()下执行backbone head得到 Alpha 预测。后处理reverse_transformsave_alpha_predreverse_transform依据预处理记录的trans_inforesize 前后尺寸将预测结果用双线性插值还原到原始图片尺寸预测值乘以 255 转成uint80~255 灰度 Alpha 图save_alpha_pred在提供 Trimap 时做后处理alpha[trimap0] 0、alpha[trimap255] 255即强制把 Trimap 标定的确定前景/背景区域置为纯白/纯黑仅对未知区域保留模型预测值从而显著提升边缘准确性若visualizationTrue结果以时间戳.png命名写入save_path目录。四、基于 PaddleHub Serving 的在线服务部署PaddleHub Serving 可以将人像 matting 部署为 HTTP 在线服务方便集成到业务系统中。第一步启动 PaddleHub Serving$ hub serving start -m modnet_hrnet18_matting执行后即完成人像 matting 在线服务 API 的部署默认端口号为 8866。NOTE如需使用 GPU 预测请在启动服务前设置CUDA_VISIBLE_DEVICES环境变量例如export CUDA_VISIBLE_DEVICES0否则无需设置。从 paddlehub/commands/serving.py 的实现可以看到hub serving还支持以下扩展参数--port/-p指定端口默认 8866、--use_gpu切换 GPU 推理使用 ZMQ 多进程模式、--use_multiprocess开启多进程、--config/-c传入 JSON 配置文件、--workers/-w配置工作进程数。服务进程的 PID 信息会写入CONF_HOME/serving_port.json可通过hub serving stop -p port安全停止。第二步发送预测请求服务端配置好后用下面这段代码即可发送预测请求并获取结果图片需先转 base64 传输返回结果同样是 base64 编码的 Alpha 图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_hrnet18_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)服务端实现说明服务启动时serving.py 会通过preinstall_modules预加载模块并调用模块中被serving装饰器标记的serving_method处理请求见 module.py。serving_method内部会将 base64 图片解码为 BGR 数组若请求体同时携带trimaps字段还会将其转为灰度图作为 Trimap 输入最终把预测的 Alpha 图经cv2_to_base64编码后以{data: [...]}形式返回。因此上述请求体同样可以扩展为{images: [...], trimaps: [...]}以传入三分图约束抠图范围。五、模块源码结构导读若希望深入理解该模块的完整实现仓库内与之直接相关的文件如下文件路径内容modules/image/matting/modnet_hrnet18_matting/module.py模块主类MODNetHRNet18moduleinfo元信息、preprocess、forward、predict、serving_method、run_cmd以及MODNetHead/LRBranch/HRBranch/FusionBranch/IBNorm/SEBlock等网络组件modules/image/matting/modnet_hrnet18_matting/processor.py数据流水线Compose、LoadImages、ResizeByShort、ResizeToIntMult、Normalize、reverse_transform、save_alpha_pred及 base64 编解码工具modules/image/matting/modnet_hrnet18_matting/hrnet.pyHRNet-W18 骨干网络四阶段多分辨率分支结构paddlehub/module/module.pyPaddleHub 模块基座moduleinfo/runnable/serving三个装饰器的注册机制以及hub.Module(name...)的加载逻辑paddlehub/commands/run.pyhub run命令入口触发模块的_run_funcpaddlehub/commands/serving.pyhub serving start/stop命令入口端口、GPU、多进程、配置文件等参数的解析与处理六、更新历史1.0.0初始发布说明本模块使用百度自建数据集训练官方指标为 SAD 77.96当前版本不支持 Fine-tuning。如需自定义训练或了解 MODNet 的更多细节可参考该模块 README 中指向的 PaddleSeg Matting 实现。赞分享人工智能大模型微调模型推理服务【免费下载链接】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 人像抠图实战modnet_mobilenetv2_matting 模块的安装、预测与 Serving 部署指南PaddleHub 人像抠图实战modnet_mobilenetv2_matting 模块的安装、预测与 Serving 部署指南 本文以 PaddleFor人工智能大模型微调模型推理服务PaddleHub EfficientNetB1 图像分类模块实战指南安装、预测 API 与 Serving 在线部署PaddleHub EfficientNetB1 图像分类模块实战指南安装、预测 API 与 Serving 在线部署 本指南围绕 PaddleFormers人工智能大模型微调模型推理服务PaddleHub PPLCNet_x0_75 图像分类模型实战安装、API 预测与 Serving 部署指南PaddleHub PPLCNet_x0_75 图像分类模型实战安装、API 预测与 Serving 部署指南 PaddleFormers 仓库中的 pplc人工智能大模型微调模型推理服务上一篇Tornado 6.2.0 版本解析事件循环弃用迁移、PeriodicCallback 协程化与 asyncio 深度整合下一篇ownCloud Core与Nextcloud对比功能差异与迁移指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考