实例分割&语义分割:A mini-survey

文章目录

    • 实例分割
      • 基于检测框的实例分割
        • Mask RCNN
        • Mask Scoring R-CNN
      • Bbox-Free的实例分割
        • SOLO
        • SOLO v2
    • 语义分割
      • 语义分割评价指标
      • 模型性能参数比较
      • 基于全卷积的深度语义分割模型
        • FCN
        • ParseNet
        • PSPNet
        • DeepLab系列
        • OCRNet
        • SFNet
        • DANet&CCNet

实例分割

【1】令人拍案称奇的Mask RCNN - 知乎 (zhihu.com)
【2】MS R-CNN:Mask Scoring R-CNN
【3】【实例分割论文】SOLOv2: Dynamic, Faster and Stronger

基于检测框的实例分割

目前主流做实例分割的方法大都基于目标检测,即:先跑目标检测,然后对于每一个方框跑一个二元图像分割(binary segmenation)

Mask RCNN

Mask RCNN沿用了Faster RCNN的思想,将ROI Pooling操作改成了ROI Align操作,特征提取采用ResNet-FPN的架构,另外多加了一个Mask预测分支。
实例分割&语义分割:A mini-survey_第1张图片
RoIPooling
原来的Faster RCNN采用了RoIPooling,它经历了两次取整的过程,第一次是对region proposal的取整,第二次是对网格分割区域的取整,这两次取整会给检测和分割带来误差。
实例分割&语义分割:A mini-survey_第2张图片
RoIAlign
在Mask RCNN中,RoIAlign取消整数化操作,保留了小数,使用双线性插值的方法获得坐标为浮点数的像素点上的图像数值。如下图所示,整个region proposal划分成2×2的网格,每个网格中包含4个采样点,RoIAlign使用双线性插值法计算每个采样点的值,由该采样点落在特征图上的对应网格的四个像素值参与计算。
实例分割&语义分割:A mini-survey_第3张图片

Mask Scoring R-CNN

在实例分割框架中会将实例的分类置信度作为其分割掩膜质量得分,然而分割掩膜的质量得分应该是和IoU相关才对,通常情况下并不能和分类的得分很好关联在一起。基于这个观点让深度学习网络为自身的预测进行评分相对来说是比较重要的,评判更为合理。在这篇文章在Mask R-CNN的基础上使用一个网络结构(MaskIoU Head)去学习预测得到的掩膜质量,得到一个新的网络结构Mask Scoring R-CNN(MS R-CNN),这个模块使用实例的特征与对应的预测掩膜一起去回归掩膜IoU。使用这样的方法实例分割的性能得到增强,超过了Mask R-CNN。在测试阶段会将MaskIoU与分类置信度相乘得到mask score。
实例分割&语义分割:A mini-survey_第4张图片

Bbox-Free的实例分割

SOLO

SOLO的核心思想是:将分割问题转化为位置分类问题,从而做到不需要anchor,不需要normalization,不需要bounding box detections的实例分割。具体做法是:将图片划分成S×S的网格,如果物体的中心(质心)落在了某个网格中,那么该网格就有了两个任务:(1)Category Branch 负责预测该物体语义类别(2)Mask Branch 负责预测该物体的instance mask。这就对应了网络的两个分支。同时,SOLO在骨干网络后面使用了FPN,用来应对尺寸。FPN的每一层后都接上述两个并行的分支,进行类别和位置的预测,每个分支的网格数目也相应不同,小的实例对应更多的的网格。
实例分割&语义分割:A mini-survey_第5张图片

SOLO v2

SOLO v2中的mask branch 被分解为mask kernel branch和mask feature branch,分别对应卷积核的学习和特征的学习。两个分支的输出最终组合成整个mask branch的输出。
实例分割&语义分割:A mini-survey_第6张图片
实例分割&语义分割:A mini-survey_第7张图片

References
[1] Mask RCNN, ICCV2017
[2] Mask Scoring R-CNN, CVPR2019
[3] SOLO: Segmenting Objects by Locations, ECCV2020
[3] SOLOv2: Dynamic and Fast Instance Segmentation, NeurIPS’20

语义分割

【1】ECCV 2020 | OCRNet化解语义分割上下文信息缺失难题
【2】2020最全综述:语义分割的过去、现在和未来
【3】语义分割模型之DeepLabv3+
【4】如何理解空洞卷积(dilated convolution)?
【5】【语义分割】——阅读代码理解/Semantic Flow for Fast and Accurate Scene Parsing
【6】PaddleSeg官网

语义分割评价指标

  1. 像素精度(pixel accuracy ):每一类像素正确分类的个数/ 每一类像素的实际个数
  2. 均像素精度(mean pixel accuracy ):每一类像素的精度的平均值
  3. 平均交并比(Mean Intersection over Union):mIoU是指求出每一类的IOU取平均值。IOU指的是两块区域相交的部分/两个部分的并集
  4. 权频交并比(Frequency Weight Intersection over Union):每一类出现的频率作为权重

模型性能参数比较

模型性能参数比较的表格来自PaddleSeg的官方GitHub网址,模型由Paddle框架实现,推理时间是使用CityScapes数据集中的图像进行100次预测取平均值的结果。
实例分割&语义分割:A mini-survey_第8张图片

