本教程基于PaddleSeg核心分割网络,提供针对人像分割场景从预训练模型、Fine-tune、视频分割预测部署的全流程应用指南。最新发布HumanSeg-lite模型超轻量级人像分割模型,支持移动端场景的实时分割。
- Python == 3.5/3.6/3.7
- PaddlePaddle >= 1.7.2
PaddlePaddle的安装可参考飞桨快速安装
通过以下命令安装python包依赖,请确保在该分支上至少执行过一次以下命令
$ pip install -r requirements.txt
HumanSeg开放了在大规模人像数据上训练的三个预训练模型,满足多种使用场景的需求
模型类型 | Checkpoint | Inference Model | Quant Inference Model | 备注 |
---|---|---|---|---|
HumanSeg-server | humanseg_server_ckpt | humanseg_server_inference | -- | 高精度模型,适用于服务端GPU且背景复杂的人像场景, 模型结构为Deeplabv3+/Xcetion65, 输入大小(512, 512) |
HumanSeg-mobile | humanseg_mobile_ckpt | humanseg_mobile_inference | humanseg_mobile_quant | 轻量级模型, 适用于移动端或服务端CPU的前置摄像头场景,模型结构为HRNet_w18_samll_v1,输入大小(192, 192) |
HumanSeg-lite | humanseg_lite_ckpt | humanseg_lite_inference | humanseg_lite_quant | 超轻量级模型, 适用于手机自拍人像,且有移动端实时分割场景, 模型结构为优化的ShuffleNetV2,输入大小(192, 192) |
模型性能
模型 | 模型大小 | 计算耗时 |
---|---|---|
humanseg_server_inference | 158M | - |
humanseg_mobile_inference | 5.8 M | 42.35ms |
humanseg_mobile_quant | 1.6M | 24.93ms |
humanseg_lite_inference | 541K | 17.26ms |
humanseg_lite_quant | 187k | 11.89ms |
计算耗时运行环境: 小米,cpu:骁龙855, 内存:6GB, 图片大小:192*192)
NOTE: 其中Checkpoint为模型权重,用于Fine-tuning场景。
-
Inference Model和Quant Inference Model为预测部署模型,包含
__model__
计算图结构、__params__
模型参数和model.yaml
基础的模型配置信息。 -
其中Inference Model适用于服务端的CPU和GPU预测部署,Qunat Inference Model为量化版本,适用于通过Paddle Lite进行移动端等端侧设备部署。更多Paddle Lite部署说明查看Paddle Lite文档
执行以下脚本进行HumanSeg预训练模型的下载
python pretrained_weights/download_pretrained_weights.py
我们提供了supervise.ly发布人像分割数据集Supervisely Persons, 从中随机抽取一小部分并转化成PaddleSeg可直接加载数据格式。通过运行以下代码进行快速下载,其中包含手机前置摄像头的人像测试视频video_test.mp4
.
python data/download_data.py
结合DIS(Dense Inverse Search-basedmethod)光流算法预测结果与分割结果,改善视频流人像分割
# 通过电脑摄像头进行实时分割处理
python video_infer.py --model_dir pretrained_weights/humanseg_lite_inference
# 对人像视频进行分割处理
python video_infer.py --model_dir pretrained_weights/humanseg_lite_inference --video_path data/video_test.mp4
视频分割结果如下:
根据所选背景进行背景替换,背景可以是一张图片,也可以是一段视频。
# 通过电脑摄像头进行实时背景替换处理, 也可通过'--background_video_path'传入背景视频
python bg_replace.py --model_dir pretrained_weights/humanseg_lite_inference --background_image_path data/background.jpg
# 对人像视频进行背景替换处理, 也可通过'--background_video_path'传入背景视频
python bg_replace.py --model_dir pretrained_weights/humanseg_lite_inference --video_path data/video_test.mp4 --background_image_path data/background.jpg
# 对单张图像进行背景替换
python bg_replace.py --model_dir pretrained_weights/humanseg_lite_inference --image_path data/human_image.jpg --background_image_path data/background.jpg
背景替换结果如下:
NOTE:
视频分割处理时间需要几分钟,请耐心等待。
提供的模型适用于手机摄像头竖屏拍摄场景,宽屏效果会略差一些。
使用下述命令基于与训练模型进行Fine-tuning,请确保选用的模型结构model_type
与模型参数pretrained_weights
匹配。
python train.py --model_type HumanSegMobile \
--save_dir output/ \
--data_dir data/mini_supervisely \
--train_list data/mini_supervisely/train.txt \
--val_list data/mini_supervisely/val.txt \
--pretrained_weights pretrained_weights/humanseg_mobile_ckpt \
--batch_size 8 \
--learning_rate 0.001 \
--num_epochs 10 \
--image_shape 192 192
其中参数含义如下:
--model_type
: 模型类型,可选项为:HumanSegServer、HumanSegMobile和HumanSegLite--save_dir
: 模型保存路径--data_dir
: 数据集路径--train_list
: 训练集列表路径--val_list
: 验证集列表路径--pretrained_weights
: 预训练模型路径--batch_size
: 批大小--learning_rate
: 初始学习率--num_epochs
: 训练轮数--image_shape
: 网络输入图像大小(w, h)
更多命令行帮助可运行下述命令进行查看:
python train.py --help
NOTE
可通过更换--model_type
变量与对应的--pretrained_weights
使用不同的模型快速尝试。
使用下述命令进行评估
python val.py --model_dir output/best_model \
--data_dir data/mini_supervisely \
--val_list data/mini_supervisely/val.txt \
--image_shape 192 192
其中参数含义如下:
--model_dir
: 模型路径--data_dir
: 数据集路径--val_list
: 验证集列表路径--image_shape
: 网络输入图像大小(w, h)
使用下述命令进行预测, 预测结果默认保存在./output/result/
文件夹中。
python infer.py --model_dir output/best_model \
--data_dir data/mini_supervisely \
--test_list data/mini_supervisely/test.txt \
--save_dir output/result \
--image_shape 192 192
其中参数含义如下:
--model_dir
: 模型路径--data_dir
: 数据集路径--test_list
: 测试集列表路径--image_shape
: 网络输入图像大小(w, h)
python export.py --model_dir output/best_model \
--save_dir output/export
其中参数含义如下:
--model_dir
: 模型路径--save_dir
: 导出模型保存路径
python quant_offline.py --model_dir output/best_model \
--data_dir data/mini_supervisely \
--quant_list data/mini_supervisely/val.txt \
--save_dir output/quant_offline \
--image_shape 192 192
其中参数含义如下:
--model_dir
: 待量化模型路径--data_dir
: 数据集路径--quant_list
: 量化数据集列表路径,一般直接选择训练集或验证集--save_dir
: 量化模型保存路径--image_shape
: 网络输入图像大小(w, h)
利用float训练模型进行在线量化。
python quant_online.py --model_type HumanSegMobile \
--save_dir output/quant_online \
--data_dir data/mini_supervisely \
--train_list data/mini_supervisely/train.txt \
--val_list data/mini_supervisely/val.txt \
--pretrained_weights output/best_model \
--batch_size 2 \
--learning_rate 0.001 \
--num_epochs 2 \
--image_shape 192 192
其中参数含义如下:
--model_type
: 模型类型,可选项为:HumanSegServer、HumanSegMobile和HumanSegLite--save_dir
: 模型保存路径--data_dir
: 数据集路径--train_list
: 训练集列表路径--val_list
: 验证集列表路径--pretrained_weights
: 预训练模型路径,--batch_size
: 批大小--learning_rate
: 初始学习率--num_epochs
: 训练轮数--image_shape
: 网络输入图像大小(w, h)
我们在AI Studio平台上提供了人像分割在线体验的教程,点击体验