捣鼓PP-HumanSeg的使用
最近捣鼓了PaddleSeg中的PP-HumanSeg项目,人像分割。这个项目发布时间较早,根据描述,已经广泛应用在了百度视频会议中,并支持多端,多种网络架构。我使用的环境是Python 3.12.3,PaddleSeg 2.10。
安装
项目根目录里面提供了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星河社区,可以直接下载供测试。
模型名 | 模型说明 | Checkpoint | Inference Model |
---|---|---|---|
PPSeg-Server | 高精度模型,适用于服务端GPU且背景复杂的人像场景, 模型结构为Deeplabv3+/ResNet50, 输入大小(512, 512) | ppseg_server_ckpt | ppseg_server_inference |
PPSeg-Mobile | 轻量级模型,适用于移动端或服务端CPU的前置摄像头场景,模型结构为HRNet_w18_samll_v1,输入大小(192, 192) | ppseg_mobile_ckpt | ppseg_mobile_inference |
PPSeg-Lite | 超轻量级模型,适用于Web端或移动端实时分割场景,例如手机自拍、Web视频会议,模型结构为百度自研模型,输入大小(192, 192) | ppseg_lite_ckpt | ppseg_lite_inference |
微调
自带的模型并不够使用的话,还可以微调。实际使用体验下来,背景复杂或是纯色绿幕背景,即便是使用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
完成时输出:
默认是使用的官方提供的测试数据集,默认在文件夹PaddleSeg-release-2.10\contrib\PP-HumanSeg\src\data\mini_supervisely
中。
使用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_OCR64 | static_hrnet18_ocr64_cocolvis |
轻量化模型 | 通用场景的图像标注 | HRNet18s_OCR48 | static_hrnet18s_ocr48_cocolvis |
高精度模型 | 通用图像标注场景 | EdgeFlow | static_edgeflow_cocolvis |
高精度模型 | 人像标注场景 | HRNet18_OCR64 | static_hrnet18_ocr64_human |
轻量化模型 | 人像标注场景 | HRNet18s_OCR48 | static_hrnet18s_ocr48_human |
打开文件夹,逐个完成标注,并保存即可。灰度标注图与伪彩色标注图两种形式,均可支持。
打标就不多写了,纯粹的体力活。导出数据后,操作步骤与上文中的微调相同。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。