![dd2d6e6a088c4d2b6b1d84b7e5423934.png](https://i-blog.csdnimg.cn/blog_migrate/b40cfeb8ba3df8acf9ceba7c6f95fbd4.jpeg)
目录:
一、语义分割简介 二、语义分割的过去:传统语义分割算法 三、语义分割的现在:深度学习下的语义分割
3.1、基于滑窗的语义分割模型到基于候选区域的语义分割模型
3.2、基于编码器-解码器(上采样/反卷积)结构的语义分割模型
3.3、其他类型的语义分割模型
四、语义分割的将来:语义分割未来的可能的研究方向
一、语义分割简介
1.1、什么是语义分割
我们知道图像分类任务是把一张图片划分为某个类别,而语义分割则是更进一步的分类 — 在像素级别上的分类,属于同一类的像素都要被归为一类。比如以下照片,属于人的像素都要分成一类,属于摩托车的像素也要分成一类,除此之外还有背景像素也被分为一类。
![34421a4cd390065974aaae8e73cbe94b.png](https://i-blog.csdnimg.cn/blog_migrate/a6edb94250cc477a08d7291cc6db6519.png)
![e9d1af4bf8f917f048ba49df74b4ec09.png](https://i-blog.csdnimg.cn/blog_migrate/cbe16bfd0b86bcb242f32685c56ffb4f.png)
更加正式的明确语义分割任务如下:
- 输入:
,就是正常的图片,其中H和W分别代表输入图片的高和宽
- 输出:
, classNum为给定的数据集的类别数,也就是一共classNum个通道的H*W大小的特征图。每一个通道对应一个class,对每一个像素位置,都有classNum数目个通道,每个通道的值对应那个像素属于该class的预测概率。
1.2、用于语义分割的常用数据集
Pascal Voc:http://host.robots.ox.ac.uk/pascal/VOC/host.robots.ox.ac.uk
Cityscapes:Semantic Understanding of Urban Street Sceneswww.cityscapes-dataset.com
![0c8b7c76a240a8c9f8e8453c785035cd.png](https://i-blog.csdnimg.cn/blog_migrate/393a697962c479f218587b36475f6e05.png)
MSCOCO:http://cocodataset.org/cocodataset.org
1.3、语义分割评价指标
- 像素精度(pixel accuracy ):
每一类像素正确分类的个数/ 每一类像素的实际个数
- 均像素精度(mean pixel accuracy ):
每一类像素的精度的平均值
- 平均交并比(Mean Intersection over Union):
MIoU是指求出每一类的IOU取平均值。IOU指的是两块区域相交的部分/两个部分的并集,如下图中:绿色部分/总面积。
![347bbd1b853a2234f8e0d4efa17a0688.png](https://i-blog.csdnimg.cn/blog_migrate/ffa9f213724842b4ccd911927c972fbe.png)
- 权频交并比(Frequency Weight Intersection over Union):
每一类出现的频率作为权重
二、语义分割的过去:传统语义分割算法
在深度学习方法流行之前,基于Texton Forest和Random Forest等传统机器学习分类器的语义分割方法是用得比较多的方法。但是深度学习的兴起,大大的提高了语义分割算法的精度,使得学者对于传统的语义分割算法的研究热情逐渐开始走向下坡路。由于这篇文章主要总结的是深度学习背景下的语义分割,所以这里就不详细展开讲这些传统的算法了。但是想表达的一点是,将传统方法与深度学习方法结合是一个很好的研究突破点。
三、语义分割的现在:深度学习下的语义分割
3.1、基于滑窗的语义分割模型到基于候选区域的语义分割模型
- 基于滑窗的语义分割模型
在2012年,Ciresan用CNN来挑战语义分割任务。Ciresan采取滑窗的方式,取以每个像素点为中心的小图像块(patch)输入CNN来预测该像素点的语义标签。这是个很有意义的尝试,打破CNN只用于目标分类的先河,作者也取得了当年state-of-art的成就。
我们以一张遥感图像的语义分割来讲解这个方法。如下图所示我们按照预先设定好的窗口大小(比如7*7)从原图中取出一个7*7大小的图片。
![65061e52b3685e5905d94ead75caece5.png](https://i-blog.csdnimg.cn/blog_migrate/9dfb036de2ce136ac14fb8fe0506a291.png)
然后,如下图所示,将取出的图片送入卷积神经网络中。从而预测出该图片属于哪一类,然后将这个窗口的中心像素打上这个标签。重复这个取窗口和预测的过程,直到所有的像素点都被打上了对应的标签。
![8c244417c6592fdb8bc94f1a2166e933.png](https://i-blog.csdnimg.cn/blog_migrate/1f05b4e67d66b09c2a2607f4dff85324.png)
不过,这个方法的缺点也很明显:
1)需要遍历每个像素点提取patch进行训练、预测,速度慢、很耗时;
2)取多大的窗口才合适?太小了缺少上下文信息,太大了会增加很多计算量;无疑很多窗口之间存在着大量冗余计算。
- 基于候选区域的语义分割模型
滑窗方法的缺点在目标检测领域同样存在,学者用基于候选区域的方法解决这问题。而在语义分割领域,基于区域选择的几个算法也主要是由前人的有关于目标检测的工作渐渐延伸到语义分割的领域的。
主要研究进程:
目标检测阶段:R-CNN—> Fast R-CNN—> Faster R-CNN 参考文献: 【1】R-CNN:https://arxiv.org/pdf/1311.2524.pdfarxiv.org
【2】Fast R-CNN:https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdfwww.cv-foundation.org
【3】Faster R-CNN:https://arxiv.org/pdf/1506.01497.pdfarxiv.org
伯克利大学的Girshick教授等人共同提出了首个在目标检测方向应用的深度学习模型:Region-based Convolutional Neural Network(R-CNN)。
该网络模型如下图所示,其主要流程为:先使用selective search算法提取2000个候选框,然后通过卷积网络对候选框进行串行的特征提取,再根据提取的特征使用SVM对候选框进行分类预测,最后使用回归方法对区域框进行修正。
![184c01dbc7961e50fbb1dcfff9ae3e01.png](https://i-blog.csdnimg.cn/blog_migrate/df650cbb42816eb768d89385222364a2.png)
由于R-CNN的效率太低,2015年由Ross等学者提出了它的改进版本:Fast R-CNN。其网络结构图如下图所示(从提取特征开始,略掉了region的选择)Fast R-CNN在传统的R-CNN模型上有所改进的地方是它是直接使用一个神经网络对整个图像进行特征提取,就省去了串行提取特征的时间;接着使用一个RoI Pooling Layer在全图的特征图上摘取每一个RoI对应的特征,再通过FC进行分类和包围框的修正。
![3b2c35bfd2b07b12ee469caa485a526d.png](https://i-blog.csdnimg.cn/blog_migrate/54bd84b3ac974bfddf068bc1618e06f1.jpeg)
2016年提出的Faster R-CNN可以说有了突破性的进展(还是目标检测),因为它改变了它的前辈们最耗时最致命的部位:selective search算法。它将selective search算法替换成为RPN,使用RPN网络进行region的选取,将2s的时间降低到10ms,其网络结构如下图所示:
![786d1f1edd3afe1ffd92f292c656950b.png](https://i-blog.csdnimg.cn/blog_migrate/5d36e010dc68e0d27ded0a77444ea0dc.png)
语义分割阶段:Mask R-CNN—>Mask Scoring R-CNNhttp://openaccess.thecvf.com/content_ICCV_2017/papers/He_Mask_R-CNN_ICCV_2017_paper.pdfopenaccess.thecvf.com
参考文献:
【1】Mask R-CNN:
【2】Mask Scoring R-CNN:Mask Scoring R-CNNarxiv.org
Mask R-CNN(终于到分割了!)是何恺明团队提出的一个基于Faster R-CNN模型的一种新型的分割模型,此论文斩获ICCV 2017的最佳论文,在Mask R-CNN的工作中,它主要完成了三件事情:目标检测,目标分类,语义分割。作者在Faster R-CNN的结构基础上加上了Mask预测分支,并且改良了ROI Pooling,提出了ROI Align。其网络结构如下图:
![30a9460bde9d0a47af378fa61399967e.png](https://i-blog.csdnimg.cn/blog_migrate/ee00bfa5bf1a0c8da503deac3f6bd008.jpeg)
最后要提的是2019年CVPR的oral—MS R-CNN,这篇文章的提出主要是对上文所说的Mask R-CNN的一点点缺点进行了修正。他的网络结构也是在Mask R-CNN的网络基础上做了一点小小的改进,添加了Mask-IoU。作者在文章中提到:Mask R-CNN已经很好啦!但是有个小毛病,就是评价函数只对目标检测的候选框进行打分,而不是分割模板,所以会出现分割模板效果很差但是打分很高的情况。所以黄同学增加了对模板进行打分的MaskIoU Head,并且最终的分割结果在COCO数据集上超越了Mask R-CNN,下面就是MS R-CNN的网络结构:
![223bbd8abd64b3e2e6d037fab32c5a11.png](https://i-blog.csdnimg.cn/blog_migrate/be3411e8c5d2038ec0f1d4376a100761.jpeg)
3.2、基于编码器-解码器(上采样/反卷积)结构的语义分割模型
- 经典网络:
【1】FCN:https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Long_Fully_Convolutional_Networks_2015_CVPR_paper.pdfwww.cv-foundation.org
要说语义分割整体实现精度大的跨越还是在FCN(全卷积神经网络)提出之后。它完全改变了之前需要一个窗口来将语义分割任务转变为图片分类任务的观念,FCN完全丢弃了图片分类任务中全连接层,从头到尾都只使用到了卷积层。它的网络结构如图:
![f57f2fad789342f27574327c73182974.png](https://i-blog.csdnimg.cn/blog_migrate/3eb79ca0772ceabef82732bb029c3fe3.png)
我们将提取特征的过程称为编码器,也就是FCN的前面特征图变小的阶段;将后面进行上采样/反卷积的过程称为解码器。图片在解码器中恢复了原图大小。
从FCN后,基于编码器解码器结构的经典网络结构如同雨后春笋般冒了出来,下面都是研究语义分割方向上不可不读的论文。
【2】UNet:U-Net: Convolutional Networks for Biomedical Image Segmentationarxiv.org
![89d7cfb7216948f1d1dc92fc83d073b3.png](https://i-blog.csdnimg.cn/blog_migrate/2a04090f5e6813d8ce4c787fd88ced33.jpeg)
Unet网络是在医学影像分割中最常用的模型。它的典型特点是,它是U型对称结构,左侧是卷积层,右侧是上采样层(典型的编码器解码器结构)。
另一个特点是,Unet网络的每个卷积层得到的特征图都会concatenate到对应的上采样层,从而实现对每层特征图都有效使用到后续计算中。也就是文中所说的skip-connection。这样,同其他的一些网络结构比如FCN比较,Unet避免了直接在高级feature map中进行监督和loss计算,而是结合了低级feature map中的特征,从而可以使得最终所得到的feature map中既包含了high-level 的feature,也包含很多的low-level的feature,实现了不同scale下feature的融合,提高模型的结果精确度。
【3】deeplab系列:v1、v2、v3、v3 plushttps://arxiv.org/pdf/1412.7062v3.pdfarxiv.org https://arxiv.org/pdf/1606.00915.pdfarxiv.org https://arxiv.org/abs/1706.05587arxiv.org https://arxiv.org/pdf/1802.02611.pdfarxiv.org
2015 年的ICLR上提出DeepLab V1是结合了深度卷积神经网络(DCNNs)和概率图模型(DenseCRFs)的方法。它将DenseCRFs作为网络的后处理方法。采用DenseCRFs作为后处理的方法,简单来说,就是对一个像素进行分类的时候,不仅考虑DCNN的输出,而且考虑该像素点周围像素点的值,这样语义分割结果边界清楚。
![db92f05e1206df1797cd8ab00fe8d14f.png](https://i-blog.csdnimg.cn/blog_migrate/27a64d1687afba430ca93e28745c9c40.jpeg)
在实验中发现 DCNNs 做语义分割时精准度不够的问题,根本原因是重复的池化和下采样降低了分辨率。但是另一方面,重复的池化和下采样扩大了感受野,而感受野的扩大对语义分割任务来说也是至关重要的。针对这一问题,DeepLab v2采用的空洞卷积算法扩展感受野,与此同时不会降低特征图的分辨率。
![0600bfe5b2ed3444a3991da0e350859c.png](https://i-blog.csdnimg.cn/blog_migrate/c865c4244fbc3bc0bfe199dd73b9aa6e.jpeg)
这里像稍微详细的讲一下空洞卷积的概念,因为它在语义分割或者是其他的计算机视觉任务中确实很重要。空洞卷积从字面上就很好理解,是在标准的卷积中里注入空洞,以此来增加感受野。相比原来的正常卷积,空洞卷积多了一个超参数称之为 dilation rate, 指的是kernel的间隔数量(e.g. 正常的 convolution 是 dilatation rate 1)。一个简单的对比如下图。可以看到感受野从3×3变成了5×5.
![056d59493b49e5eabcae87cdf10ea156.png](https://i-blog.csdnimg.cn/blog_migrate/0c7ee38f72ceb071c9d3c6d10c645d54.jpeg)
![a8128405a0956735d87d9980947e7021.png](https://i-blog.csdnimg.cn/blog_migrate/48382f7da10820aca13a5e1e608bdfba.jpeg)
此外,deeplab v2基于空洞卷积,设计了ASPP模块。它组合了不同dilation rate的空洞卷积所产生的特征图。这样,不同空洞卷积产生的不同感受野的特征图被组合在了一起,从而获取了更加丰富的上下文信息。
![2b58fa88de72bd4602ce9b37f3a8364d.png](https://i-blog.csdnimg.cn/blog_migrate/50e2fcfa21ab08ba189058746e8c40ab.jpeg)
deeplab v3的创新点一是改进了ASPP模块。改进后的aspp长下图那个样子,多了个1*1的conv和global avg pool。关于1*1卷积,论文中提到,当rate=feature map size时,空洞卷积就变成了1*1 conv,所以这个1*1conv相当于rate很大的空洞卷积。此外引入了全局池化这个branch,这个思想是来源于PSPnet。其实也就是与原来的ASPP相比,新的ASPP模块能够聚集到全局的上下文信息,而之前的只能聚集局部的上下文。
![6ef3dd5e3b32ae0b7e1a5921c13c1a83.png](https://i-blog.csdnimg.cn/blog_migrate/8c2d1ec70601a91965e3afa2e23d7da9.jpeg)
在deeplab v3中说到了需要8×/16×的upsample 最终的feature map,很明显这是一个很粗糙的做法。deeplab v3+的创新点一是设计基于v3的decode module,使得结果变得更加精细;二是用modify xception作为backbone。
![45df940c917aa5f38e989287373b13e1.png](https://i-blog.csdnimg.cn/blog_migrate/cc1ae4d25d45bead2ce5707f025ef5bf.jpeg)
【4】PSPNethttps://arxiv.org/pdf/1612.01105.pdfarxiv.org
我们知道,语义分割的难点主要包括:
- 语义关系不匹配:比如“车”在河上
- (相近)类别容易混淆:比如:墙与房子
- 不明显的类别:非常大或者非常小物体的识别能力,非常大物体可能超过神经网络感受野,而非常小的物体难以找到
这些错误错误都与不同感受野获取的全局信息和语境关系有着部分甚至是完全的关联,因此,一个拥有适当场景级全局信息的深度网络可以大大提高场景解析的能力。PSPNet是在FCN上的改进,引入更多的上下文信息进行解决,当分割层有更多全局信息时,出现误分割的概率就会低一些,这种思想目前在许多图像领域都有所应用。
![0cc88daa03688fcf10b072815fe820e5.png](https://i-blog.csdnimg.cn/blog_migrate/3a92fa309b966a8c58f7096b03d7982b.png)
本文提出了一个具有层次全局优先级,包含不同子区域时间的不同尺度的信息,称之为金字塔池化模块(PPM)。该模块融合了4种不同金字塔尺度的特征,第一行红色是最粗糙的特征–全局池化生成单个bin输出,后面三行是不同尺度的池化特征。为了保证全局特征的权重,如果金字塔共有N个级别,则在每个级别后使用1×1 1×11×1的卷积将对于级别通道降为原本的1/N。再通过双线性插值获得未池化前的大小,最终concat到一起。
- 基于编码器解码器模型中的研究热点:
上下文关系的获取:
由于卷积层结构的限制,FCN提供的上下文信息不足,有待改进。因此,近年来各种方法被提出来用于探索上下文依赖性,以获得更准确的分割结果。目前为止,上下文信息的聚合主要有两种方法:
- 基于金字塔的方法:有几种方法如PSPNet采用基于金字塔的模块或全局池化来有规律的聚合区域或全局上下文信息。然而,它们捕获了同类的上下文关系,却忽略了不同类别的上下文。
- 基于注意力的方法:最近基于注意力的方法,如通道注意力、空间注意力,有选择地聚合不同类别之间的上下文信息。然而,由于缺乏明确的区分,注意力机制的关系描述不够清晰。因此,它可能会选择不需要的上下文依赖关系。
这里推荐几篇近两年(19、20年)刚出的一些基于注意力获取上下文信息的文章:
【1】Non-local:
https://arxiv.org/pdf/1711.07971.pdfarxiv.org卷积是对局部区域进行的操作,所以它是典型的local operations。受计算机视觉中经典的非局部均值(non-local means)的启发,本文提出一种non-local operations用于捕获长距离依赖(long-range dependencies),即如何建立图像上两个有一定距离的像素之间的联系。
![799f559b788191eb2936ef130f828b66.png](https://i-blog.csdnimg.cn/blog_migrate/7386d9592d60e6e25cf18f56c2f35064.png)
【1】DANet:
Dual Attention Network for Scene Segmentationarxiv.org这篇论文主要的创新点在于引入了双注意力机制(Dual Attention)来获取上下文关系,所谓双注意力,指对通道(channel)以及空间(spatial)的 Attention 机制,具体实现如下图:
![e7bd92eb4ce0d8f1097b4a99dcef2166.png](https://i-blog.csdnimg.cn/blog_migrate/837c19a3af5d435800badb7a3e1987a1.jpeg)
【2】CCNet:
https://arxiv.org/pdf/1811.11721.pdfarxiv.org![69c0e3054a93a54976454dea042a7f88.png](https://i-blog.csdnimg.cn/blog_migrate/68b3d8298d5474f94cd1c2eec1ae9933.png)
在DANet中,作者用了non-local的思想来解决这个问题,我在上一篇介绍中也提到了,这种方法的局限性在于需要的计算量很大,因此CCNet提出了criss-cross attention module在解决long-range dependencies的前提下,大幅降低了内存占用和计算量。
此外,CVPR2020还新出了两篇新的上下文的文章,感兴趣的可以读一下我的阅读笔记:
CVPR2020-语义分割:Context Prior for Scene Segmentationmp.weixin.qq.com![e8412d1b822cb87b5e24d82c0da54270.png](https://i-blog.csdnimg.cn/blog_migrate/dcec60f368363a5f8f9a3c12517355e0.png)
![dcb36f1037b852556be861cc1ef92201.png](https://i-blog.csdnimg.cn/blog_migrate/0a801b5d82fdaf6c650457a74f6169e1.png)
提升边缘和小物体的分割精度
【1】英伟达的G-SCNN:
https://arxiv.org/pdf/1907.05740.pdfarxiv.org【2】北大的GFFNet:
https://arxiv.org/abs/1904.01803arxiv.org它们的思路都是用了门控机制来融合low-level特征
3.3、其他类型的语义分割模型
所谓其他类型的语义分割模型就是从编码器解码器结构中跳脱出来的模型。这里就不得不提HrNet了。个人特别喜欢这个模型。它配的上简单高效这四个字。我之前有写过关于篇论文的阅读笔记,详见:
HrNetV2www.chenblog.ink![107bc2f581a7d91a773e1c3eecc1cc90.png](https://i-blog.csdnimg.cn/blog_migrate/5f68d457c5d88d5a15f6e439d2e6f09e.jpeg)
此外,旷世在CVPR2020上提出的动态路径设计的网络也很不错,对论文的理解详见:
阿柴本柴:CVPR2020 Oral-语义分割:用于语义分割的动态路径选择网络,已开源!zhuanlan.zhihu.com![0069f113f91886d97bf1c03de3174e34.png](https://i-blog.csdnimg.cn/blog_migrate/0c3617f574a6d40acb00371e6a8b7d3a.jpeg)
四、语义分割的将来:语义分割未来的可能的研究方向
这一部分我之前有总结过,详见:
都0202年了,语义分割还有哪些方向可以研究?mp.weixin.qq.com![85981412ecf082c84a6f3e8a0cb0758d.png](https://i-blog.csdnimg.cn/blog_migrate/024c49c8f4ccdaa341b6faec96819478.png)
欢迎关注公众号,阅读更多深度学习、计算机视觉、图像分割领域论文笔记:
![7db18b180fdaafcbfb441b81a20efdf1.png](https://i-blog.csdnimg.cn/blog_migrate/131384eb1efbf6e25cd54b5dd7d73ae7.png)