提交 b96c8474 编写于 作者: C chenguowei01

Merge branch 'develop' of https://github.com/PaddlePaddle/PaddleSeg into humanseg

# PaddleSeg 图像分割库 # PaddleSeg
[![Build Status](https://travis-ci.org/PaddlePaddle/PaddleSeg.svg?branch=master)](https://travis-ci.org/PaddlePaddle/PaddleSeg) [![Build Status](https://travis-ci.org/PaddlePaddle/PaddleSeg.svg?branch=master)](https://travis-ci.org/PaddlePaddle/PaddleSeg)
[![License](https://img.shields.io/badge/license-Apache%202-blue.svg)](LICENSE) [![License](https://img.shields.io/badge/license-Apache%202-blue.svg)](LICENSE)
[![Version](https://img.shields.io/github/release/PaddlePaddle/PaddleSeg.svg)](https://github.com/PaddlePaddle/PaddleSeg/releases) [![Version](https://img.shields.io/github/release/PaddlePaddle/PaddleSeg.svg)](https://github.com/PaddlePaddle/PaddleSeg/releases)
![python version](https://img.shields.io/badge/python-3.6+-orange.svg)
![support os](https://img.shields.io/badge/os-linux%2C%20win%2C%20mac-yellow.svg)
## 简介 ## 简介
PaddleSeg是基于[PaddlePaddle](https://www.paddlepaddle.org.cn)开发的端到端图像分割开发套件,覆盖了DeepLabv3+, U-Net, ICNet, PSPNet, HRNet, Fast-SCNN等主流分割网络。通过模块化的设计,以配置化方式驱动模型组合,帮助用户更便捷地完成从训练到部署的全流程图像分割应用。 PaddleSeg是基于[PaddlePaddle](https://www.paddlepaddle.org.cn)开发的端到端图像分割开发套件,覆盖了DeepLabv3+, U-Net, ICNet, PSPNet, HRNet, Fast-SCNN等主流分割网络。通过模块化的设计,以配置化方式驱动模型组合,帮助开发者更便捷地完成从训练到部署的全流程图像分割应用。
</br>
- [特点](#特点) - [特点](#特点)
- [安装](#安装) - [安装](#安装)
...@@ -23,8 +23,6 @@ PaddleSeg是基于[PaddlePaddle](https://www.paddlepaddle.org.cn)开发的端到 ...@@ -23,8 +23,6 @@ PaddleSeg是基于[PaddlePaddle](https://www.paddlepaddle.org.cn)开发的端到
- [更新日志](#更新日志) - [更新日志](#更新日志)
- [贡献代码](#贡献代码) - [贡献代码](#贡献代码)
</br>
## 特点 ## 特点
- **丰富的数据增强** - **丰富的数据增强**
...@@ -45,7 +43,7 @@ PaddleSeg支持多进程I/O、多卡并行、跨卡Batch Norm同步等训练加 ...@@ -45,7 +43,7 @@ PaddleSeg支持多进程I/O、多卡并行、跨卡Batch Norm同步等训练加
- **产业实践案例** - **产业实践案例**
PaddleSeg提供大量真实产业实践案例,如人像分割、表计检测、遥感分割、人体解析,工业质检等产业实践案例,助理开发者更快落地深度学习图像分割技术。 PaddleSeg提供丰富地产业实践案例,如[人像分割](./contrib/HumanSeg)[工业表计检测](./contrib/MechanicalIndustryMeter)[遥感分割](./contrib/RemoteSensing)[人体解析](contrib/ACE2P)[工业质检](https://aistudio.baidu.com/aistudio/projectdetail/184392)等产业实践案例,助力开发者更便捷地落地图像分割技术。
## 安装 ## 安装
...@@ -53,7 +51,7 @@ PaddleSeg提供大量真实产业实践案例,如人像分割、表计检测 ...@@ -53,7 +51,7 @@ PaddleSeg提供大量真实产业实践案例,如人像分割、表计检测
版本要求 版本要求
* PaddlePaddle >= 1.7.0 * PaddlePaddle >= 1.7.0
* Python 2.7 or 3.5+ * Python >= 3.5+
由于图像分割模型计算开销大,推荐在GPU版本的PaddlePaddle下使用PaddleSeg. 由于图像分割模型计算开销大,推荐在GPU版本的PaddlePaddle下使用PaddleSeg.
``` ```
...@@ -74,8 +72,6 @@ cd PaddleSeg ...@@ -74,8 +72,6 @@ cd PaddleSeg
pip install -r requirements.txt pip install -r requirements.txt
``` ```
</br>
## 使用教程 ## 使用教程
我们提供了一系列的使用教程,来说明如何使用PaddleSeg完成语义分割模型的训练、评估、部署。 我们提供了一系列的使用教程,来说明如何使用PaddleSeg完成语义分割模型的训练、评估、部署。
...@@ -128,8 +124,6 @@ pip install -r requirements.txt ...@@ -128,8 +124,6 @@ pip install -r requirements.txt
|人像分割|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/188833)| |人像分割|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/188833)|
|PaddleSeg特色垂类模型|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/226710)| |PaddleSeg特色垂类模型|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/226710)|
</br>
## FAQ ## FAQ
#### Q: 安装requirements.txt指定的依赖包时,部分包提示找不到? #### Q: 安装requirements.txt指定的依赖包时,部分包提示找不到?
...@@ -152,26 +146,27 @@ python pdseg/train.py --cfg xxx.yaml TRAIN.RESUME_MODEL_DIR /PATH/TO/MODEL_CKPT/ ...@@ -152,26 +146,27 @@ python pdseg/train.py --cfg xxx.yaml TRAIN.RESUME_MODEL_DIR /PATH/TO/MODEL_CKPT/
A: 降低Batch size,使用Group Norm策略;请注意训练过程中当`DEFAULT_NORM_TYPE`选择`bn`时,为了Batch Norm计算稳定性,batch size需要满足>=2 A: 降低Batch size,使用Group Norm策略;请注意训练过程中当`DEFAULT_NORM_TYPE`选择`bn`时,为了Batch Norm计算稳定性,batch size需要满足>=2
#### Q: 出现错误 ModuleNotFoundError: No module named 'paddle.fluid.contrib.mixed_precision'
A: 请将PaddlePaddle升级至1.5.2版本或以上。
</br>
## 交流与反馈 ## 交流与反馈
* 欢迎您通过[Github Issues](https://github.com/PaddlePaddle/PaddleSeg/issues)来提交问题、报告与建议 * 欢迎您通过[Github Issues](https://github.com/PaddlePaddle/PaddleSeg/issues)来提交问题、报告与建议
* 微信公众号:飞桨PaddlePaddle * 微信公众号:飞桨PaddlePaddle
* QQ群: 796771754 * QQ群: 703252161
<p align="center"><img width="200" height="200" src="https://user-images.githubusercontent.com/45189361/64117959-1969de80-cdc9-11e9-84f7-e1c2849a004c.jpeg"/>&#8194;&#8194;&#8194;&#8194;&#8194;<img width="200" height="200" margin="500" src="./docs/imgs/qq_group2.png"/></p> <p align="center"><img width="200" height="200" src="https://user-images.githubusercontent.com/45189361/64117959-1969de80-cdc9-11e9-84f7-e1c2849a004c.jpeg"/>&#8194;&#8194;&#8194;&#8194;&#8194;<img width="200" height="200" margin="500" src="./docs/imgs/qq_group2.png"/></p>
<p align="center"> &#8194;&#8194;&#8194;微信公众号&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;官方技术交流QQ群</p> <p align="center"> &#8194;&#8194;&#8194;微信公众号&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;官方技术交流QQ群</p>
## 更新日志 ## 更新日志
* 2020.05.12
**`v0.5.0`**
* 全面升级[HumanSeg人像分割模型](./contrib/HumanSeg),新增超轻量级人像分割模型HumanSeg-lite支持移动端实时人像分割处理,并提供基于光流的视频分割后处理提升分割流畅性。
* 新增[气象遥感分割方案](./contrib/RemoteSensing),支持积雪分割、云分割等气象遥感场景。
* 新增[Lovasz Loss](docs/lovasz_loss.md)
* 2020.02.25 * 2020.02.25
**`v0.4.0`** **`v0.4.0`**
* 新增适用于实时场景且不需要预训练模型的分割网络Fast-SCNN,提供基于Cityscapes的[预训练模型](./docs/model_zoo.md)1个 * 新增适用于实时场景且不需要预训练模型的分割网络Fast-SCNN,提供基于Cityscapes的[预训练模型](./docs/model_zoo.md)1个
* 新增LaneNet车道线检测网络,提供[预训练模型](https://github.com/PaddlePaddle/PaddleSeg/tree/release/v0.4.0/contrib/LaneNet#%E4%B8%83-%E5%8F%AF%E8%A7%86%E5%8C%96)一个 * 新增LaneNet车道线检测网络,提供[预训练模型](https://github.com/PaddlePaddle/PaddleSeg/tree/release/v0.4.0/contrib/LaneNet#%E4%B8%83-%E5%8F%AF%E8%A7%86%E5%8C%96)一个
* 新增基于PaddleSlim的分割库压缩策略([量化](./slim/quantization/README.md), [蒸馏](./slim/distillation/README.md), [剪枝](./slim/prune/README.md), [搜索](./slim/nas/README.md)) * 新增基于PaddleSlim的分割库压缩策略([量化](./slim/quantization/README.md), [蒸馏](./slim/distillation/README.md), [剪枝](./slim/prune/README.md), [搜索](./slim/nas/README.md))
...@@ -207,4 +202,4 @@ A: 请将PaddlePaddle升级至1.5.2版本或以上。 ...@@ -207,4 +202,4 @@ A: 请将PaddlePaddle升级至1.5.2版本或以上。
## 贡献代码 ## 贡献代码
我们非常欢迎您为PaddleSeg贡献代码或者提供使用建议。如果您可以修复某个issue或者增加一个新功能,欢迎给我们提交pull requests. 我们非常欢迎您为PaddleSeg贡献代码或者提供使用建议。如果您可以修复某个issue或者增加一个新功能,欢迎给我们提交Pull Requests.
# HumanSeg人像分割模型 # HumanSeg人像分割模型
本教程基于PaddleSeg核心分割网络,提供针对人像分割场景从预训练模型、Fine-tune、视频分割预测部署的全流程应用指南。 本教程基于PaddleSeg核心分割网络,提供针对人像分割场景从预训练模型、Fine-tune、视频分割预测部署的全流程应用指南。最新发布HumanSeg-lite模型超轻量级人像分割模型,支持移动端场景的实时分割。
## 环境依赖 ## 环境依赖
...@@ -14,21 +14,20 @@ PaddlePaddle的安装可参考[飞桨快速安装](https://www.paddlepaddle.org. ...@@ -14,21 +14,20 @@ PaddlePaddle的安装可参考[飞桨快速安装](https://www.paddlepaddle.org.
$ pip install -r requirements.txt $ pip install -r requirements.txt
``` ```
## 预训练模型 ## 预训练模型
HumanSeg开放了在大规模人像数据上训练的三个预训练模型,满足多种使用场景的需求 HumanSeg开放了在大规模人像数据上训练的三个预训练模型,满足多种使用场景的需求
| 模型类型 | Checkpoint | Inference Model | Quant Inference Model | 备注 | | 模型类型 | Checkpoint | Inference Model | Quant Inference Model | 备注 |
| --- | --- | --- | --- | --- | | --- | --- | --- | --- | --- |
| 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-server | [humanseg_server_ckpt](https://paddleseg.bj.bcebos.com/humanseg/models/humanseg_server.zip) | [humanseg_server_export](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-mobile | [humanseg_mobile_ckpt](https://paddleseg.bj.bcebos.com/humanseg/models/humanseg_mobile.zip) | [humanseg_mobile_export](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) | 超轻量级模型, 适用于手机自拍人像,且有移动端实时分割场景 | | HumanSeg-lite | [humanseg_lite](https://paddleseg.bj.bcebos.com/humanseg/models/humanseg_lite.zip) | [humanseg_lite_export](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) | 超轻量级模型, 适用于手机自拍人像,且有移动端实时分割场景 |
**NOTE:** **NOTE:**
其中Checkpoint为模型权重,用于Fine-tuning场景。 其中Checkpoint为模型权重,用于Fine-tuning场景。
Inference Model和Quant Inference Model为预测部署模型,包含`__model__`计算图结构、`__params__`模型参数和`model.yaml`基础的模型配置信息。 * Inference Model和Quant Inference Model为预测部署模型,包含`__model__`计算图结构、`__params__`模型参数和`model.yaml`基础的模型配置信息。
其中Inference Model适用于服务端的CPU和GPU预测场景,Qunat Inference Model为的量化版本,适用于通过Paddle Lite进行移动端等端侧设备部署。更多Paddle Lite部署说明查看[Paddle Lite文档](https://paddle-lite.readthedocs.io/zh/latest/) * 其中Inference Model适用于服务端的CPU和GPU预测部署,Qunat Inference Model为量化版本,适用于通过Paddle Lite进行移动端等端侧设备部署。更多Paddle Lite部署说明查看[Paddle Lite文档](https://paddle-lite.readthedocs.io/zh/latest/)
执行以下脚本进行HumanSeg预训练模型的下载 执行以下脚本进行HumanSeg预训练模型的下载
```bash ```bash
...@@ -42,16 +41,18 @@ python pretrained_weights/download_pretrained_weights.py ...@@ -42,16 +41,18 @@ python pretrained_weights/download_pretrained_weights.py
python data/download_data.py python data/download_data.py
``` ```
## 视频流分割快速体验 ## 快速体验视频流人像分割
```bash ```bash
# 通过电脑摄像头进行实时分割处理 # 通过电脑摄像头进行实时分割处理
python video_infer.py --model_dir pretrained_weights/humanseg_lite_epxort python video_infer.py --model_dir pretrained_weights/humanseg_lite_export
# 对人像视频进行分割处理 # 对人像视频进行分割处理
python video_infer.py --model_dir pretrained_weights/humanseg_lite_epxort \ python video_infer.py --model_dir pretrained_weights/humanseg_lite_export --video_path data/video_test.mp4
--video_path data/video_test.mp4
``` ```
**NOTE**:
视频分割处理时间需要几分钟,请耐心等待。
## 训练 ## 训练
使用下述命令基于与训练模型进行Fine-tuning,请确保选用的模型结构`model_type`与模型参数`pretrained_weights`匹配。 使用下述命令基于与训练模型进行Fine-tuning,请确保选用的模型结构`model_type`与模型参数`pretrained_weights`匹配。
...@@ -61,7 +62,7 @@ python train.py --model_type HumanSegMobile \ ...@@ -61,7 +62,7 @@ python train.py --model_type HumanSegMobile \
--data_dir data/mini_supervisely \ --data_dir data/mini_supervisely \
--train_list data/mini_supervisely/train.txt \ --train_list data/mini_supervisely/train.txt \
--val_list data/mini_supervisely/val.txt \ --val_list data/mini_supervisely/val.txt \
--pretrained_weights pretrained_weights/humanseg_Mobile \ --pretrained_weights pretrained_weights/humanseg_mobile \
--batch_size 8 \ --batch_size 8 \
--learning_rate 0.001 \ --learning_rate 0.001 \
--num_epochs 10 --num_epochs 10
...@@ -89,7 +90,7 @@ python train.py --help ...@@ -89,7 +90,7 @@ python train.py --help
```bash ```bash
python val.py --model_dir output/best_model \ python val.py --model_dir output/best_model \
--data_dir data/mini_supervisely \ --data_dir data/mini_supervisely \
--val_list data/mini_supervisely/val.txt \ --val_list data/mini_supervisely/val.txt
``` ```
其中参数含义如下: 其中参数含义如下:
* `--model_dir`: 模型路径 * `--model_dir`: 模型路径
...@@ -142,7 +143,7 @@ python quant_online.py --model_type HumanSegMobile \ ...@@ -142,7 +143,7 @@ python quant_online.py --model_type HumanSegMobile \
--pretrained_weights output/best_model \ --pretrained_weights output/best_model \
--batch_size 2 \ --batch_size 2 \
--learning_rate 0.001 \ --learning_rate 0.001 \
--num_epochs 2 \ --num_epochs 2
``` ```
其中参数含义如下: 其中参数含义如下:
* `--model_type`: 模型类型,可选项为:HumanSegServer、HumanSegMobile和HumanSegLite * `--model_type`: 模型类型,可选项为:HumanSegServer、HumanSegMobile和HumanSegLite
......
pyyaml >= 5.1
visualdl == 2.0.0-alpha.1 visualdl == 2.0.0-alpha.1
Pillow paddleslim
tqdm
# PaddleSeg 产业实践分割模型 # PaddleSeg 产业实践
提供基于PaddlSeg最新的分割特色模型: 提供基于PaddlSeg最新的分割特色模型:
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
- [工业表盘分割](#工业表盘分割) - [工业表盘分割](#工业表盘分割)
- [AIStudio在线教程](#AIStudio在线教程) - [AIStudio在线教程](#AIStudio在线教程)
## 人像分割HumanSeg ## 人像分割 HumanSeg
HumanSeg系列全新升级,提供三个适用于不同场景,包含适用于移动端实时分割场景的模型`HumanSeg-lite`,提供了包含光流的后处理的优化,使人像分割在视频场景中更加顺畅,更多详情请参考[HumanSeg](./HumanSeg) HumanSeg系列全新升级,提供三个适用于不同场景,包含适用于移动端实时分割场景的模型`HumanSeg-lite`,提供了包含光流的后处理的优化,使人像分割在视频场景中更加顺畅,更多详情请参考[HumanSeg](./HumanSeg)
...@@ -18,7 +18,7 @@ HumanSeg系列全新升级,提供三个适用于不同场景,包含适用于 ...@@ -18,7 +18,7 @@ HumanSeg系列全新升级,提供三个适用于不同场景,包含适用于
人体解析(Human Parsing)是细粒度的语义分割任务,旨在识别像素级别的人类图像的组成部分(例如,身体部位和服装)。ACE2P通过融合底层特征、全局上下文信息和边缘细节,端到端训练学习人体解析任务。以ACE2P单人人体解析网络为基础的解决方案在CVPR2019第三届LIP挑战赛中赢得了全部三个人体解析任务的第一名 人体解析(Human Parsing)是细粒度的语义分割任务,旨在识别像素级别的人类图像的组成部分(例如,身体部位和服装)。ACE2P通过融合底层特征、全局上下文信息和边缘细节,端到端训练学习人体解析任务。以ACE2P单人人体解析网络为基础的解决方案在CVPR2019第三届LIP挑战赛中赢得了全部三个人体解析任务的第一名
## ACE2P模型框架图 #### ACE2P模型框架图
![](./ACE2P/imgs/net.jpg) ![](./ACE2P/imgs/net.jpg)
PaddleSeg提供了ACE2P获得比赛冠军的预训练模型,更多详情请点击[ACE2P](./ACE2P) PaddleSeg提供了ACE2P获得比赛冠军的预训练模型,更多详情请点击[ACE2P](./ACE2P)
...@@ -37,7 +37,7 @@ PaddleSeg提供了基于LaneNet的车道线分割模型,更多详情请点击[ ...@@ -37,7 +37,7 @@ PaddleSeg提供了基于LaneNet的车道线分割模型,更多详情请点击[
### 1. 模型结构 ### 1. 模型结构
unet U-Net
### 2. 数据准备 ### 2. 数据准备
...@@ -47,7 +47,6 @@ unet ...@@ -47,7 +47,6 @@ unet
python ./contrib/MechanicalIndustryMeter/download_mini_mechanical_industry_meter.py python ./contrib/MechanicalIndustryMeter/download_mini_mechanical_industry_meter.py
``` ```
### 3. 下载预训练模型 ### 3. 下载预训练模型
``` ```
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册