相信很多人都看过电影《变形金刚》,电影中经常可以看到大黄蜂变身的跑车飞驰在公路之上,可是大家有没有仔细想过,大黄蜂是怎么知道马路中间是黄实线还是黄虚线,到底能不能压线,能不能掉头呢?要知道差一点没分清楚,那就是 200 块钱罚 3 分的下场。说到这里那些了解图计算机视觉的小伙伴们应该就会想到这个领域的核心研究方向之一的图像分割技术(Image Segmentation)。
什么是图像分割?
图像分割是一种将图像分成若干个特定的、具有独特性质的区域并提取出感兴趣目标的技术和过程。从数学角度来看,图像分割是将图像划分成互不相交的区域的过程。
图 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 的输出特征图,且该特征图可以直接当作下一个卷积层的输入。该卷积核的维度为 ,卷积层的加乘操作次数为
。如果将图中的第一个卷积核裁剪掉,则对应的一个特征图通道就没有了,这样将减少
次运算。
同时由于此处输出通道数的减少,将会连锁导致下一层的卷积通道维度的缩减,又减少了次运算。这是因为当图中第一个卷积层的卷积核被剪掉以后,第二层保留的卷积核参数不仅是在卷积核个数这个维度上缩减了,还和第一个卷积层剪掉的卷积核个数有关,因此第一层卷积核的裁剪会间接导致了第二层卷积核在通道维度的缩减。
那么如何确定哪些卷积核可以被裁剪呢?其具体过程如下:
对每个卷积核(ni × h × w)计算 h 和 w 维度的 L1 范数,从而得到通道维度上的特征(ni × 1)。
对得到的特征(ni × 1)进行排序,这个排序就可以看成是通道维度上的特征重要性排序。
最后根据排序的结果和需要被裁剪的卷积核比例,裁剪掉排序中比较靠后的不重要的卷积核。
如下表所示,实验表明在 Cityscapes 数据集上,使用 PaddleSlim 对 Fast-SCNN 模型进行裁剪,能够确保在模型精度几乎无损的情况下,减少 51% 的 FLOPs(每秒浮点运算次数),可以有效的提高运算速度。
如果您加入官方 QQ 群,您将遇上大批志同道合的深度学习同学。官方 QQ 群:703252161。
如果您想详细了解更多飞桨的相关内容,请参阅以下文档。
官网地址:
https://www.paddlepaddle.org.cn
飞桨 PaddleSeg 项目地址:
https://github.com/PaddlePaddle/PaddleSeg
飞桨开源框架项目地址:
GitHub: https://github.com/PaddlePaddle/Paddle
Gitee: https://gitee.com/paddlepaddle/Paddle
END