语义分割

什么是语义分割?


语义分割,也称为像素级分类问题,其输出和输入分辨率相同(如题图中,左边为2048x1024分辨率的Cityscapes街景图像,输入模型,得到右边同样分辨率的语义图)。由此,语义分割具有两大需求,即高分辨率和高层语义,而这两个需求和卷积网络设计是矛盾的。

通俗且具体到实际图像上来说,语义分割其实就是对于细化版的分类,就是对于一张图像上说,传统的图像分类是把图像中出现的物体进行检测并识别是属于什么类别的,也就是对于一整张图片进行分类。那么现在就有人想对于图中每一个像素点都进行分类。与分类不同的是,深度网络的最终结果是唯一重要的,语义分割不仅需要在像素级别上进行区分,而且还需要一种机制将编码器不同阶段学习到的区分特征投影到像素空间上。

当我们把一张图上某一个像素点都进行分类后,每一个像素点都会有被赋予一个类别。当每一个像素都被标记上不同的类别之后,将每一个对应不同类别的像素点赋予新的颜色之后再次重新组合成一张图片。这个时候对于这张图片来说,从像素级别上就把所有所有进行了区分,赋予颜色重新再次连起来之后在图像上就表现出图中的某个物体从这整张图片上分割了下来且具备这物体的所有的语义信息。可以说图像分割就是图像分类的细推理,从粗推理到细推理的过程。
在这里插入图片描述

什么是图像中的语义信息?


处理的那个单元和周围单元的意思
从自然语言处理的角度,上下文就是指一个单词与其周围单词之间的关联。

  • 举个例子来说
图像的语义分为视觉层、对象层和概念层。

视觉层即通常所理解的底层,即颜色、纹理和形状等等,这些特征都被称为底层特征语义;
对象层即中间层,通常包含了属性特征等,就是某一对象在某一时刻的状态;
概念层是高层,是图像表达出的最接近人类理解的东西。

通俗点说,比如一张图上有沙子,蓝天,海水等,视觉层是一块块的区分,对象层是沙子、蓝天和海水这些,概念层就是海滩,这是这张图表现出的语义。

语义分割中的上下文信息


  • 上下文信息也可以被叫做上下文特征。 上下文这个概念听起来有点像是在自然语言处理的时候会用到的一个概念,我们平时在做文章阅读的时候也会遇到这个单词。但是,随着深度学习领域不断地发展,许多深度学习研究者都尝试着把NLP的处理方式应用到CV的处理上,同时CV的处理方式也应用到NLP上,所以图像和语言处理两家的边界能够被一些理论所连接起来。故我们可以把一些NLP中的概念代入到CV领域中能够帮助我们去解释一些现象。
  • 上下文: 上下文指的是图像中的每一个像素点不可能是孤立的,一个像素一定和周围像素是有一定的关系的,大量像素的互相联系才产生了图像中的各种物体,所以上下文特征就指像素以及周边像素的某种联系。 具体到图像语义分割,一般论文会说我们的XXX算法充分结合了上下文信息,意思也就是在判断某一个位置上的像素属于哪种类别的时候,不仅考察到该像素的灰度值,还充分考虑和它临近的像素。 对其再次解释可以理解为图像中该像素点的像素值与它周围的一些像素是具有一定的关系的,也就是说分割领域中是靠上下文信息来联系像素点之间的关系。因为图像是由像素点组成的,当图像上某个特定区域上的像素点产生了联系,这个区域在图像上就突出出来了,这个区域现在就是这个图像上独一为二的区域,也相当于从图像上分割出来了。所以上下文信息其实就是描述像素点之间的关联/关系的。所以我们对每个像素点进行分类之后根据像素点的类别去找这样的上下文信息,而类别信息就是作为图像上的语义信息。 其实感觉这样说还是有点模糊,毕竟个人认为上下文是一个没有公式定义的东西,更多的还是一种理念,像条件随机场,就是一种充分考虑了上下文信息的代表,局部连接的CRF只考虑局部上下文,全连接CRF考虑了全局上下文。

语义分割方法


常用的深度学习的语义分割主要有两种方法:

