近日,百度飞桨发布了工业级图像分割模型库PaddleSeg,给开发者带来诚意满满的三重超值惊喜:
1、一次性开源15个官方支持的图像分割领域主流模型,大礼包带来大满足。
2、多卡训练速度比对标产品快两倍,工业级部署能力,时间节省超痛快。
3、揭秘包揽了CVPR2019 LIP挑战赛人体解析任务大满贯的三冠王ACE2P预测模型关键技术,一步体验世界领先水平效果。
2. 图像分割是什么?
https://github.com/PaddlePaddle/PaddleSeg/blob/master/docs/model_zoo.md
其中,最重要的三种模型介绍如下:
● MobileNetv2:适用于移动端部署或者对分割预测速度有较高要求的场景,PaddleSeg 还提供从 0.5x 到 2.0x 不同 DepthMultiplier 的模型。
● Xception:DeepLabv3+原始实现的 backbone 网络,兼顾了精度和性能,适用于服务端部署。PaddleSeg 提供了 41/65/71 三种不同深度的预训练模型。
ICNet(Image Cascade Network)主要用于图像实时语义分割。相较于其它压缩计算的方法,ICNet 既考虑了速度,也考虑了准确性。ICNet 的主要思想是将输入图像变换为不同的分辨率,然后用不同计算复杂度的子网络计算不同分辨率的输入,然后将结果合并。ICNet 由三个子网络组成,计算复杂度高的网络处理低分辨率输入,计算复杂度低的网络处理分辨率高的网络,通过这种方式在高分辨率图像的准确性和低复杂度网络的效率之间获得平衡。ICNet 的网络结构如下:
3.2. 多卡训练速度比对标产品快两倍,工业级部署能力,时间节省超痛快
与对标产品相比,PaddleSeg 在训练速度、GPU 利用率、显存开销和 Max Batch Size 等方面都有着非常显著的优势。详细的对比数据如下图:
测试环境与模型:
● GPU: Nvidia Tesla V100 16G * 8
● CPU: Intel(R) Xeon(R) Gold 6148
● Model: DeepLabv3+ with Xception65 backbone
● 高性能 C++预测库:支持 Windows 跨平台兼容,支持 Operator 算子融合、TensorRT 加速、MKL-DNN 等计算图优化。
● Paddle Serving 服务化部署:支持高并发预测,支持单服务多模型,还支持模型热更新和 A/B Test。
3.3. 提供包揽 CVPR2019 LIP 挑战赛人体解析任务大满贯三冠王 ACE2P 模型,带你一步体验世界领先水平效果。
● Single-Person Human Parsing Track
● Multi-Person Human Parsing Track
● Video Multi-Person Human Parsing Track
CVPR2019 LIP Parsing 的三项榜单全部被百度的 ACE2P 霸榜:
ACE2P 冠军预测模型在 PaddleHub 版本的快速体验命令行直接使用:
更多内容请访问:
4.2. 应用场景二:地块分割
● 一个是准确度。由于涉及到车辆行驶的安全性,车道线分割对准确度的要求非常非常高的。
● 另一个是实时性。在车辆高速行驶的过程中,必须快速地、实时地提供车道线分割结果。
4.4. 应用场景四:人像分割
有了这个技术,一寸照片换底色,蓝色、白色、红色轻松切换。
基于 PaddleSeg 实现的人像分割模型,mIoU 指标已经达到了 0.93 以上,并且已经在百度大脑AI开放平台上线,合作企业高达 60 余家,是真正的产业利器。
● 将 ResNet 的 7x7 的卷积层换成了 3 个 3x3 的卷积层,增加网络深度,加固网络的底层特征。
● 使用 stride=2 的卷积层替换掉网络中所有的池化层,让下采样过程变得可学习。
● 在 Renset 结构的 stage=5 中加入了 dilation,扩大网络的感受野,增加网络的有效作用区域,使得模型特征更佳。
● 加入了 pyramid pooling 结构,保证了一个全局的 context 信息的提取。
● Lovasz loss 是一个多类的 IOU loss,是针对分割的评价指标 IOU 专门设计的 loss,更加适合分割任务。
● Lovasz loss 配合 cross entroy loss 使用,整体的效果提升了 1.3 个点。
● 在开始学习的时候我们先使用 warmup 的学习策略,使得一开始时模型的优化更加容易收敛,替换掉常用的 poly 学习策略,引入 cosine decay 的方法,使得在训练快结束时学习率不至于过小,而导致网络不能收敛到最佳值。
● 整个过程学习率曲线可视化如下:
5.4. 加入 edge 模块,提升 1.4 个点
● 加入 edge detection 模块,加深不同 part 之间的骨架特征,减少类间误分割。
● 将 edge 模块的特征与 seg 的特征融合,使得不同任务之间的效果能够相互提升。具体如下:
● 传送门:
https://aistudio.baidu.com/aistudio/projectdetail/110669
● 关于 AIStudio 的使用可以参考:
https://aistudio.baidu.com/aistudio/projectdetail/39212
项目代码内容都是经过研发人员细心优化并封装好顶层逻辑,可以让开发者最快方式体验 PaddleSeg 的效果,以下代码内容供参考核心流程及思路,实际体验建议开发者完整 Fork 项目并点击全部运行即可。
%cd ~/PaddleSeg/
!mkdir pretrain
!unzip -q -o ~/data/data11874/xception65_pretrained.zip -d pretrain
第二步:解压训练数据
%cd ~/PaddleSeg/
!mkdir data
!unzip -q -o ~/data/data11874/humanseg_train.zip -d data
第三步:开始训练
其中配置参数「cfg」用于 指定 yaml 配置文件路径, 模型的配置文件位于 configs 文件夹下的.yaml 文件,「use_gpu」用于是否启用 gpu, 由于 cpu 训练过慢,不建议使用 cpu 进行训练。
%cd ~/PaddleSeg/
!cp ~/work/humanseg.yml configs/
!python ./pdseg/train.py --cfg ./configs/humanseg.yml --use_gpu
6.2. 模型预测和可视化
%cd ~/PaddleSeg/
!python ./pdseg/vis.py --cfg ./configs/humanseg.yml --vis_dir ./visual --
use_gpu
image_path = "./data/humanseg/test_images/f4963c23694e919b153546c95e3479675a5a13bd.jpg"
mask_path =
"./visual/visual_results/f4963c23694e919b153546c95e3479675a5a13bd.png"
display([image_path, mask_path], 0)
分割效果很不错,赶快用起来吧!
● 欢迎加入飞桨官方 qq 群:796771754
● 百度飞桨官网:
https://www.paddlepaddle.org.cn
● PaddleSeg项目地址: