天天看点

语义分割最新进展

一.基于深度学习的语义分割方法

  • 1.FCN,Fully Convolutional Networks for Semantic Segmentation [ICCV2015]。
  • 2.U-Net,U-Net: Convolutional Networks for Biomedical Image Segmentation [MICAI2015]。
  • 3.SegNet,SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation [TPAMI2017]。
  • 4.DeepLab,DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs [TPAMI2017]。
  • 5.PSPNet, Pyramid Scene Parsing Network [CVPR2017]。
  • 6.RefineNet,RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation [CVPR2017]
  • 7.NL,Non-local Neural Networks [CVPR2018]
  • 8.DeepLabv3+,Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation [ECCV2018]。
  • 9.Auto-DeepLab,Auto-DeepLab:Hierarchical Neural Architecture Search for Semantic Image Segmentation [CVPR2019]。
  • 10.DANet,Dual Attention Network for Scene Segmentation [CVPR2019]。
  • 11.CCNet,CCNet: Criss-Cross Attention for Semantic Segmentation [ICCV2019]。
  • 12.HRNet,Deep High-Resolution Representation Learning for Visual Recognition [TPAMI2020]。
  • 13.FPT,Feature Pyramid Transformer [ECCV2020]。
  • 14.ORC,Object-Contextual Representations for Semantic Segmentation [ECCV2020]。
  • 15.SegFix,SegFix: Model-Agnostic Boundary Refiement for Segmentation [ECCV2020]。
  • 16.SETR,Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers [CVPR2021]。

二.传统图像分割方法

  • 1.Graphcut,An experimental comparison of min-cut/max-flow algorithms for energy minimization in vision [TPAMI2004]
  • 2.Grabcut,“GrabCut” — Interactive Foreground Extraction using Iterated Graph Cuts [TOG2004]
  • 3.Random Walks,Random Walks for Image Segmentation [TPAMI2006]

三.目标边缘检测

  • 1.HED,Holistically-Nested Edge Detection [ICCV2015]
  • 2.RCF,Richer Convolutional Features for Edge Detection [CVPR2017]

四.超像素分割和显著性检测

  • 1.SLIC,SLIC superpixels compared to state-of-the-art superpixel methods [TPAMI2012]
  • 2.GBMR,Saliency Detection via Graph-Based Manifold Ranking [CVPR2013]
  • 3.RC,Global contrast based salient region detection [TPAMI2015]

1.FCN

输入:原始任意大小图像(500x500x3)

输出:featuremap (500x500x21)(VOC为例)

文章中比较重要的两点。

  1. 转置卷积。转置卷积的目的是做上采样,可简单理解为在原featuremap上补0后再做卷积。
  2. Featuremap的融合。由于CNN结构中featuremap的大体上从矮胖到高瘦,因而如果要使最后一层的featuremap和原始输入图像保持一致,就需要做上采样。文章中主要采用了三种当时即FCN-32s,FCN-16s和FCN-8s,FCN-32s表示从最后一层直接上采样32倍到原图大小,FCN-16s表示2倍上采样后与倒数第二层融合,然后再16倍上采样,FCN-8s表示将FCN-16s做两倍上采样后与倒数第三层融合。

2.U-Net

U-net可以理解为FCN在小样本数据(医学图片)上的一个改进版本,我觉得主要的特点是加权的交叉熵损失函数和底层特征的融合。交叉熵损失函数是使得语义边缘损失函数的权重更大,目的是使边缘分割更加准确。底层特征的融合采用的是copy and crop的操作,主要的原因是U-net卷积过程中没有加pad,导致如何过程中encode和decode中featuremap的大小不一样(图像输入572,而输出是388),这样做的好处是输出最终featuremap的时候利用了周围的纹理信息,便于融合。原因主要有两个,1.医学图像一般比较大,不能原图输入,需要做裁剪即文章中的Overlap-tile strategy。2. 医学图像比较小裁剪可以一定程度上增加数据量,解决小样本问题。如果crop的操作且网络输入输出featuremap大小一致的话,可能导致边缘融合的效果不好。

3.SegNet

SegNet与U-net网络的结构很像,区别在于SegNet再encoder中采用2x2的max-pooling后会记录max-pooling得到最大值的位置信息,这样做的一个好处就是在decoder做upsampling的过程中不需要使用转置卷积,直接可以根据encoder中记录的位置信息做upsampling,文章中称为pool indices。个人觉得这样做的好处是可以减少计算量,并且保留较丰富的边缘信息(max-pooling),比较适用于场景分割数据集。

4.DeepLab

主要贡献:

  1. 空洞卷积。优点:增大感受野的同时增大分辨率(max-pooling增大了感受野但是降低了分辨率)。缺点:会产生伪影 gridding artifacts。
  2. 金字塔型的空洞池化。可以理解为multiscale image representations问题,主流方法有两种,1.输入端,输入multiscale的图像(最简单的方法就是对图像做不同的resize)。2.网络中,对featuremap采用Spatial Pyramid Pooling。本文的方法是采用后者, 用空洞卷积(atrous pooling)取代了max pooling。
  3. 全连接条件随机场。目的是精细化边缘,思想是判断两个pixel是否属于同一个label。(文中提到了一个比较有意思的观点,分类的准确度和定位的准确度是成反比的,网络越深分类越准定位越差,原因是深网络的感受野太大,分割出来的结果比较平滑,边缘不明显。针对这个问题其实有三种解决方案,1. 多层特征。2.超像素。3.CRF。)。

5.PSPNet

这篇文章总结了基于全卷积网络的语义分割方法存在的单个问题。

  1. Mismatched Relationship。共生关系信息,比如飞机大概率在“跑道”后者“天空”中。
  2. Confusion Categories。有些类别比较难区分,比如“field” 和“earth”,“mountain”和“hill”。
  3. Inconspicuous Classes。小目标很难发现,“床”上的“枕头”。