深度学习方法一般都是在分类网络上进行精调,分类网络为了能获取更抽象的特征分层,采取了Conv+pool堆叠的方式,这导致了分辨率降低,丢失了很多信息,这对分割任务来说肯定是不好的,因为分割是对每一个像素进行分类,会造成定位精度不高。但同时更高层的特征对于分类又很重要。

  • encoder-decoder方法:与经典的FCN中的skip-connection思想类似,encoder为分类网络,用于提取特征,而decoder则是将encoder的先前丢失的空间信息逐渐恢复,decoder的典型结构有U-Net/segnet/refineNet,该类方法虽然有一定的效果,能恢复部分信息,但毕竟信息已经丢失了,不可能完全恢复。
  • dialed FCN方法:deeplabv1提出的方法,将vgg的最后的两个pool层步长置为1,这样网络的输出分辨率从1/32变为1/8。可以保留更多的细节信息,同时也丢掉了复杂的decoder结构,但这种方法计算量大。

语义分割神经网络

对于语义分割而言,正如博文开头所说,输入和输出的图像分辨率必须相同,所以一般流程先会是先经过多个下采样层(一般为5个,输出原图1/32的特征图),从而逐步扩大视野获取高层语义特征 ,高层语义特征靠近输出端但分辨率低,高分率特征靠近输入端但语义层次低。高层特征和底层特征都有各自的弱点,各自的分割问题如图1所示,第二行高层特征的分割结果保持了大的语义结构,但小结构丢失严重;第三行低层特征的分割结果保留了丰富的细节,但语义类别预测的很差。
在这里插入图片描述
所以,我们就很自然可以想到将不同层的特征进行融合,,取长补短,分割经典工作FCN和U-Net均采用了这个策略,目标检测中常用的特征金字塔网络(FPN) 也是采用了该策略。目前比较主流的特征融合方式主要有两类,一类是FPN(先自下而上获取高层语义特征,再自上而下逐步采样高层语义特征,并融合对应分辨率的下层特征。)另一类是HRNet(自下而上包含多个分辨率通路,不同分辨率特征在自下而上过程中及时进行融合。)
在这里插入图片描述

在这里插入图片描述
一般来说,待融合的低分辨率高层特征一般通过双线性插值到低层特征的相同分辨率,然后通过相加或沿通道维拼接的方式进行融合。这里引入了两个问题,1.是否每个位置的高低层特征都是同等有效;2.高低层特征空间上存在对不齐的问题,简单上采样无法解决。‘

  • 对问题1,我们提出了GFF,借鉴LSTM中的Gate机制,在不同位置给高低层特征根据有效性,给予不同的加权。
  • 对问题2,最近arXiv上先后放出了两篇工作[1, 2],都是借鉴光流(对齐不同帧图像)来对齐不同层特征。其中,Semantic Flow [1]是基于FPN的自上而下策略,AlignSeg [2]是基于HRNet的自下而上策略。
    • Semantic Flow实现非常简单,首先引入Flow Alignment Module ,然后改造FPN。该方法由于没有使用常用的高层用带孔卷积替代下采样操作,整个网络计算量小、显存消耗少。
      在这里插入图片描述在这里插入图片描述
    • AlignSeg采用类似HRNet保持分辨率的做法(图7),在保持分辨率过程中使用特征对齐模块(AlignFA)进行不同分辨特征之间的融合。在这里插入图片描述

语义分割待解决的问题

  1. 用于特征对齐的最优网络结构应该怎么设计?目前是采用了类似FlowNet-S的结构,FlowNet-C结构不适合于该任务,原因是高低层特征
  2. 之间不能像前后帧图像对应层特征之间算相似性。
  3. 高低层特征对不齐的原因是什么?
  4. 能否在对不齐发生时就记录下来,而不是事后补救(类似SegNet那种记录Pooling Indices的方式)?
  5. 如何拓展到视频分割,同时处理时序上、高低层特征上的对不齐?
  6. 如何处理超高分辨率图像分割?

评价指标


可以从以下几个指标评价某个分割算法的好坏:

  • mIoU:这个指标是应用最多的,也是目前排名分割算法的依据。IoU就是每一个类别的交集与并集之比,而mIoU则是所有类别的平均IoU。论文均使用这一指标比较。
  • speed:由于有些分割算法是针对实时语义分割设计的,所以速度也是一个很重要的评价指标,当然评价速度需要公平比较,包括使用的图像大小、电脑配置一致。
    当然还有其他指标,如pixel accuracy(PA)mean accuraccy(MA) 等。
    下面以一个简单的例子,说明怎么计算mIoU,由于分割也是分类问题,分类问题的指标一般使用混淆矩阵来求解。

