README.md 6.4 KB
Newer Older
Z
Zeyu Chen 已提交
1
# HumanSeg人像分割模型
W
wuyefeilin 已提交
2

Z
Zeyu Chen 已提交
3
本教程基于PaddleSeg核心分割网络框架,提供针对人像分割场景从预训练模型、Fine-tune、视频分割预测部署的全流程应用指南。
W
wuyefeilin 已提交
4

Z
Zeyu Chen 已提交
5
HumanSeg提供三个人像分割模型系列:分别是HumanSeg-server、HumanSeg-mobile、HumanSeg-lite,适用于不同的算力场景
C
chenguowei01 已提交
6 7 8 9
HumanSegServer适用于服务端,HumanSegMobile和HumanSegLite适用于移动端。

## 环境依赖

Z
Zeyu Chen 已提交
10 11 12
* Python == 3.5/3.6/3.7
* PaddlePaddle >= 1.7.2

Z
Zeyu Chen 已提交
13
PaddlePaddle的安装可参考[飞桨快速安装](https://www.paddlepaddle.org.cn/install/quick)
C
chenguowei01 已提交
14 15 16 17 18 19

通过以下命令安装python包依赖,请确保在该分支上至少执行过一次以下命令
```shell
$ pip install -r requirements.txt
```

Z
Zeyu Chen 已提交
20 21

## 预训练模型
Z
Zeyu Chen 已提交
22 23
HumanSeg开放了在大规模人像数据上训练的三个预训练模型,满足多种使用场景的需求
| 模型类型 | Checkpoint | Inference Model | Quant Inference Model | 备注 |
C
chenguowei01 已提交
24
| --- | --- | --- | --- | --- |
Z
Zeyu Chen 已提交
25 26 27
| HumanSeg-server | [humanseg_server_ckpt](https://paddleseg.bj.bcebos.com/humanseg/models/humanseg_server.zip) | [humanseg_server_infernce](https://paddleseg.bj.bcebos.com/humanseg/models/humanseg_server_export.zip) | -- | 高精度模型,适用于服务端GPU且背景复杂的人像场景  |
| HumanSeg-mobile | [humanseg_mobile](https://paddleseg.bj.bcebos.com/humanseg/models/humanseg_mobile.zip) | [humanseg_mobile_infernce](https://paddleseg.bj.bcebos.com/humanseg/models/humanseg_mobile_export.zip) | [humanseg_mobile_quant](https://paddleseg.bj.bcebos.com/humanseg/models/humanseg_mobile_quant.zip) | 轻量级模型, 适用于移动端或服务端CPU的前置摄像头场景 |
| HumanSeg-lite | [humanseg_lite](https://paddleseg.bj.bcebos.com/humanseg/models/humanseg_lite.zip) | [humanseg_lite_infernce](https://paddleseg.bj.bcebos.com/humanseg/models/humanseg_lite_export.zip) |  [humanseg_lite_quant](https://paddleseg.bj.bcebos.com/humanseg/models/humanseg_lite_quant.zip) | 超轻量级模型, 适用于手机自拍人像,且有移动端实时分割场景 |
Z
Zeyu Chen 已提交
28 29 30

**NOTE:**
其中Checkpoint为模型权重,用于Fine-tuning场景。
Z
Zeyu Chen 已提交
31

Z
Zeyu Chen 已提交
32
Inference Model和Quant Inference Model为预测部署模型,包含`__model__`计算图结构、`__params__`模型参数和`model.yaml`基础的模型配置信息。
Z
Zeyu Chen 已提交
33

Z
Zeyu Chen 已提交
34
其中Inference Model适用于服务端的CPU和GPU预测场景,Qunat Inference Model为的量化版本,适用于通过Paddle Lite进行移动端等端侧设备部署。更多Paddle Lite部署说明查看[Paddle Lite文档](https://paddle-lite.readthedocs.io/zh/latest/)
C
chenguowei01 已提交
35

Z
Zeyu Chen 已提交
36
执行以下脚本进行HumanSeg预训练模型的下载
C
chenguowei01 已提交
37
```bash
Z
Zeyu Chen 已提交
38
python pretrained_weights/download_pretrained_weights.py
C
chenguowei01 已提交
39 40
```

Z
Zeyu Chen 已提交
41
## 下载测试数据
Z
Zeyu Chen 已提交
42
我们提供了[supervise.ly](https://supervise.ly/)发布人像分割数据集**Supervisely Persons**, 从中随机抽取一小部分并转化成PaddleSeg可直接加载数据格式。通过运行以下代码进行快速下载,其中包含手机前置摄像头的人像测试视频`video_test.mp4`.
C
chenguowei01 已提交
43 44 45 46 47

```bash
python data/download_data.py
```

Z
Zeyu Chen 已提交
48
## 视频流分割快速体验
C
chenguowei01 已提交
49
```bash
Z
Zeyu Chen 已提交
50
# 通过电脑摄像头进行实时分割处理
C
chenguowei01 已提交
51 52
python video_infer.py --model_dir pretrained_weights/humanseg_lite_epxort

Z
Zeyu Chen 已提交
53
# 对人像视频进行分割处理
C
chenguowei01 已提交
54 55
python video_infer.py --model_dir pretrained_weights/humanseg_lite_epxort \
----video_path data/video_test.mp4
C
chenguowei01 已提交
56 57
```

C
chenguowei01 已提交
58
## 训练
Z
Zeyu Chen 已提交
59
使用下述命令基于与训练模型进行Fine-tuning,请确保选用的模型结构`model_type`与模型参数`pretrained_weights`匹配。
C
chenguowei01 已提交
60
```bash
C
chenguowei01 已提交
61
python train.py --model_type HumanSegMobile \
C
chenguowei01 已提交
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
--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 \
--batch_size 8 \
--learning_rate 0.001 \
--num_epochs 10 \
```
其中参数含义如下:
* `--model_type`: 模型类型,可选项为:HumanSegServer、HumanSegMobile和HumanSegLite
* `--save_dir`: 模型保存路径
* `--data_dir`: 数据集路径
* `--train_list`: 训练集列表路径
* `--val_list`: 验证集列表路径
* `--pretrained_weights`: 预训练模型路径
* `--batch_size`: 批大小
* `--learning_rate`: 初始学习率
* `--num_epochs`: 训练轮数

Z
Zeyu Chen 已提交
82
更多命令行帮助可运行下述命令进行查看:
C
chenguowei01 已提交
83 84 85
```bash
python train.py --help
```
Z
Zeyu Chen 已提交
86
**NOTE**
Z
Zeyu Chen 已提交
87
可通过更换`--model_type`变量与对应的`--pretrained_weights`使用不同的模型快速尝试。
C
chenguowei01 已提交
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158

## 评估
使用下述命令进行评估
```bash
python val.py --model_dir output/best_model \
--data_dir data/mini_supervisely \
--val_list data/mini_supervisely/val.txt \
```
其中参数含义如下:
* `--model_dir`: 模型路径
* `--data_dir`: 数据集路径
* `--val_list`: 验证集列表路径

## 预测
使用下述命令进行预测
```bash
python infer.py --model_dir output/best_model \
--data_dir data/mini_supervisely \
--test_list data/mini_supervisely/test.txt
```
其中参数含义如下:
* `--model_dir`: 模型路径
* `--data_dir`: 数据集路径
* `--test_list`: 测试集列表路径

## 模型导出
```bash
python export.py --model_dir output/best_model \
--save_dir output/export
```
其中参数含义如下:
* `--model_dir`: 模型路径
* `--data_dir`: 数据集路径
* `--save_dir`: 导出模型保存路径

## 离线量化
```bash
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
```
其中参数含义如下:
* `--model_dir`: 待量化模型路径
* `--data_dir`: 数据集路径
* `--quant_list`: 量化数据集列表路径,一般直接选择训练集或验证集
* `--save_dir`: 量化模型保存路径

## 在线量化
利用float训练模型进行在线量化。
```bash
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 \
```
其中参数含义如下:
* `--model_type`: 模型类型,可选项为:HumanSegServer、HumanSegMobile和HumanSegLite
* `--save_dir`: 模型保存路径
* `--data_dir`: 数据集路径
* `--train_list`: 训练集列表路径
* `--val_list`: 验证集列表路径
* `--pretrained_weights`: 预训练模型路径,
* `--batch_size`: 批大小
* `--learning_rate`: 初始学习率
* `--num_epochs`: 训练轮数