☰
PaddleSeg PP-HumanSeg-Lite(ConnectNet)实时人像分割模型完全指南
2026/9/25 2:34:45 网站建设 项目流程
  • 人工智能
  • 计算机视觉
  • 预训练

【免费下载链接】PaddleSeg

Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleSeg
点击查看免费下载

导读

PP-HumanSeg-Lite 是 PaddleSeg 自研的超轻量人像分割网络 ConnectNet,专为 Web 与移动端实时分割场景设计,以 2.3MB 左右的模型体积在 398x224 输入下实现约 29.68ms 的 ARM CPU 单帧推理(小米 9,Snapdragon 855,单线程),并以 93.60% 的 mIoU 在 PP-HumanSeg-14K 人像分割数据集上保持高精度。本文以 configs/pp_humanseg_lite/README.md 为骨架,结合 paddleseg/models/pphumanseg_lite.py 源码、仓库内的训练/导出配置以及 contrib/PP-HumanSeg 的完整工具链,系统讲解该模型的结构设计、配置参数、训练、评估、预测、导出与部署全流程,读者读完可独立完成从零训练到端侧部署的实战闭环。

上图为 PP-HumanSeg-Lite(ConnectNet)的编码器-解码器结构示意图:输入图像经 3x3 卷积下采样至 1/2,经 Max Pool 至 1/4 后依次通过 Stage1(至 1/8)、Stage2(至 1/16),再经 DSConv1(深度可分离卷积)保持 1/16 分辨率;解码器侧将特征上采样回 1/4 并与编码器前端的 1x1 卷积输出融合,随后经 DSConv2、DSConv3 与二次上采样,最终通过 Softmax 输出人像分割二值掩码。

一、PP-HumanSeg-Lite 是什么

PP-HumanSeg-Lite 是百度自研的超轻量人像分割模型 ConnectNet,由 PaddleSeg 官方发布,定位为"适合 Web 端与移动端实时分割场景"的端侧模型。它对应 2021 年发布的 PP-HumanSeg V1 系列中的 Lite 型号,在 contrib/PP-HumanSeg/README.md 中被称为PP-HumanSegV1-Lite,完整描述为:

A self-developed ultra lightweight model ConnectNet, is suitable for real-time segmentation scenarios on the web or mobile.

其底层原理论文为PP-HumanSeg: Connectivity-Aware Portrait Segmentation With a Large-Scale Teleconferencing Video Dataset(WACV 2022 Workshop),仓库中对应的论文资料与 SCL(Semantic Connectivity-aware Learning)方法说明见 contrib/PP-HumanSeg/paper.md。

与 PP-HumanSeg 系列其他成员相比,V1-Lite 的定位是精度与模型体积兼顾:

模型最佳输入尺寸mIoU(%)ARM CPU 推理耗时(ms)模型大小(MB)配置
PP-HumanSegV1-Lite398x22493.6029.682.3configs/pp_humanseg_lite/pp_humanseg_lite_export_398x224.yml
PP-HumanSegV2-Lite256x14496.6315.865.4contrib/PP-HumanSeg/configs/portrait_pp_humansegv2_lite.yml

说明:上述精度(mIoU)在 PP-HumanSeg-14K 数据集上以最佳输入尺寸测试;推理耗时使用 PaddleLite,在小米 9(Snapdragon 855 CPU)单线程下测得。V2-Lite 是后续升级版本(基于 MobileNetV3 骨干与多尺度特征聚合),其数据来源 contrib/PP-HumanSeg/README.md。V1-Lite 的最佳输入尺寸 398x224 与手机/笔记本摄像头常见的 16:9 画幅一致,这是其设计上的实用考量。

二、ConnectNet 网络结构解析(源码级)

PP-HumanSeg-Lite 的网络定义位于 paddleseg/models/pphumanseg_lite.py,核心类为PPHumanSegLite,通过@manager.MODELS.add_component注册进 PaddleSeg 的模型管理器,因此配置文件里model.type: PPHumanSegLite即可直接实例化。

2.1 编码器:三分支下采样路径