MIOU:
M I o U = 1 k + 1 ] ∑ i = 0 k p i i ∑ j = 0 k p i j + ∑ j = 0 k p j i − p i i MIoU=\frac{1}{k+1}]\sum^k_{i=0}\frac{p_{ii}}{\sum^k_{j=0}p_{ij}+\sum^k_{j=0}p_{ji}-p_{ii}} MIoU=k+11]i=0kj=0kpij+j=0kpjipiipii
其中 k + 1 k+1 k+1为类别数, p i i p_{ii} pii表示 T P TP TP p i j p_{ij} pij表示 F N FN FN p j i p_{ji} pji表示 F P FP FP i i i表示真实类别, j j j表示其他类别),则每一个类别的 I o U IoU IoU可以看作, I o U = T P T P + F N + F P IoU=\frac{TP}{TP+FN+FP} IoU=TP+FN+FPTP.
以三个类别为例,如下是一个混淆矩阵:

在这里插入图片描述

对于类别1:TP=43,FN=7,FP=2;类别2:TP=45,FN=5,FP=6;类别3:TP=49,FN=1,FP=5.因此:IoU1=43/(43+2+7)=82.69%,IoU2=45/(45+5+6)=80.36%,IoU=49/(49+1+5)=89.09%,因此mIoU=84.05%.其实就是矩阵的每一行加每一列,再减去重复的TP。

目前比较经典的网络

模型分数 (VOC2012)
FCN67.2
SegNet59.9
Dilated Convolutions75.3
DeepLab (v1 & v2)79.7
RefineNet84.2
PSPNet85.4
Large Kernel Matters83.6
DeepLab v385.7

参考文献和资料


[1] Xiangtai Li, Ansheng You et al. Semantic Flow for Fast and Accurate Scene Parsing. ECCV, 2020.

[2] Zilong Huang et al. AlignSeg: Feature-Aligned Segmentation Networks. arXiv: 2003.00872.

[3] Xiangtai Li et al. GFF: Gated Fully Fusion for Semantic Segmentation. AAAI, 2020.

[4] Rudra P K Poudel et al. ContextNet: Exploring Context and Detail for Semantic Segmentation in Real-time. arXiv:1805.04554.

[5] Tsung-Yi Lin et al. Feature Pyramid Networks for Object Detection. CVPR, 2017.

[6] Ke Sun et al. Deep High-Resolution Representation Learning for Human Pose Estimation. CVPR, 2019.

[7] Junyi Feng et al. How to Train Your Dragon: Tamed Warping Network for Semantic Video Segmentation. arXiv:2005.01344.

[8] Ho Kei Cheng et al. CascadePSP: Toward Class-Agnostic and Very High-Resolution Segmentation via Global and Local Refinement. CVPR, 2020.

[9] Ping Hu et al. Real-time Semantic Segmentation with Fast Attention. arXiv:2007.03815.

[10] Dong Zhang et al. Feature Pyramid Transformer. ECCV, 2020.

[11] Yuxiang Wei et al. Learning Flow-based Feature Warping for Face Frontalization with Illumination Inconsistent Supervision. ECCV, 2020.

[12] Jun Gao et al. Beyond Fixed Grid: Learning Geometric Image Representation with a Deformable Grid. ECCV, 2020.

[13] Jianbo Liu et al. EfficientFCN: Holistically-guided Decoding for Semantic Segmentation. ECCV, 2020.

[14] Yimian Dai et al. AFF: Attentional Feature Fusion. arXiv:2009.14082.

[15] Haotian Liu et al. YolactEdge: Real-time Instance Segmentation on the Edge (Jetson AGX Xavier: 30 FPS, RTX 2080 Ti: 170 FPS) arXiv:2012.12259.

[16] Ping-Yang Chen et al. Parallel Residual Bi-Fusion Feature Pyramid Network for Accurate Single-Shot Object Detection. arXiv:2012.01724.

[17] Lin Song et al. Fine-Grained Dynamic Head for Object Detection. arXiv:2012.03519.

[18] 知乎:https://zhuanlan.zhihu.com/p/110667995

[19] 语义分割中的深度学习方法全解.从FCN、SegNet到各版本DeepLab:https://blog.csdn.net/scutjy2015/article/details/74971060

[20] Context Encoding for Semantic Segmentation----用于语义分割的上下文编码:https://blog.csdn.net/weixin_42702666/article/details/89451468

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