基于全卷积的深度语义分割模型

目前基于 FCN 的语义分割方法通常面临3个挑战:

  1. 分辨率低: 通常随网络深度加深,逐渐降低的分辨率会导致空间信息损失;
    ——Encoder-Decoder结构获取高分辨率的特征图,SegNet,U-Net等
  2. 上下文信息缺失:像素级的特征的感受野不够,并且物体具有多尺度问题 (不同类别物体的绝对大小具有多尺度,同一类物体由于距离镜头的远近不同也具有多尺度);
    ——提高像素的特征感受野,ParseNet,PSPNet,Deeplab系列,DANet&CCNet(注意力机制),OCRNet等
  3. 边界错误:由于边界区域像素的特征表示通常具有较弱的判别性,所以很多语义分割的错误是分布在边界区域上的。

FCN

FCN首先将一幅 RGB 图像输入到卷积神经网络后,经过多次卷积及池化过程得到一系列的特征图,然后利用反卷积层对最后一个卷积层得到的特征图进行上采样,使得上采样后特征图与原图像的大小一样。
实例分割&语义分割:A mini-survey_第9张图片

ParseNet

ParseNet(ICLR 2016)提出了采用 Global Pooling 操作计算一个全局特征作为上下文信息去增强每个像素的特征表达。ParseNet 旨在提高每个像素的特征感受野, 以获取更丰富的上下文信息。
实例分割&语义分割:A mini-survey_第10张图片

PSPNet

PSPNet(CVPR 2017)提出了用 Pyramid Pooling Module来抽取多尺度的上下文信息,以解决物体多尺度的问题。具体来说,PSPNet 采用了4路并行的不同尺度的图像划分,分别将图像均匀的划分成6ⅹ6/3ⅹ3/2ⅹ2个子区域,然后在每个子区域上应用 Average Pooling 计算得到一个向量作为这个区域内所有像素的 (不同尺度划分下) 局部上下文信息。另外,PSPNet 也会采用 Global Pooling 计算得到的一个向量作为所有像素的全局上下文信息。
实例分割&语义分割:A mini-survey_第11张图片

DeepLab系列

DeepLabv2(PAMI 2017)提出了一种新的 Atrous Convolution (空洞卷积) 来抽取多尺度上下文信息。具体而言,DeepLabv2 采用了并行的3组具有不同膨胀率(dilation rate)的空洞卷积操作来计算每一个位置的上下文信息,后续的 DeepLabv3又额外引入了 Global Average Pooling 操作来增强每一个位置的上下文信息。
实例分割&语义分割:A mini-survey_第12张图片
DeepLabv3+模型的整体架构如图所示,它的Encoder的主体是带有空洞卷积的DCNN,可以采用常用的分类网络如ResNet,然后是带有空洞卷积的空间金字塔池化模块(Atrous Spatial Pyramid Pooling, ASPP)),主要是为了引入多尺度信息;相比DeepLabv3,v3+引入了Decoder模块,其将底层特征与高层特征进一步融合,提升分割边界准确度。从某种意义上看,DeepLabv3+在DilatedFCN基础上引入了EcoderDecoder的思路。对于DeepLabv3,经过ASPP模块得到的特征图的output_stride为8或者16,其经过1x1的分类层后直接双线性插值到原始图片大小,这是一种非常暴力的decoder方法,特别是output_stride=16。然而这并不利于得到较精细的分割结果,故v3+模型中借鉴了Encoder-Decoder结构,引入了新的Decoder模块。
实例分割&语义分割:A mini-survey_第13张图片
对于DilatedFCN,主要是修改分类网络的后面block,用空洞卷积来替换stride=2的下采样层,如下图所示:其中a是原始FCN,由于下采样的存在,特征图不断降低;而b为DilatedFCN,在第block3后引入空洞卷积,在维持特征图大小的同时保证了感受野和原始网络一致。
实例分割&语义分割:A mini-survey_第14张图片

OCRNet

OCRNet(ECCV2020)的主要思想是显式地把像素分类问题转化成物体区域分类问题,这与语义分割问题的原始定义是一致的,即每一个像素的类别就是该像素属于的物体的类别,换言之,与 PSPNet 和 DeepLabv3 的上下文信息最主要的不同就在于 OCR 方法显式地增强了物体信息。
OCR 方法的实现主要包括3个阶段:

  1. 根据网络中间层的特征表示估测一个粗略的语义分割结果作为 OCR 方法的一个输入 ,即软物体区域(Soft Object Regions)
  2. 根据粗略的语义分割结果和网络最深层的特征表示计算出 K 组向量,即物体区域表示(Object Region Representations),其中每一个向量对应一个语义类别的特征表示
  3. 计算网络最深层输出的像素特征表示(Pixel Representations)与计算得到的物体区域特征表示(Object Region Representation)之间的关系矩阵,然后根据每个像素和物体区域特征表示在关系矩阵中的数值把物体区域特征加权求和,得到最后的物体上下文特征表示 OCR (Object Contextual Representation) 。