PPHumanSegLite.__init__与forward中编码器的前向计算顺序如下:

  1. conv_bn0:_ConvBNReLU(in_channels=3, out_channels=36, kernel=3, stride=2, padding=1),将输入下采样至1/2,同时扩展至 36 通道;
  2. conv_bn1:_ConvBNReLU(36, 18, kernel=1),输出 18 通道的捷径特征(shortcut),留待解码器阶段融合;
  3. max_pool2d(kernel=3, stride=2, padding=1):将特征下采样至1/4;
  4. block1:4 个InvertedResidual串联(stride 依次为 2,1,1,1),特征降至1/8;
  5. block2:8 个InvertedResidual串联(stride 依次为 2,其余为 1),特征进一步降至1/16。

2.2 倒残差块 InvertedResidual 与通道混洗

InvertedResidual(对应代码 paddleseg/models/pphumanseg_lite.py)是编码器的基础单元,其关键设计如下:

  • stride=1 时:输入沿通道维一分为二(paddle.split),一半直接作为 shortcut 短路,另一半经_ConvBNReLU(1x1)+_SeparableConvBNReLU(3x3 深度可分离卷积)提取特征后再拼接,实现通道维度上的"半短路"结构;
  • stride=2 时:无直接 shortcut,改为用_SeparableConvBNReLU对全通道做下采样得到 shortcut,另一分支同样经 1x1 卷积与 3x3 深度可分离卷积处理,最后拼接;
  • 通道混洗(channel shuffle):拼接后通过 reshape 为[0, 2, in_channels, h, w]、transpose 交换中间两维再 reshape 回[0, 2*in_channels, h, w],让两分支通道信息充分交织(参考 paddleseg/models/pphumanseg_lite.py),这一操作与 ShuffleNet 系列的思想一致,是轻量化设计的关键手段。

从代码结构可以推断,这种"通道半分叉 + 深度可分离卷积 + 通道混洗"的组合,在保证特征表达能力的同时显著压缩了计算量与参数量,这正是 ConnectNet 能在移动端实时运行的根本原因。

2.3 解码器:特征融合与双线性上采样

编码器输出的 1/16 分辨率特征进入解码器:

  1. depthwise_separable0:_SeparableConvBNReLU(144, 64, kernel=3),保持 1/16 分辨率;
  2. 通过F.interpolate(..., mode='bilinear', align_corners=self.align_corners)上采样到shortcut 的尺寸(1/4);
  3. 与conv_bn1产生的 18 通道 shortcut 在通道维拼接(144/2+18 → 82 通道),形成高分辨率细节与深层语义的融合;
  4. 依次经过depthwise_separable1(_SeparableConvBNReLU(82, 64))与depthwise_separable2(_SeparableConvBNReLU(64, num_classes))输出 logit;
  5. 最后再经一次双线性插值,将 logit 恢复到原始输入分辨率,返回[logit]。

值得注意的是forward的返回值是长度为 1 的列表[logit],这与 PaddleSeg 中带辅助损失的多输出模型(如[logit, aux])格式兼容,便于直接接入 tools/train.py 等训练工具。

2.4 参数初始化

init_weight对子层中的nn.Conv2D使用标准差 0.001 的正态初始化,对 BatchNorm 使用权重 1.0、偏置 0.0 的常量初始化;当构造参数传入pretrained路径时,会调用utils.load_pretrained_model加载预训练权重(参考 paddleseg/models/pphumanseg_lite.py)。

三、配置文件详解:训练配置与导出配置

仓库在 configs/pp_humanseg_lite/ 下提供了两个配置文件,分别用于训练与导出。

3.1 训练配置pp_humanseg_lite_mini_supervisely.yml

该配置面向 Supervisely 人像数据集(mini_supervisely,可用 contrib/PP-HumanSeg/src/download_data.py 下载),核心字段如下:

batch_size: 64 iters: 2000 train_dataset: type: Dataset dataset_root: data/mini_supervisely train_path: data/mini_supervisely/train.txt num_classes: 2 transforms: - type: Resize target_size: [398, 224] - type: RandomHorizontalFlip - type: RandomDistort brightness_range: 0.4 contrast_range: 0.4 saturation_range: 0.4 - type: Normalize mode: train val_dataset: type: Dataset dataset_root: data/mini_supervisely val_path: data/mini_supervisely/val.txt num_classes: 2 transforms: - type: Resize target_size: [398, 224] - type: Normalize mode: val optimizer: type: SGD momentum: 0.9 weight_decay: 0.0005 lr_scheduler: type: PolynomialDecay learning_rate: 0.05 end_lr: 0 power: 0.9 loss: types: - type: CrossEntropyLoss coef: [1] model: type: PPHumanSegLite align_corners: False num_classes: 2

各字段含义与实战要点:

  • batch_size / iters:批大小 64,总迭代数 2000。人像分割是二分类问题(前景/背景),该配置属于快速验证规模;
  • 数据集:dataset_root、train_path、val_path指向 PaddleSeg 标准数据集文件列表(每行一条图像路径,文件路径均需相对/绝对指向真实文件);num_classes: 2表示背景+前景二类;
  • 数据增强链:Resize固定到[398, 224](宽高对应模型最佳输入 16:9);RandomHorizontalFlip做水平翻转;RandomDistort对亮度、对比度、饱和度各做 0.4 幅度的随机扰动,增强对光照变化的鲁棒性;最后Normalize(PaddleSeg 默认使用 ImageNet 均值和方差);
  • 优化器:SGD,momentum 0.9,weight_decay 5e-4;
  • 学习率调度:PolynomialDecay,初始学习率 0.05,最终衰减至end_lr: 0,幂次power: 0.9;
  • 损失函数:单一CrossEntropyLoss,系数coef: [1](多损失时该列表长度需与types一致);
  • 模型:type: PPHumanSegLite对应 paddleseg/models/pphumanseg_lite.py 中注册的类;align_corners: False控制所有双线性插值/上采样对齐方式,需在训练与导出/推理阶段保持一致;num_classes: 2与数据集类别数对应。

3.2 导出配置pp_humanseg_lite_export_398x224.yml

该文件仅保留推理所需的模型定义与验证数据配置,用于tools/export.py导出静态图推理模型:

model: type: PPHumanSegLite align_corners: False num_classes: 2 val_dataset: type: Dataset dataset_root: data/mini_supervisely val_path: data/mini_supervisely/val.txt num_classes: 2 transforms: - type: Resize target_size: [398, 224] - type: Normalize mode: val

导出时模型结构与训练时保持一致(align_corners、num_classes相同),输入尺寸固定为 398x224,保证动态 shape 与静态图导出的输入张量一致。

四、从零到部署:完整实操流程

PP-HumanSeg-Lite 的完整链路(环境、数据、训练、评估、预测、导出、部署)由 contrib/PP-HumanSeg/README.md 统一给出,下面按步骤整理。

4.1 环境准备

  • PaddlePaddle >= 2.2.0,Python >= 3.7;
  • 人像分割模型计算量较大,建议使用 GPU 版 PaddlePaddle;
  • 安装 PaddleSeg 依赖:
git clone https://gitcode.com/gh_mirrors/pa/PaddleSeg cd PaddleSeg pip install -r requirements.txt

后续训练、微调相关命令需在contrib/PP-HumanSeg目录下执行(Windows 下对应命令用set CUDA_VISIBLE_DEVICES=0代替export)。

4.2 下载模型与数据

cd contrib/PP-HumanSeg python src/download_inference_models.py # 下载推理模型到 inference_models/ python src/download_data.py # 下载测试数据(含 mini_supervisely 数据集)到 data/

4.3 预训练模型下载与微调训练

若希望在自有数据上微调 V1-Lite,先下载预训练 checkpoint(用于微调而非部署),再修改配置后训练:

python src/download_pretrained_models.py

训练命令(以通用人像分割的 V2-Lite 为例,V1-Lite 同理替换配置文件):

export CUDA_VISIBLE_DEVICES=0 python ../../tools/train.py \ --config configs/human_pp_humansegv1_lite.yml \ --save_dir output/human_pp_humansegv1_lite \ --save_interval 100 --do_eval --use_vdl

