PaddleSeg图像分割库再添新武器,新增压缩部署方案FLOPs降低51%

2020/03/25 19:46
阅读数 2.1K

相信很多人都看过电影《变形金刚》,电影中经常可以看到大黄蜂变身的跑车飞驰在公路之上,可是大家有没有仔细想过,大黄蜂是怎么知道马路中间是黄实线还是黄虚线,到底能不能压线,能不能掉头呢?要知道差一点没分清楚,那就是200块钱罚3分的下场。说到这里那些了解图计算机视觉的小伙伴们应该就会想到这个领域的核心研究方向之一的图像分割技术(Image Segmentation)。

下载安装命令

## CPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle

## GPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu

什么是图像分割?

图像分割是一种将图像分成若干个特定的、具有独特性质的区域并提取出感兴趣目标的技术和过程。从数学角度来看,图像分割是将图像划分成互不相交的区域的过程。

图1 图像分割应用效果图

如图1所示,随着人工智能的发展,图像分割技术已经在交通控制、医疗影像和工业用表识别等多个领域获得了广范的应用。为了让广大开发者可以方便快捷的将图像分割技术应用到自己的业务中,飞桨开发了一整套图像分割模型库,这就是我们接下来要介绍的PaddleSeg。

 

什么是PaddleSeg?

早在2019年秋季的时候飞桨就已经正式发布了图像分割模型库 PaddleSeg,这是一款如同工具箱般便捷实用的图像分割开发套件,该套件具有模块化设计、丰富的数据增强、高性能、工业级部署四大特点:

  • 模块化设计:支持U-Net、DeepLabv3+、ICNet和PSPNet等多种主流分割网络,结合预训练模型和可调节的骨干网络,可以满足不同性能和精度的要求;PaddleSeg提供了不同的损失函数,如Dice Loss、BCE Loss等类型,通过选择合适的损失函数,可以强化小目标和不均衡样本场景下的分割精度。

  • 丰富的数据增强:基于百度视觉技术部的实际业务经验,内置10+种数据增强策略,可结合实际业务场景进行定制组合,提升模型泛化能力和鲁棒性。

  • 高性能PaddleSeg支持多进程IO、多卡并行、跨卡Batch Norm同步等训练加速策略,结合飞桨开源框架的显存优化功能,可以大幅度减少分割模型的显存开销,更快完成分割模型训练。

  • 工业级部署:全面提供服务端和移动端的工业级部署能力,依托飞桨高性能推理引擎和高性能图像处理,开发者可以轻松完成高性能的分割模型部署和集成。并且通过Paddle Lite,用户可以在移动设备或者嵌入式设备上完成轻量级、高性能的人像分割模型部署。

 

正因为上述特点,用户仅需要少量代码或指令就可以根据使用场景从PaddleSeg中选择并组合出合适的图像分割方案,从而更快捷高效地开发出从训练到部署的全流程图像分割应用。

如今PaddleSeg升级了!

 

为了不断追求卓越,此次随着飞桨开源框架升级到1.7版本,PaddleSeg再度重磅出击。如图2所示,如今的PaddleSeg无论在性能上,还是在模型丰富度上都做出了提升!

图2 飞桨开源框架1.7版本上的PaddleSeg架构图

 

01 新增高精度图像分割模型HRNet

HRNet(High-Resolution Net)模型最大的特点就是可以使图像在整个处理过程中保持高分辨率特征,这和大多数模型所使用的从高分辨率到低分辨率网络(high-to-low resolution network)产生的低分辨率特征中恢复高分辨率特征有所不同。

 

图3 HRNet网络结构图

 

如图3所示,HRNet以高分辨率子网开始作为第一阶段,逐个添加由高到低分辨率子网以形成更多阶段,同时并行连接多分辨率子网络。在整个过程中反复交换并行多分辨率子网络中的信息来进行重复的多尺度融合。在像素级分类、区域级分类和图像级分类任务中,都证明了这些方法的有效性。

 

