最近捣鼓了PaddleSeg中的PP-HumanSeg项目,人像分割。这个项目发布时间较早,根据描述,已经广泛应用在了百度视频会议中,并支持多端,多种网络架构。我使用的环境是Python 3.12.3,PaddleSeg 2.10。

paddleseg_logo.webp

安装

项目根目录里面提供了pip install -r requirements.txt,直接安装即可。

paddleseg需要安装源码目录的版本,别使用pip直接安装。

(test2) C:\Users\cyqsd\Desktop\PaddleSeg-release-2.10>pip install -e .
Looking in indexes: https://pypi.mirrors.ustc.edu.cn/simple
Obtaining file:///C:/Users/cyqsd/Desktop/PaddleSeg-release-2.10
  Preparing metadata (setup.py) ... done
  ... 省略一大堆...
Installing collected packages: paddleseg
  Attempting uninstall: paddleseg
    Found existing installation: paddleseg 2.8.0
    Uninstalling paddleseg-2.8.0:
      Successfully uninstalled paddleseg-2.8.0
  Running setup.py develop for paddleseg
Successfully installed paddleseg-0.0.0.dev0

运行PaddleSeg-release-2.10\contrib\PP-HumanSeg\src目录中各式download_xxx,具体操作可以看官方教程。

人像分割

PaddleSeg: End-to-End Image Segmentation Suite Based on PaddlePaddle. (『飞桨』图像分割开发套件) - Gitee.com

# 图片
python src\seg_demo.py  --config inference_models\portrait_pp_humansegv2_lite_256x144_inference_model_with_softmax\deploy.yaml   --img_path src\data\images\portrait_heng.jpg  --save_dir src\data\images_result\portrait_heng_v2.jpg

python src\seg_demo.py  --config inference_models\portrait_pp_humansegv1_lite_398x224_inference_model_with_softmax\deploy.yaml   --img_path src\data\images\portrait_shu.jpg  --save_dir src\data\images_result\portrait_shu_v2.jpg

# 视频
python src\seg_demo.py --config inference_models\portrait_pp_humansegv2_lite_256x144_inference_model_with_softmax\deploy.yaml --video_path src\data\videos\dde16f8c-8b17-465b-9d39-22c8d9ab0820.mp4  --save_dir src\data\videos_result\dde16f8c-8b17-465b-9d39-22c8d9ab0820.avi  --vertical_screen

注意,视频的横竖对结果也有影响,根据情况使用--vertical_screen参数,更多可选参数见官方文档。

PaddleSeg-release-2.10\contrib\PP-HumanSeg\inference_models目录中预制了一堆模型可供选择。PP-HumanSeg V2版本模型效果更好,尽可能选用。

比如官网上介绍的通用人像分割(Generic Human Segmentation)PaddleSeg实战——人像分割(最新版) - 飞桨AI Studio星河社区,可以直接下载供测试。

模型名模型说明CheckpointInference Model
PPSeg-Server高精度模型,适用于服务端GPU且背景复杂的人像场景, 模型结构为Deeplabv3+/ResNet50, 输入大小(512, 512)ppseg_server_ckptppseg_server_inference
PPSeg-Mobile轻量级模型,适用于移动端或服务端CPU的前置摄像头场景,模型结构为HRNet_w18_samll_v1,输入大小(192, 192)ppseg_mobile_ckptppseg_mobile_inference
PPSeg-Lite超轻量级模型,适用于Web端或移动端实时分割场景,例如手机自拍、Web视频会议,模型结构为百度自研模型,输入大小(192, 192)ppseg_lite_ckptppseg_lite_inference

image-20250205114135512.webp

微调

自带的模型并不够使用的话,还可以微调。实际使用体验下来,背景复杂或是纯色绿幕背景,即便是使用deeplabv3p_resnet50_os8_humanseg_512x512_100k_with_softmax,进行处理,也还和预想中有些差异,用于视频会议、直播等及时性要求更强,对效果要求没有那么高的场合还是没有问题的。

python ../../tools/train.py --config configs/human_pp_humansegv2_lite.yml --save_dir output/human_pp_humansegv2_lite  --save_interval 100 --do_eval --use_vdl

image-20250205114107859.webp

完成时输出:

image-20250205114426876.webp

默认是使用的官方提供的测试数据集,默认在文件夹PaddleSeg-release-2.10\contrib\PP-HumanSeg\src\data\mini_supervisely中。

image-20250205152150163.webp

使用EISeg构建自定义数据集

参考教程: 准备自定义数据集 docs/data/marker/marker_cn.md · PaddlePaddle/PaddleSeg - Gitee.com

PddleSeg支持多种标注工具,比如EISeg交互式分割标注工具、LabelMe标注工具。标注工具的教程,请参考:

EISeg的话需要QT5依赖,缺什么就补什么就行。

EISeg/docs/image.md · PaddlePaddle/PaddleSeg - Gitee.com ,官方文档中还提供了下面的基础模型可供选择。

模型类型适用场景模型结构模型下载地址
高精度模型通用场景的图像标注HRNet18_OCR64static_hrnet18_ocr64_cocolvis
轻量化模型通用场景的图像标注HRNet18s_OCR48static_hrnet18s_ocr48_cocolvis
高精度模型通用图像标注场景EdgeFlowstatic_edgeflow_cocolvis
高精度模型人像标注场景HRNet18_OCR64static_hrnet18_ocr64_human
轻量化模型人像标注场景HRNet18s_OCR48static_hrnet18s_ocr48_human

image-20250205115034268.webp

打开文件夹,逐个完成标注,并保存即可。灰度标注图与伪彩色标注图两种形式,均可支持。

image-20250205143415957.webp

image-20250205154128969.webp

打标就不多写了,纯粹的体力活。导出数据后,操作步骤与上文中的微调相同。

文章目录