完整训练用法见 docs/train/train.md。配置文件中已预设预训练权重路径;实际微调时建议根据数据规模调整学习率等超参。

4.4 评估

python ../../tools/val.py \ --config configs/human_pp_humansegv1_lite.yml \ --model_path pretrained_models/human_pp_humansegv1_lite_398x224_pretrained/model.pdparams

完整评估用法见 docs/evaluation/evaluate/evaluate.md。

4.5 预测

python ../../tools/predict.py \ --config configs/human_pp_humansegv1_lite.yml \ --model_path pretrained_models/human_pp_humansegv1_lite_398x224_pretrained/model.pdparams \ --image_path data/images/human.jpg \ --save_dir ./data/images_result

结果分别保存在./data/images_result/added_prediction(叠加可视化)与./data/images_result/pseudo_color_prediction(伪彩色分割图)。

4.6 导出推理模型

python ../../tools/export.py \ --config configs/pp_humanseg_lite/pp_humanseg_lite_export_398x224.yml \ --model_path pretrained_models/human_pp_humansegv1_lite_398x224_pretrained/model.pdparams \ --save_dir output/human_pp_humansegv1_lite \ --without_argmax \ --with_softmax
  • 当设置--without_argmax --with_softmax时,导出模型最后一层为softmax,输出两通道概率图;
  • 若不加这两个参数,默认最后一层为argmax,输出单通道类别索引图,体积更小,适合端侧直接取掩码。

完整导出用法见 docs/model_export.md。导出配置直接复用 configs/pp_humanseg_lite/pp_humanseg_lite_export_398x224.yml。

4.7 实时演示与背景替换(seg_demo.py)

contrib/PP-HumanSeg/src/seg_demo.py是面向产品化演示的入口,输入可以是图片、视频或摄像头,支持背景替换、竖屏旋转与光流去抖。参数如下:

参数说明类型必填默认值
config推理模型内的 deploy.yaml 路径str是-
img_path输入图片路径str否-
video_path输入视频路径str否-
bg_img_path背景图片路径str否-
bg_video_path背景视频路径str否-
save_dir输出图片/视频保存目录str否./output
vertical_screen输入为竖屏时开启store_true否False
use_post_process对预测 logit 做后处理store_true否False
use_optic_flow启用光流去抖store_true否False

规则说明:设置了img_path则预测图片;设置了video_path则预测视频;两者都未设置则调用摄像头实时预测。默认按横屏(宽大于高)处理,竖屏输入必须加--vertical_screen。--use_optic_flow依赖 opencv-python > 4.0。

典型用法示例(推理模型下载后位于inference_models/):

# 图片人像分割(横屏) python src/seg_demo.py \ --config inference_models/portrait_pp_humansegv1_lite_398x224_inference_model_with_softmax/deploy.yaml \ --img_path data/images/portrait_heng.jpg \ --save_dir data/images_result/portrait_heng_v1.jpg # 图片背景替换(竖屏) python src/seg_demo.py \ --config inference_models/portrait_pp_humansegv2_lite_256x144_inference_model_with_softmax/deploy.yaml \ --img_path data/images/portrait_shu.jpg \ --bg_img_path data/images/bg_1.jpg \ --save_dir data/images_result/portrait_shu_v2_withbg.jpg \ --vertical_screen # 视频背景替换 + logit 后处理 python src/seg_demo.py \ --config inference_models/portrait_pp_humansegv2_lite_256x144_inference_model_with_softmax/deploy.yaml \ --video_path data/videos/video_heng.mp4 \ --bg_img_path data/images/bg_2.jpg \ --use_post_process \ --save_dir data/videos_result/video_heng_v2_withbg_usepostprocess.avi # 竖屏视频 + DIS 光流去抖 python src/seg_demo.py \ --config inference_models/portrait_pp_humansegv2_lite_256x144_inference_model_with_softmax/deploy.yaml \ --video_path data/videos/video_shu.mp4 \ --save_dir data/videos_result/video_shu_v2_use_optic_flow.avi \ --vertical_screen \ --use_optic_flow # 摄像头实时分割(横屏) python src/seg_demo.py \ --config inference_models/portrait_pp_humansegv2_lite_256x144_inference_model_with_softmax/deploy.yaml