三个问题的思考:作者科研的思路非常值得学习,首先发现问题,然后解决问题,而不是一上去就堆方法,我现在才明白每一个方法都有他适合的场景,所以科研的第一步是发现自己这个任务当前存在的问题。当然这篇文章也有先刷性能再提出问题的嫌疑,主要原因有两点,1.作者提出的方法并不是很契合三个问题(金字塔结构和问题三关系稍微大一点),算是比较通用的图像识别方法。2.作者提出的问题并不是针对语义分割,我觉得是针对多标签识别的问题,个人理解真正的语义分割问题应该是识别和定位之间trade-off的问题。

这篇文章的中比较重要的两点。

  1. Pyramid Pooling Module。文章中最核心的思想,思路是将encoder得到的feature map通过四个不同尺度的pooling(在ablation study中有讨论是max-pooling还是average-pooling)得到四个feature map,接着做一个1x1的卷积降低通道数,然后采用双线性插值的方式将这四个featuremap变成一样大小,最后将不同四个金字池化操作得到的featuremap与encoder输出的featuremap做concatenation,然后使用卷积层得到最终的featuremap。
  2. 损失函数。作者除了在最后的输出结果中做loss外,还在第四个Resblock上使用了辅助的损失函数,通过ablation study可以看出来确实有一定的效果,并且辅助loss的权重对最终的结果影响比较大(以后做语义分割或者可以把这一点当成一个trick)。

7.NL

NL这方法算是self-attention 在计算机视觉上已经比较好的应用,作者在featuremap上做self-attention,文章图2中 θ \theta θ, ϕ \phi ϕ和 g g g可以理解为transformer中的Q,K和V。

8.DeepLabv3+

文章给语义分割中的问题和之前的方法做了两个定义。

  1. U-net和SegNet方法用来解决边缘的问题,这类方法的特点是采用encoder-decoder的结构,并且encoder和decoder之间有调层链接。
  2. PSPNet和DeepLab中的ASPP方法用来解决context问题,这类方法的特点是在featuremap的最后一层加不同尺度的池化或者不同卷积和大小的空洞卷积。

DeepLabv3+可以看作是DeepLab和U-net结构的结合版本,与U-net不一样的是DeepLabv3+中encoder只有倒数第三个Resnet-block与decoder网络相链接。为了减少计算量,文章中还使用了一个小trick在ASPP和decoder模型中使用depthwise separable convolution。

10.DANet

DANet是NL方法的升级版本,NL可以理解为在featuremap的长和宽上做self-attention,DANet不仅在长和宽上做self-attention(Position Attention Module),而且还在高上做self-attention(Channel Attention Module),最后在两次attention得到的featuremap相加进行融合,作为最终输出的featuremap,总体感觉是NL和SENet的结合版本。

11.CCNet

CCNet也可以理解为NL的升级版本,这篇文章的出发点是提高NL方法的效率。NL方法在计算self-attention的时候是计算当前点和剩余所有点的距离,而这篇文章的是计算当前点与当前点水平和垂直方向的距离(Criss-Cross Attention block),这样的话减少了计算量。此外作者在网络中使用了两个CC Attention block,文章的中叫做Recurrent Criss-Cross Attention (RCCA),本质上就是transformer中的multi layers的的思想。

12.HRNet

这篇文章主要是在网络结构上进行改进,传统的网络结构是流水线式的从矮胖到高瘦型的结构,而这篇文章采用的思路是在原有流水线式结构的基础上,逐渐增加网络的宽度,具体来说就是在第n个阶段采用n种分辨率并行的结构,从当前层到下一层的之前,每一中分辨率的结构需要相互融合。

13.FPT

这篇文章的核心思想是在多个尺度上做NL,文章中提到了三个尺度,如果不考虑self-attention机制,只考虑特征图之间的融合,可以理解为HRNet的一个特殊形式,这篇文章可以理解为HRNet和NL的一个结合版本(纯属个人理解,作者文章没有引用HRNet,所以应该不是参考HRNet),但是作者在使用self-attention的过程中做了一些改进,总体感觉这篇文章加入的小技巧比较多,需要好好看看代码。

  • 1.Self-Transformer。使用了Mixture of Softmaxes (MoS),而不是传统的Softmax。
  • 2.Grounding Transformer。计算距离的过程中使用欧式距离而不是点乘。
  • 3.Rendering Transformer。对整个通道做attention。

14.OCR

这篇文章也是解决上下文信息聚合的问题,与传统聚合不同尺度特征或者不同层特征的区别在于这篇文章强调聚合原始像素的特征表示和目标区域的上下文表示,整体思想有点像coarse-to-fine,具体的思想如下。

  • 1.目标的表示。目标区域内像素的加权和,权值是目标区域的软标签表示,得到加权和后制作self-attention。
  • 2.目标与像素之间的关系。先计算每一个像素和目标表示之间的距离,然后再采用softmax做归一化。
  • 3.目标的上下文表示。目标表示与2中的关系做点乘,得到的featuremap做self-attention。
  • 4.最终表示。目标的上下文表示与像素表示做concatenation。

15.SegFix

这篇文章主要的思想是先对输入图像做边缘检测,然后再根据边缘检测的结果预测语义分割的mask(可以理解为coarse-to-fine形式的一种)。

  • Boundary branch。判断图像中每一个像素属于边缘的概率。
  • Direction branch。判断每一个像素的方向,总共有八个方向即8分类。
  • Offet branch。判断boundary像素的offset,Boundary branch与Direction branch作点乘。

继续阅读