这样的网络结构特点使得HRNet网络能够学习到更丰富的语义信息和细节信息,因此HRNet在人体姿态估计、语义分割和目标检测领域都取得了显著的性能提升。如下表所示,基于Cityscapes数据验证集进行测评,HRNet的分割精度最高。

 

HRNet模型使用教程请参见:

https://github.com/PaddlePaddle/PaddleSeg/blob/release/v0.4.0/turtorial/finetune_hrnet.md

 

02 新增实时语义分割模型Fast-SCNN

 

Fast-SCNN是一个面向实时的快速语义分割模型,其网络结构如图4所示,主要包含了四个部分,分别是学习下采样模块,全局特征提取模块,特征融合模块和最后的分类器模块。在双分支的结构基础上,Fast-SCNN使用了大量的深度可分离卷积和逆残差(inverted-residual)模块,并且使用特征融合构造金字塔池化模块(Pyramid Pooling Module)来融合上下文信息。这使得Fast-SCNN在保持高效的情况下能学习到丰富的细节信息。

图4 Fast-SCNN网络结构图

Fast-SCNN最大的特点是“小快灵”,即该模型在推理计算时仅需要较小的FLOPs,就可以快速推理出一个不错的结果。如下表所示,在不需要预训练模型的情况下,输入尺寸为(1024,2048)的图片推理时, PaddleSeg实现的Fast-SCNN的FLOPs仅为7.21G,推理时间只需要6.28ms,而在基于Cityscapes验证数据集进行评测时,其mIoU评价能够达到0.6964,可见Fast-SCNN不仅速度快,而且效果良好。

Fast-SCNN模型使用教程请参见:

https://github.com/PaddlePaddle/PaddleSeg/blob/release/v0.4.0/turtorial/finetune_fast_scnn.md

 

03 分割模型压缩方案助力模型部署,FLOPs减少51%

 

在某些场景中,语义分割模型在实际部署时,可能会由于耗时、体积等多方面因素导致模型无法满足要求。此时模型压缩通常是解决内存占用和速度问题的有效手段。飞桨模型压缩工具PaddleSlim为PaddleSeg提供了多种分割模型的压缩方案,保障PaddleSeg可以顺利部署成功。

以L1 Pruning裁剪方案为例,该方案通过裁剪掉卷积核来减小模型体积并降低模型计算复杂度,是一种常用的有效裁剪方案。其原理如下所示。

图5 L1 Pruning原理图

 

以图5为例,ni是第i个卷积层的输入通道数,wi 和hi是输入特征图的宽和高。卷积层将输入维度为Xi的特征图转化为维度为Xi+1的输出特征图,且该特征图可以直接当作下一个卷积层的输入。该卷积核的维度为 ,卷积层的加乘操作次数为如果将图中的第一个卷积核裁剪掉,则对应的一个特征图通道就没有了,这样将减少次运算。

 

同时由于此处输出通道数的减少,将会连锁导致下一层的卷积通道维度的缩减,又减少了次运算。这是因为当图中第一个卷积层的卷积核被剪掉以后,第二层保留的卷积核参数不仅是在卷积核个数这个维度上缩减了,还和第一个卷积层剪掉的卷积核个数有关,因此第一层卷积核的裁剪会间接导致了第二层卷积核在通道维度的缩减。

 

那么如何确定哪些卷积核可以被裁剪呢?其具体过程如下:

  1. 对每个卷积核(ni × h × w)计算h和w维度的L1范数,从而得到通道维度上的特征(ni × 1)。

  2. 对得到的特征(ni × 1)进行排序,这个排序就可以看成是通道维度上的特征重要性排序。

  3. 最后根据排序的结果和需要被裁剪的卷积核比例,裁剪掉排序中比较靠后的不重要的卷积核。

 

如下表所示,实验表明在Cityscapes数据集上,使用PaddleSlim对Fast-SCNN模型进行裁剪,能够确保在模型精度几乎无损的情况下,减少51%的FLOPs(每秒浮点运算次数),可以有效的提高运算速度。

>> 访问 PaddlePaddle 官网,了解更多相关内容 

下载安装命令

## CPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle

## GPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu
展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部