4.8 端侧与多平台部署

PP-HumanSeg 系列推理模型与 PaddleSeg 其他模型部署方式一致:

  • 服务端 Python 推理:docs/deployment/inference/python_inference.md
  • 服务端 C++ 推理:docs/deployment/inference/cpp_inference.md
  • 边缘设备(PaddleLite):docs/deployment/lite/lite.md
  • Web 端(Paddle.js):docs/deployment/web/web.md

移动端部署效果示例见 deploy/lite/example/(含人像分割 demo 展示图);Web 端基于 Paddle.js 还提供了"人像快照""视频背景替换与弹幕穿透"等在线体验能力(contrib/PP-HumanSeg/README.md 中有相关介绍,属于该系列模型的典型落地场景)。

五、与 V2-Lite 的关系及选型建议

  • V1-Lite(本文主角,ConnectNet):2.3MB,398x224 输入,ARM CPU 单帧约 29.68ms,mIoU 93.60%,适合对体积敏感、算力受限且画幅为 16:9 的场景;
  • V2-Lite:5.4MB,256x144 输入,ARM CPU 单帧约 15.86ms,mIoU 96.63%,相比 V1 推理提速 45.5%、mIoU 提升 3.03%,采用 MobileNetV3 骨干 + 多尺度特征聚合 + 迁移学习(先在大型通用人像数据集预训练,再在小型人像数据集微调),详见 contrib/PP-HumanSeg/configs/portrait_pp_humansegv2_lite.yml。

选型建议:追求最小体积与最简结构选 V1-Lite;追求更高精度与更快速度(允许略大的模型体积)选 V2-Lite。两者都支持无成本直接集成产品,也支持基于预训练权重在自有数据上微调(contrib/PP-HumanSeg/README.md 第 6 节给出了完整流程)。

六、常见问题与注意事项

  1. 输入尺寸一致性:训练、导出、推理三阶段的输入分辨率(398x224)必须一致,导出配置 configs/pp_humanseg_lite/pp_humanseg_lite_export_398x224.yml 与训练配置中的Resize target_size应保持相同,否则导出后精度会异常;
  2. 横竖屏处理:模型默认按横屏(宽>高)设计,竖屏输入时需在seg_demo.py中加--vertical_screen,先旋转图像使人像保持竖直方向再推理;
  3. 输出通道数:软输出(softmax,双通道概率)适合后处理与背景合成;硬输出(argmax,单通道掩码)体积小、适合直接取分割结果,按部署需求在tools/export.py中通过--with_softmax/--without_argmax控制;
  4. 泛化性验证:通用人像分割场景图像多样,上线前应结合真实场景评估发布模型的精度;若不满足,需自行标注数据并用预训练权重微调(contrib/PP-HumanSeg/README.md 明确指出该建议);
  5. 视频抖动:视频分割易出现帧间抖动,可用--use_post_process对 logit 做后处理,或用--use_optic_flow(DIS 光流算法,需 opencv-python > 4.0)缓解闪烁。

总结

PP-HumanSeg-Lite(ConnectNet)以"通道半分叉倒残差 + 深度可分离卷积 + 通道混洗 + 高分辨率捷径融合"的轻量化设计,在 2.3MB 体积下实现了移动端 29.68ms/帧的实时人像分割,是 Web 与移动端实时分割场景的成熟落地方案。通过 configs/pp_humanseg_lite/ 下的训练与导出配置,结合 contrib/PP-HumanSeg 的完整工具链(下载、训练、评估、预测、导出、seg_demo 实时演示),开发者可以快速完成从训练到多端部署的端到端集成;如需更高精度与更快速度,可平滑升级至 PP-HumanSegV2-Lite。

  • 人工智能
  • 计算机视觉
  • 预训练

【免费下载链接】PaddleSeg

Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleSeg
点击查看免费下载

相关推荐

上一篇:FTXUI完全攻略:重新定义C++终端界面开发的终极指南
下一篇:别再盲投了:3步装好Boss Show Time,让Boss直聘职位发布时间一眼可见

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询