Skip to content

Commit 50bb5a9

Browse files
authored
Merge pull request #221 from FlyingQianMM/develop_draw
add arm deploy for human segmentation
2 parents 801caf8 + 61d1242 commit 50bb5a9

File tree

4 files changed

+204
-4
lines changed

4 files changed

+204
-4
lines changed

docs/examples/human_segmentation.md

Lines changed: 102 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@
2727
|humanseg_mobile_quant | 1.6M | 24.93ms |
2828

2929
执行以下脚本下载全部的预训练模型:
30+
31+
* 下载PaddleX源码:
32+
33+
```bash
34+
git clone https://github.com/PaddlePaddle/PaddleX
35+
```
36+
37+
* 下载预训练模型的代码位于`PaddleX/examples/human_segmentation`,进入该目录:
38+
39+
```bash
40+
cd PaddleX/examples/human_segmentation
41+
```
42+
43+
* 执行下载
44+
3045
```bash
3146
python pretrain_weights/download_pretrain_weights.py
3247
```
@@ -35,6 +50,8 @@ python pretrain_weights/download_pretrain_weights.py
3550

3651
[supervise.ly](https://supervise.ly/)发布了人像分割数据集**Supervisely Persons**, 本案例从中随机抽取一小部分数据并转化成PaddleX可直接加载的数据格式,运行以下代码可下载该数据、以及手机前置摄像头拍摄的人像测试视频`video_test.mp4`.
3752

53+
* 下载测试数据的代码位于`PaddleX/xamples/human_segmentation`,进入该目录并执行下载:
54+
3855
```bash
3956
python data/download_data.py
4057
```
@@ -49,9 +66,21 @@ python data/download_data.py
4966

5067
安装的相关问题参考[PaddleX安装](../../docs/install.md)
5168

69+
* 下载PaddleX源码:
70+
71+
```bash
72+
git clone https://github.com/PaddlePaddle/PaddleX
73+
```
74+
75+
* 视频流人像分割和背景替换的执行文件均位于`PaddleX/examples/human_segmentation`,进入该目录:
76+
77+
```bash
78+
cd PaddleX/examples/human_segmentation
79+
```
80+
5281
### 光流跟踪辅助的视频流人像分割
5382

54-
本案例将DIS(Dense Inverse Search-basedmethod)光流跟踪算法的预测结果与PaddleX的分割结果进行融合,以此改善视频流人像分割的效果。运行以下代码进行体验:
83+
本案例将DIS(Dense Inverse Search-basedmethod)光流跟踪算法的预测结果与PaddleX的分割结果进行融合,以此改善视频流人像分割的效果。运行以下代码进行体验,以下代码位于`PaddleX/xamples/human_segmentation`
5584

5685
* 通过电脑摄像头进行实时分割处理
5786

@@ -70,7 +99,7 @@ python video_infer.py --model_dir pretrain_weights/humanseg_mobile_inference --v
7099

71100
### 人像背景替换
72101

73-
本案例还实现了人像背景替换功能,根据所选背景对人像的背景画面进行替换,背景可以是一张图片,也可以是一段视频。
102+
本案例还实现了人像背景替换功能,根据所选背景对人像的背景画面进行替换,背景可以是一张图片,也可以是一段视频。人像背景替换的代码位于`PaddleX/xamples/human_segmentation`,进入该目录并执行:
74103

75104
* 通过电脑摄像头进行实时背景替换处理, 通过'--background_video_path'传入背景视频
76105
```bash
@@ -105,6 +134,18 @@ python bg_replace.py --model_dir pretrain_weights/humanseg_mobile_inference --im
105134

106135
安装的相关问题参考[PaddleX安装](../../docs/install.md)
107136

137+
* 下载PaddleX源码:
138+
139+
```bash
140+
git clone https://github.com/PaddlePaddle/PaddleX
141+
```
142+
143+
* 人像分割训练、评估、预测、模型导出、离线量化的执行文件均位于`PaddleX/examples/human_segmentation`,进入该目录:
144+
145+
```bash
146+
cd PaddleX/examples/human_segmentation
147+
```
148+
108149
### 模型训练
109150

110151
使用下述命令进行基于预训练模型的模型训练,请确保选用的模型结构`model_type`与模型参数`pretrain_weights`匹配。如果不需要本案例提供的测试数据,可更换数据、选择合适的模型并调整训练参数。
@@ -203,3 +244,62 @@ python quant_offline.py --model_dir output/best_model \
203244
* `--image_shape`: 网络输入图像大小(w, h)
204245

205246
## Paddle-Lite移动端部署
247+
248+
本案例将人像分割模型在移动端进行部署,部署流程展示如下,通用的移动端部署流程参见[PaddleLite移动端部署](../../docs/deploy/paddlelite/android.md)
249+
250+
### 1. 将PaddleX模型导出为inference模型
251+
252+
本案例使用humanseg_mobile_quant预训练模型,该模型已经是inference模型,不需要再执行模型导出步骤。如果不使用预训练模型,则执行上一章节`模型训练`中的`模型导出`将自己训练的模型导出为inference格式。
253+
254+
### 2. 将inference模型优化为PaddleLite模型
255+
256+
下载并解压 [模型优化工具opt](https://bj.bcebos.com/paddlex/deploy/lite/model_optimize_tool_11cbd50e.tar.gz),进入模型优化工具opt所在路径后,执行以下命令:
257+
258+
``` bash
259+
./opt --model_file=<model_path> \
260+
--param_file=<param_path> \
261+
--valid_targets=arm \
262+
--optimize_out_type=naive_buffer \
263+
--optimize_out=model_output_name
264+
```
265+
266+
| 参数 | 说明 |
267+
| ---- | ---- |
268+
| --model_file | 导出inference模型中包含的网络结构文件:`__model__`所在的路径|
269+
| --param_file | 导出inference模型中包含的参数文件:`__params__`所在的路径|
270+
| --valid_targets |指定模型可执行的backend,这里请指定为`arm`|
271+
| --optimize_out_type | 输出模型类型,目前支持两种类型:protobuf和naive_buffer,其中naive_buffer是一种更轻量级的序列化/反序列化,这里请指定为`naive_buffer`|
272+
| --optimize_out | 输出模型的名称 |
273+
274+
更详细的使用方法和参数含义请参考: [使用opt转化模型](https://paddle-lite.readthedocs.io/zh/latest/user_guides/opt/opt_bin.html)
275+
276+
### 3. 移动端预测
277+
278+
PaddleX提供了基于PaddleX Android SDK的安卓demo,可供用户体验图像分类、目标检测、实例分割和语义分割,该demo位于`PaddleX/deploy/lite/android/demo`,用户将模型、配置文件和测试图片拷贝至该demo下进行预测。
279+
280+
#### 3.1 前置依赖
281+
282+
* Android Studio 3.4
283+
* Android手机或开发板
284+
285+
#### 3.2 拷贝模型、配置文件和测试图片
286+
287+
* 将Lite模型(.nb文件)拷贝到`PaddleX/deploy/lite/android/demo/app/src/main/assets/model/`目录下, 根据.nb文件的名字,修改文件`PaddleX/deploy/lite/android/demo/app/src/main/res/values/strings.xml`中的`MODEL_PATH_DEFAULT`
288+
289+
* 将配置文件(.yml文件)拷贝到`PaddleX/deploy/lite/android/demo/app/src/main/assets/config/`目录下,根据.yml文件的名字,修改文件`PaddleX/deploy/lite/android/demo/app/src/main/res/values/strings.xml`中的`YAML_PATH_DEFAULT`
290+
291+
* 将测试图片拷贝到`PaddleX/deploy/lite/android/demo/app/src/main/assets/images/`目录下,根据图片文件的名字,修改文件`PaddleX/deploy/lite/android/demo/app/src/main/res/values/strings.xml`中的`IMAGE_PATH_DEFAULT`
292+
293+
#### 3.3 导入工程并运行
294+
295+
* 打开Android Studio,在"Welcome to Android Studio"窗口点击"Open an existing Android Studio project",在弹出的路径选择窗口中进入`PaddleX/deploy/lite/android/demo`目录,然后点击右下角的"Open"按钮,导入工程;
296+
297+
* 通过USB连接Android手机或开发板;
298+
299+
* 工程编译完成后,点击菜单栏的Run->Run 'App'按钮,在弹出的"Select Deployment Target"窗口选择已经连接的Android设备,然后点击"OK"按钮;
300+
301+
* 运行成功后,Android设备将加载一个名为PaddleX Demo的App,默认会加载一个测试图片,同时还支持拍照和从图库选择照片进行预测。
302+
303+
测试图片及其分割结果如下所示:
304+
305+
![](./images/beauty.png)

docs/examples/images/beauty.png

578 KB
Loading

examples/human_segmentation/README.md

Lines changed: 102 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,21 @@
3535
|humanseg_mobile_quant | 1.6M | 24.93ms |
3636

3737
执行以下脚本下载全部的预训练模型:
38+
39+
* 下载PaddleX源码:
40+
41+
```bash
42+
git clone https://github.com/PaddlePaddle/PaddleX
43+
```
44+
45+
* 下载预训练模型的代码位于`PaddleX/examples/human_segmentation`,进入该目录:
46+
47+
```bash
48+
cd PaddleX/examples/human_segmentation
49+
```
50+
51+
* 执行下载
52+
3853
```bash
3954
python pretrain_weights/download_pretrain_weights.py
4055
```
@@ -43,6 +58,8 @@ python pretrain_weights/download_pretrain_weights.py
4358

4459
[supervise.ly](https://supervise.ly/)发布了人像分割数据集**Supervisely Persons**, 本案例从中随机抽取一小部分数据并转化成PaddleX可直接加载的数据格式,运行以下代码可下载该数据、以及手机前置摄像头拍摄的人像测试视频`video_test.mp4`.
4560

61+
* 下载测试数据的代码位于`PaddleX/xamples/human_segmentation`,进入该目录并执行下载:
62+
4663
```bash
4764
python data/download_data.py
4865
```
@@ -57,9 +74,21 @@ python data/download_data.py
5774

5875
安装的相关问题参考[PaddleX安装](../../docs/install.md)
5976

77+
* 下载PaddleX源码:
78+
79+
```bash
80+
git clone https://github.com/PaddlePaddle/PaddleX
81+
```
82+
83+
* 视频流人像分割和背景替换的执行文件均位于`PaddleX/examples/human_segmentation`,进入该目录:
84+
85+
```bash
86+
cd PaddleX/examples/human_segmentation
87+
```
88+
6089
### 光流跟踪辅助的视频流人像分割
6190

62-
本案例将DIS(Dense Inverse Search-basedmethod)光流跟踪算法的预测结果与PaddleX的分割结果进行融合,以此改善视频流人像分割的效果。运行以下代码进行体验:
91+
本案例将DIS(Dense Inverse Search-basedmethod)光流跟踪算法的预测结果与PaddleX的分割结果进行融合,以此改善视频流人像分割的效果。运行以下代码进行体验,以下代码位于`PaddleX/xamples/human_segmentation`
6392

6493
* 通过电脑摄像头进行实时分割处理
6594

@@ -78,7 +107,7 @@ python video_infer.py --model_dir pretrain_weights/humanseg_mobile_inference --v
78107

79108
### 人像背景替换
80109

81-
本案例还实现了人像背景替换功能,根据所选背景对人像的背景画面进行替换,背景可以是一张图片,也可以是一段视频。
110+
本案例还实现了人像背景替换功能,根据所选背景对人像的背景画面进行替换,背景可以是一张图片,也可以是一段视频。人像背景替换的代码位于`PaddleX/xamples/human_segmentation`,进入该目录并执行:
82111

83112
* 通过电脑摄像头进行实时背景替换处理, 通过'--background_video_path'传入背景视频
84113
```bash
@@ -115,6 +144,18 @@ python bg_replace.py --model_dir pretrain_weights/humanseg_mobile_inference --im
115144

116145
安装的相关问题参考[PaddleX安装](../../docs/install.md)
117146

147+
* 下载PaddleX源码:
148+
149+
```bash
150+
git clone https://github.com/PaddlePaddle/PaddleX
151+
```
152+
153+
* 人像分割训练、评估、预测、模型导出、离线量化的执行文件均位于`PaddleX/examples/human_segmentation`,进入该目录:
154+
155+
```bash
156+
cd PaddleX/examples/human_segmentation
157+
```
158+
118159
### 模型训练
119160

120161
使用下述命令进行基于预训练模型的模型训练,请确保选用的模型结构`model_type`与模型参数`pretrain_weights`匹配。如果不需要本案例提供的测试数据,可更换数据、选择合适的模型并调整训练参数。
@@ -213,3 +254,62 @@ python quant_offline.py --model_dir output/best_model \
213254
* `--image_shape`: 网络输入图像大小(w, h)
214255

215256
## <h2 id="4">Paddle-Lite移动端部署</h2>
257+
258+
本案例将人像分割模型在移动端进行部署,部署流程展示如下,通用的移动端部署流程参见[PaddleLite移动端部署](../../docs/deploy/paddlelite/android.md)
259+
260+
### 1. 将PaddleX模型导出为inference模型
261+
262+
本案例使用humanseg_mobile_quant预训练模型,该模型已经是inference模型,不需要再执行模型导出步骤。如果不使用预训练模型,则执行上一章节`模型训练`中的`模型导出`将自己训练的模型导出为inference格式。
263+
264+
### 2. 将inference模型优化为PaddleLite模型
265+
266+
下载并解压 [模型优化工具opt](https://bj.bcebos.com/paddlex/deploy/lite/model_optimize_tool_11cbd50e.tar.gz),进入模型优化工具opt所在路径后,执行以下命令:
267+
268+
``` bash
269+
./opt --model_file=<model_path> \
270+
--param_file=<param_path> \
271+
--valid_targets=arm \
272+
--optimize_out_type=naive_buffer \
273+
--optimize_out=model_output_name
274+
```
275+
276+
| 参数 | 说明 |
277+
| ---- | ---- |
278+
| --model_file | 导出inference模型中包含的网络结构文件:`__model__`所在的路径|
279+
| --param_file | 导出inference模型中包含的参数文件:`__params__`所在的路径|
280+
| --valid_targets |指定模型可执行的backend,这里请指定为`arm`|
281+
| --optimize_out_type | 输出模型类型,目前支持两种类型:protobuf和naive_buffer,其中naive_buffer是一种更轻量级的序列化/反序列化,这里请指定为`naive_buffer`|
282+
| --optimize_out | 输出模型的名称 |
283+
284+
更详细的使用方法和参数含义请参考: [使用opt转化模型](https://paddle-lite.readthedocs.io/zh/latest/user_guides/opt/opt_bin.html)
285+
286+
### 3. 移动端预测
287+
288+
PaddleX提供了基于PaddleX Android SDK的安卓demo,可供用户体验图像分类、目标检测、实例分割和语义分割,该demo位于`PaddleX/deploy/lite/android/demo`,用户将模型、配置文件和测试图片拷贝至该demo下进行预测。
289+
290+
#### 3.1 前置依赖
291+
292+
* Android Studio 3.4
293+
* Android手机或开发板
294+
295+
#### 3.2 拷贝模型、配置文件和测试图片
296+
297+
* 将Lite模型(.nb文件)拷贝到`PaddleX/deploy/lite/android/demo/app/src/main/assets/model/`目录下, 根据.nb文件的名字,修改文件`PaddleX/deploy/lite/android/demo/app/src/main/res/values/strings.xml`中的`MODEL_PATH_DEFAULT`
298+
299+
* 将配置文件(.yml文件)拷贝到`PaddleX/deploy/lite/android/demo/app/src/main/assets/config/`目录下,根据.yml文件的名字,修改文件`PaddleX/deploy/lite/android/demo/app/src/main/res/values/strings.xml`中的`YAML_PATH_DEFAULT`
300+
301+
* 将测试图片拷贝到`PaddleX/deploy/lite/android/demo/app/src/main/assets/images/`目录下,根据图片文件的名字,修改文件`PaddleX/deploy/lite/android/demo/app/src/main/res/values/strings.xml`中的`IMAGE_PATH_DEFAULT`
302+
303+
#### 3.3 导入工程并运行
304+
305+
* 打开Android Studio,在"Welcome to Android Studio"窗口点击"Open an existing Android Studio project",在弹出的路径选择窗口中进入`PaddleX/deploy/lite/android/demo`目录,然后点击右下角的"Open"按钮,导入工程;
306+
307+
* 通过USB连接Android手机或开发板;
308+
309+
* 工程编译完成后,点击菜单栏的Run->Run 'App'按钮,在弹出的"Select Deployment Target"窗口选择已经连接的Android设备,然后点击"OK"按钮;
310+
311+
* 运行成功后,Android设备将加载一个名为PaddleX Demo的App,默认会加载一个测试图片,同时还支持拍照和从图库选择照片进行预测。
312+
313+
测试图片及其分割结果如下所示:
314+
315+
![](./data/beauty.png)
578 KB
Loading

0 commit comments

Comments
 (0)