当把物体上下文特征表示 OCR 与网络最深层输入的特征表示拼接之后作为上下文信息增强的特征表示(Augmented Representation),可以基于增强后的特征表示预测每个像素的语义类别。
实例分割&语义分割:A mini-survey_第15张图片
ASPP 与 OCR 方法的对比
如下图,ASPP红色像素块的感受野会包含汽车以外的区域,而OCR方法红色像素块的感受野是粗分割的汽车区域。
实例分割&语义分割:A mini-survey_第16张图片

SFNet

SFNet参考FPN的结构,加入了PPM模块(Pyramid Pooling Module)和FAM模块(Flow Alignment Module),提出了一种语义流(Semantic Flow)的模块来辅助不同的层的特征之间的融合。作者认为之间的方式没有很好的进行特征之间的传递是因为不同的层的特征对不齐(misalignment)。因为在不同层之间进行特征融合的时候,由于分辨率不同,需要进行上采样操作,同时,在多次的下采样和残差连接的时候都会使得不同层的特征之间对不齐。将特征图之间未对齐理解为一种运动,从而预测光流场来解决特征的对齐问题。
这篇文章的**语义流的目的就是使得特征之间能够尽量对齐的。**其想法来自于光流(Optical Flow),这是用于分析连续图像或者视频帧的动作,作者将不同层的特征看作是不同的视频帧,由于它们之间没有很好的对齐,所以看作是不同层发生的移动,通过光流的方式来得到这种移动,进而能够对未对齐的特征进行一定的修复使得它们能够对齐。
实例分割&语义分割:A mini-survey_第17张图片

DANet&CCNet

DANet使用自注意力机制捕获背景依赖,该模型可以自适应地集成局部特征及其全局依赖性。具体而言,作者在传统扩张的FCN之上附加两种类型的注意力模块,它们分别模拟空间和通道维度中的语义相互依赖性。Position Attention 模块通过对所有位置的特征进行加权和,有选择地聚合每个位置的特征。无论距离如何,相似的特征都将彼此相关。同时,Channel Attention模块通过整合所有通道映射中的相关特征来选择性地强调相互依赖的通道映射。利用这两种注意力模块来捕获图像中的全局信息。
实例分割&语义分割:A mini-survey_第18张图片
Position Attention Module:捕获特征图的任意两个位置之间的空间依赖,对于某个特定的特征,被所有位置上的特征加权和更新。权重为相应的两个位置之间的特征相似性。因此,任何两个现有相似特征的位置可以相互贡献提升,而不管它们之间的距离。具体地,对于网络输出的局部特征A(CxHxW),首先利用三个卷积层后得到B,C,D三个特征map。然后,对B,C,D分别reshape到(CxN),然后将B的转置与C相乘后,再通过softmax得到spatial attention map S(N,N),接着,将S的转置与D矩阵乘后,将结果reshape到(CxHxW),乘以一个尺度因子后再加上原始输入图像得到最后的输出map E。
实例分割&语义分割:A mini-survey_第19张图片
Channel Attention Module:每个高层次特征的通道映射都可以看作是一个特定于类的响应,不同的语义响应相互关联。通过探索通道映射之间的相互依赖关系,可以强调相互依赖的特征映射,提高特定语义的特征表示。先对A进行reshape到(CxN),然后A与A的转置进行矩阵乘,经过softmax后得到通道间的map X(CxC),之后再乘以A(CxN)得到的输出乘以尺度因子β后与原图相加后获得最后的输出E。

CCNet使用递归十字交叉注意(RCCA)模块来获取全图的上下文信息,这种模块比全局的自注意力机制要更高效。具体来说,对于每一个像素,使用一个新型的十字交叉注意力模块捕获该像素的十字交叉路径上的其他像素的上下文信息,通过递归使用这个十字交叉注意力模块(两次就能捕获全局),每个像素就可以捕获全局的依赖。使用类别一致性损失来监督十字交叉注意力模块产生更有判别性的特征。优点:(1)GPU memory friendly;(2)High computational efficiency;(3) The state-of-the-art performance
实例分割&语义分割:A mini-survey_第20张图片
实例分割&语义分割:A mini-survey_第21张图片
实例分割&语义分割:A mini-survey_第22张图片
实例分割&语义分割:A mini-survey_第23张图片

References
[1] Fully convolutional networks for semantic segmentation, CVPR2015
[2] Parsenet: Looking wider to see better, ICLR2016
[3] Pyramid scene parsing network, CVPR2017
[4] Deeplab: Semantic image segmentation with deep convolutional nets, atrous convolution, and fully connected crfs, PAMI2017
[5] Rethinking atrous convolution for semantic image segmentation, arXiv: 1706.05587
[6] Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation, CVPR2018
[7] Object-Contextual Representations for Semantic Segmentation, ECCV2020
[8] Dual attention network for scene segmentation, CVPR2019
[9] Ccnet: Criss-cross attention for semantic segmentation, TPAMI 2020、ICCV 2019
[10] Semantic Flow for Fast and Accurate Scene Parsing, ECCV2020 oral

你可能感兴趣的:(分割,计算机视觉,目标检测,深度学习,paddlepaddle)