语义分割方法总结与综述

语义分割论文

一个position的上下文/语境,典型地依赖于一系列的positions,例如周围的像素点、全局的像素点。

最早的研究主要集中在空间尺度上下文(spatial scale of contexts),例如ASPP和PPM,提取多尺度上下文(multi-scale contexts)

之后考虑一个位置与其上下文位置之间的关系,并为相似的表示产生更高权重,加权聚合上下文位置表示,self-attention/Non-local,例如DANet、CFNet、OCNet。

分配给一个像素的类标签是该像素所属的对象或者Patch的主要类别,例如ACFNet、OCRNet、ORDNet。(类别/区域)
在这里插入图片描述

FCN作为现代语义分割方法的基础,在之后出现了全局上下文、注意力以及高级低级特征融合等方法的改进。

Fully convolutional networks for semantic segmentation. CVPR 2015
FCN论文

Dilated convolution

典型特点:由于扩张卷积的特性,可以在提取特征的过程中保留模型的分辨率,在通过处理之后,直接上采样得到最终结果。这种方法显着增加计算和存储器,从而限制了可以使用的骨干网络的类型。

1、PSPNet

Pyramid scene parsing network. PSPNet Paper

2、PSANet

PSANet: Point-wise spatial attention network for scene parsing. PSANet Paper

3、Deeplab系列

Deeplabv3+: Encoder-decoder with atrous separable convolution for semantic image segmentation. Deeplab Paper

low-level & high-level information fusion

2019 CVPR DFANet:Deep Feature Aggregation for Real-Time Semantic Segmentation

重复使用高级语义特征来结合低级细节特征,通过编码器编码,以获得融合了低级细节特征和高级语义特征的编码特征,直接用来产生语义分割结果。
在这里插入图片描述

2020 PAMI Deep High-Resolution Representation Learning for Visual Recognition

高分辨率对于Position-sensitive 任务至关重要,HRNet提出了产生高分辨率特征的Backbone:

并行地连接从高到地的分辨率卷积流

在不同尺度分辨率间反复交换信息

首先通过stem(2 stride=2 3*3 conv),来将分辨率降为输入图像尺寸的1/4,在主体部分包含了:

Parallel Multi-Resolution Convolution

从一个高分辨率的卷积流作为第一个stage,逐步地添加由高分辨率到低分辨率的卷积流,组成next stage;并行地连接不同尺度的卷积流,每个stage的并行的卷积流包括前一个stage并行的卷积流以及额外的低分辨率的卷积流。

Repeated Multi-Resolution Fusions

目标是交互多尺度分辨率特征表示的信息,以为low-level high-resolution特征添加高级语义,为high-level low-resolution的特征添加细节特征,通过反复融合来自多分辨率流的表示来增强位置敏感性。

对于生成低分辨率特征,使用stride=2 3*3 conv来降维度

对于生成低分辨率特征,通过双线性上采样,并通过1*1卷积来对齐通道数

对于分辨率对齐的特征,直接为其本身

Representation Head

HRNet V1: 仅使用高分辨率特征,舍弃其他特征

HRNet V2: 对低分辨率特征进行双线性插值上采样,并Concat之后通过1*1卷积来融合四种分辨率特征表示

HRNet V2p:将HRNet V2的输出下采样到不同尺度

Instantiation

residual units; 2 3*3 ConvModule

modularized block: 4 residual units

1st stage:4 residual units + 3*3 Conv

2nd stage:1 modularized block

3rd stage:4 modularized block

4th stage: 3 modularized block
在这里插入图片描述
在这里插入图片描述

Encoder-Decoder/U-Net

典型特点:编码器通常下采样到32x,在恢复尺寸的过程中,编码器解码器逐步上采样并将来自前馈网络的高级特征与低级特征相结合,最终生成具有语义意义的高分辨率特征。

1、Panoptic Feature Pyramid Networks CVPR 2019
paper

Feature Pyramid Networks for Object Detection
Paper

在之前的全景分割任务中使用了基于联合任务的独立且不相似的网络,分别用于实例分割和语义分割。Panopific FPN在架构层次统一方法,通过在实例分割方法Mask R-CNN中使用共享的FPN骨干的语义分割分支,来进行全景分割,同时这种方法成为一种轻量级、表现极佳的语义分割方法。。其使用的语义分割模型策略使用backbone+FPN-neck+FPN-head,这种语义分割方法比基于扩展卷积-8轻量,效率高于U-Net,大致相当于扩张卷积-16,并产生4x更高分辨率的输出:
在这里插入图片描述

Multi-Scale Context Feature

PPM & ASPP

与SOD任务相比,典型地语义分割网络使用的策略包括提高感受野,利用上下文等,而ASPP(Deeplab v3)和PPM(PSPNet)作为最经典的提高感受野、捕获全局信息的模块。

两者的区别主要在于PPM使用多尺度池化来有效的融合全局上下文信息,ASPP使用扩张率+卷积以提高感受野。
在这里插入图片描述

在这里插入图片描述

SOD更关注于细节的恢复,所以多用FPN结构以结合高分辨率的低级特征来恢复细节;语义分割在于对成片的区域进行类别分类,所以对图像下采样倍数较低。

在SOD任务中使用的ASPP多使用[1,2,4,6]的扩张率,以适应小分辨率(224 256 384等)、高倍下采样(16x、32x)的high-level feature map。

在语义分割任务中使用的ASPP多使用[1,12,24,36]扩张率,以适应大分辨率(5121024、769769等)、低倍下采样率(8x)的feature map,以获得更大的感受野

ECCV 2020 A Single Stream Network for Robust and Real-time RGB-D Salient Object Detection (Self-Attention+ASPP)

在ECCV2020:A Single Stream Network for Robust and Real-time RGB-D Salient Object Detection 提出了PAFEM

本质上相当于在ASPP中添加了Non-Local,在不同尺度上直接聚集特征会由于非显著区域的分散而削弱显著区域的表示能力,相较于平等地对待所有的空间位置,论文中对不同尺度的特征进行Non-Local增强了空间注意力,以便更关注视觉上重要的区域。通过融合注意增强的多尺度特征,构建了金字塔型特征提取模块(PAFEM)。在SOD任务中使用的扩张率为[1,2,4,6],调整为[1,12,24,36]以适应语义分割任务,并在mmseg中建立PAFEMHead.
在这里插入图片描述

ECCV 2020 Suppress and Balance: A Simple Gated Network for Salient Object Detection (Fold+ASPP)

在ECCV2020 Suppress and Balance: A Simple Gated Network for Salient Object Detection中提出了FoldConv_aspp

在Deeplabv3中提出了ASPP使用多个不同尺度扩张率的atrous convolutional layers。由于扩展卷积核的稀疏性,特别是在使用大膨胀率时,导致采样点之间的关联关系太弱,无法提取稳定的特征。在GateNet中使用了简单的折叠操作,进一步扩大了感受野,而且将每个有效采样位置从一个孤立点扩展到了一个2×2连通区域。通过这种fold、unfold方式,融合了更多的上下文信息,并保持了一定的局部相关性,为后续操作提供了容错能力。调整在SOD任务中的扩张率为[1,2,4,6],使用fold unfold的方法,并且使用[1,12,24,36]的扩张率,以融合更多的上下文信息,建立foldaspp_head.
在这里插入图片描述

Gated Path Selection Network for Semantic Segmentation (Gate+ASPP)

在这里插入图片描述

Relation Context Feature

Non-local

资料

CVPR 2019 Dual Attention Network for Scene Segmentation

在这里插入图片描述
在这里插入图片描述

论文地址:https://arxiv.org/pdf/1809.02983.pdf

同时计算channel和spatial方向上的attention map

ICCV 2019 Asymmetric Non-local Neural Networks for Semantic Segmentation

论文地址:https://arxiv.org/pdf/1908.07678.pdf

Github地址:https://github.com/MendelXu/ANN

在Non-local中主要探究了点与点之间的相似度关系,生成2D Attention map,有效地捕捉了对语义分割至关重要的远程依赖关系;对每个position的特征通过对所有postion点的特征加权进行更新,其需要较高的计算需求和GPU内存。相比于计算N*N个点间的相似性矩阵,ANN设计了非对称的Non-Local方法来计算N(点)*S(块)之间的相似性关系,在减少了计算量的同时,保留了局部信息的相关性。对于特征key和value,通过sampler(Pyramid Pooling)进行特征抽取,基于SPP的特征抽取有效地聚合了全局信息及上下文。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(在Pyramid Pooling之后,直接view之后concat,如果按照pspnet的方式,在中间添加1*1的卷积会怎么样?但是论文的出发点是减少模型的计算量和参数数量,所以放弃了这种卷积方式。)

Object Context Network for Scene Parsing(OCNet)

论文地址:https://arxiv.org/pdf/1909.11065v5.pdf https://arxiv.org/pdf/1809.00916.pdf

Github地址:https://github.com/openseg-group/OCNet.pytorch

  • "HRNet + OCR + SegFix"曾实现cityscapes rank-1

Interlaced Sparse Self-Attention for Semantic Segmentation

Arxiv

提出了Interlaced Sparse Self-Attention来提高语义分割中Self- Attention的效率。主要思想是:将dense affinity matrix分解为两个sparse affinity matrices的乘积。第一个注意力模块用于估计具有长空间间隔距离的位置子集中的亲和力,第二个注意力模块用于估计具有短空间间隔距离的位置子集内的亲和力。 这两个注意力模块的设计使得每个位置都能够接收来自所有其他位置的信息。 与原始的 self-attention 模块相比,我们的方法大大降低了计算和内存的复杂性,尤其是在处理高分辨率特征图时。 我们凭经验验证了我们的方法在六个具有挑战性的语义分割基准上的有效性。

ISNet将dense affinity matrix A (下图中a) 分解为两个sparse affinity matrices Al和As,其乘积为dense affinity matrix.

首先,我们将所有的输入位置像素划分为相同尺寸的Q个子集,每个子集都包含了P个像素位置:

对于long-range attention,我们从每个子集中采样一个像素位置来重建具有Q个像素位置的子集,这样可以得到P个子集。(代码:直接将P个像素位置按照通道排列)在每个重建的子集里的像素位置具有长空间空间距离。我们对每个子集执行Self-Attention,来计算稀疏的相似性矩阵,通过合并得到Al。对于short-range attention,我们对初始的Q个子集进行Self-Attention,来计算稀疏相似性矩阵,对自己内的局部像素位置计算获取了短程的注意力。

其次,通过将这两种attention合并,对于特征图中的每个像素位置,都能捕捉长短程的信息。
在这里插入图片描述

在(a)中每个输出像素位置的信息都从输入的每个像素位置中捕捉,建立了fully dense connections;在(b)中通过第一个/第二个置换操作用于将原本具有长/短空间间隔距离的位置组合在一起,建立了稀疏的链接。

在这里插入图片描述

ICCV 2019 CCNet: Criss-Cross Attention for Semantic Segmentation

在这里插入图片描述
在这里插入图片描述

TPAMI 2019 Smoothed Dilated Convolutions for Improved Dense Prediction

Arxiv

ICCV 2019 ACFNet: Attentional Class Feature Network for Semantic Segmentation

整个ACF模块包括CCB和CAB模块,整个类似于Self-Attention原理,其中Coarse Mask Prior作为Key和Value,由Backbone计算的F作为Query,由Key和Query计算相似性矩阵(实现了相同class region区域内的特征聚合,得到的N*C特征相当于为每个类别产生了C通道的特征,作为attention),用来加权Value(用每个类别的C通道特征加权Coarse Mask Prior),从而得到了由Pixel-Level Feature增强的Region-Feature。

在这里插入图片描述
在这里插入图片描述

ECCV 2020 Object-Contextual Representations for Semantic Segmentation(OCRNet)

Code is available at: https://git.io/openseg and https://git.io/HRNet.OCR .

类似于ACFNet + ANN的结合体,Coarse segmentation引导的区域聚合 + 像素-patches的特征聚合。

Paper Result:OCRNet在Cityscapes val上使用single-scale text,结果为79.6.

相比于ACF,除了细节上的小差异之外,最大的不同是,region formation和pixel-region formation,OCRNet中考虑了pixel-region表示的关联性,以此实现计算region中像素相关性,而生成最终的Object Contexture Representation;而ACF仅仅考虑了region特征。

We compare our approach with other two mechanisms that do not use the region representation for estimating the pixel-region relations:

(i) Double-Attention uses the pixel representation to predict the relation;

(ii) ACFNet directly uses one intermediate segmentation map to indicate the relations.

动机:分配给一个像素的类标签是该像素所属的对象的类别,通过利用相应类的对象区域的表示来增强一个像素的表示,将同类上下文像素和不同类上下文像素区分开。

像素的标签是像素所属对象的类别,OCRNet使用周围对象类来表征一个像素的object-contextual representations:

首先将上下文像素划分为一组Soft Object Regions,每个Object Regions对应一个类别,即使用Backbone+FCN得到的Coarse soft segmentation,基于 ground-truth segmentation作为监督来计算对象区域(object regions)

通过聚合相应object regions中的像素表示,估计每个对象区域的表示(object regions representation)。

计算each pixel和each regions之间的相似性矩阵(Pixel-Region Relation),加权object region representation得到object contextual representation(OCR)

最后使用OCR来增强每个像素的表示,并与pixel representation聚合得到最终特征。

(个人理解本质上是Region和Pixel的self-attention,相比于Non-Local为每个position计算所有position的加权特征和,OCR模型计算了每个position与所有区域的加权特征和。)
在这里插入图片描述

Hybrid Multiple Attention Network for Semantic Segmentation in Aerial Images

Arxiv

对于高分辨率的图像,具有局部感受野的卷积无法从整张图片来建模全局依赖(现有一些模型都是用更大的感受野/self-attention,例如PPM、ASPP、Non-Local等),基于注意力的方法可以捕获远程依赖关系并进一步重建特征图以获得更好的表示。受限于单纯的空间和通道注意力的角度以及自注意力机制的巨大计算复杂性,不太可能对复杂光谱遥感图像的每个像素对之间的有效语义相互依赖性进行建模。Hybrid Multiple Attention Network(HMANet)可以自适应从空间、通道和类别的角度以更有效和高效的方式自适应捕获全局相关性。

Attention-based model:信息冗余不利于特征表示;基于注意力的方法受限于空间和通道的维度,忽略了基于类别的信息,而基于类别的信息与模型的最后一次卷积直接相关。缺乏基于类别的信息和高昂的计算代价是基于注意力的方法面临的两个严峻挑战。

类别级注意力:类似于OCRNet。

区域级注意力:在复杂场景中,同一类别对象特征存在较大差异。Self-Attention为类别相同、特征表示差异较大的像素计算产生错误的相似度矩阵,造成性能衰减。而无效的冗余信息不利于特征表示。提出了区域注意力表示,按区域表示可以更有效的方式捕获像素之间的远程上下文信息。RSA模块是将密集的逐点相似性矩阵分解为两个稀疏的区域级别的对应物,其中任何一个都可以通过平均池化方法以更稀疏的方式有效地捕获全局上下文。结合两个相似度矩阵,RSA可以捕获局部特征的丰富空间上下文信息。

RSA将密集的特征表示,在重组后以稀疏和有效的方式获取区域级(region-wise)依赖和特征表示。首先我们通过Permute(置换)操作将输入特征图划分为区域,每个区域都被送入自适应池化层以获取区域特征表示。我们将每个区域的point-wise特征表示合并来获得整个图像的稀疏特征表示。对稀疏特征表示执行Self-Attention来建立区域级长程关系。这种对区域特征进行Self-Attention,能够凭经验捕捉所有区域的长程上下文特征,但是依旧缺乏Pixel-Level的像素级链接关系。为了从区域的角度利用更明确的上下文依赖关系,我们使用shuffle attention来交替池化相应的子区域并分别计算其自注意力表示,实现空间信息的互补表示。进一步的实验表明,两个子区域的注意力加权表示的级联可以有效地增强上下文依赖性,优于像素级Non-Local算子。
在这里插入图片描述
在这里插入图片描述

ECCV 2020 Disentangled Non-Local Neural Networks (DNLNet)

论文中提出了Non-Local模块的self-attention可以被分解为两个部分,一个 whitened pairwise term用来计算嵌入向量空间里两个像素间的关系,一个 unary term用来表示单个像素对全局像素的影响,用来表示显著性边界。如左图前三行所示,通过对Non-Local进行实验,独立的pairwise和unary获得特征表现强于在NL中联合训练,且独立训练的unary性能就优于NL,这表明耦合紧密的两部分不利于视觉线索的学习,从而影响判别特征的学习。DNL通过使用独立的Softmax和embedding Matrices,将基于点乘的attention分离为两个模块,pairwise(specifically) 和 unary(generally),解决在NL中联合训练的性能衰减问题,且优于NL中独立训练的pairwise和unary。(在MMseg中集成了,但是与论文结果存在些许出入,分析:训练记录)

看完源码之后的感受,与其说从Non-local中分离出unary的特征attention,其实相当于求一个global spatial attention(N1HW,通过简单地卷积、Softmax,相当于为当前特征的每个像素生成了一个全局的注意力),与Value加权计算得到1*C,来为每个channel通道计算一个全局的权重。

在这里插入图片描述

ECCV 2020 Tensor Low-Rank Reconstruction for Semantic Segmentation

论文地址:https://arxiv.org/pdf/2008.00490.pdfGithub地址:https://github.com/CWanli/RecoNet

依赖于2D similarity Matrix的Non-Local,在执行矩阵计算时牺牲了通道间的上下文关系,以增强空间上下文关系。根据张量规范多态分解理论,RecoNet中将3D的high-rank矩阵化归到1D的low-rank张量,由张量生成模块(TGM)从中抽取对应每个维度的一阶张量来表示上下文信息;在之后通过张量重建模块(TRM)从一阶张量中重建高阶3D特征。

在这里插入图片描述
在这里插入图片描述

论文中提出的方法,在TGM的每个模块中使用了sigmoid作为激活函数,理由如下:1) 每个被激活函数缩放的元素都可以视为attention,表征了某种上下文特征的权重。 2) 所有表征上下文信息的rank-1 tensors应该都是非线性相关的,以保证每个tensors都具有不同的上下文信息,其目的是生成一个3D的attention map。 问题:当使用了sigmoid对所有的rank-1 tensors以模拟attention时,在TRM中将三个上下文权重相乘,弱化了每个方向上的特征的独特性,我们可以尝试将生成rank-1 tensors attention的过程转化为key-value的过程或者简单的attention(x)x;并且在这个过程中忽略了三个特征间的相互关系,我们可以将C11、1H1、11W经过reshape和concat,变成(C+H+W)11经过卷积处理生成了31*1的attention,用来加权3个rank-1 tensors。

TIP 2020 ORDNet: Capturing Omni-Range Dependencies for Scene Parsing

论文地址:https://arxiv.org/pdf/2101.03929.pdf 与DNL相似的思路之一是,从Non-Local中提取全局的unary特征/增强attention map中响应较大位置特征,以提取元素对于空间的global attention。

核心思想:在计算self-attention的过程中,距离当前像素较远处的通常关联度较低,其产生的响应会产生噪声,影响特征聚合。可以通过self-attention捕捉long-range dependencies,可以通过卷积捕捉short-range dependencies,long-range和short-range之间仍然存在很大gap,这在很大程度上降低了模型在复杂自然场景图像中应用于不同空间尺度和关系的灵活性。ORDNet通过在局部补丁里应用self-attention,建立middle-range dependencies,并通过加权long-range dependences来强调与其他区域具有较大相关性的空间区域以更准确地利用远程依赖。对在self-attention中生成的相似性矩阵,每个position为其他positions贡献不同的注意力权重以进行上下文聚合。对于每个position,它与其他位置加权权重的总值表明了其与其他position的相关性以及对全局上下文的重要性。其表征了该位置与其他位置的相关性程度强弱。The features of positions contributing higher attention weights to others encode the common patterns of the whole image, including main elements appearing in the scene, large-area continuous background, etc.

在middle-range dependences中,输入特征被分离成了2*2的patches,并且分别对每个patch执行self-attention,从而将自注意力范围从整个feature map缩减为补丁级别,以从相关性更高的局部位置提取有效地相关性特征。
在这里插入图片描述
在这里插入图片描述

CVPR 2021 Learning Statistical Texture for Semantic Segmentation

论文地址:https://arxiv.org/pdf/2103.04133.pdf

现有的语义分割工作主要专注于学习高级语义的上下文,一些网络为了捕捉精确的边界和低级纹理特征使用了skip-connection来填充细节。然而低级纹理特征不仅包含了Local Structure,同时也包括了Global Statistical knowledge。STL-Net充分利用低级纹理特征,提出了统计纹理特征,分析低级信息的分布并有效地利用它们。

定义了Quantization and Counting Operator (QCO)以统计的方式描述纹理特征。具体地,输入图像的统计纹理通常种类繁多,并且在谱域中是连续分布的,这在深度神经网络中难以提取和优化。在 QCO 中,我们首先将输入特征量化为多个levels。 每个level都代表一种纹理统计,通过它可以很好地对连续的纹理进行采样,以便于描述。 量化后,计算每个级别的强度以进行纹理特征编码。

基于QCO,STL-Net提出了两个模块,1、Texture Enhance Module (TEM),来捕捉纹理相关特征并增强纹理细节;2、Pyramid Texture Feature Extraction Module (PTFEM),来有效提取不同尺度下的统计纹理特征。

1、 Local structural property:用来关注局部模式,包括边界、平滑度、粗糙度等,可以看作spectral domain analysis。

2、Global statistical property:基于低级信息(像素值/局部区域属性)的统计属性,关注于图像的分布分析,例如histogram of intensity。对于图像,经过直方图均衡增强之后,会包含更丰富的细节特征,有益于分割。在传统方法中已经出现了一些利用统计信息的方法,但没有机制在CNN架构下显式地提取和利用纹理统计特征用于语义分割。

在这里插入图片描述
在这里插入图片描述

ICCV 2021 ISNet: Integrate Image-Level and Semantic-Level Context for Semantic Segmentation

论文地址

Co-occurrent visual pattern使得上下文特征聚合成为增强语义分割中像素表示的通用范例,现有的方法基本从整个图像的角度来建模上下文,即聚合图像级别的上下文特征。现有方法弱化了相同类别的像素表示的重要性,即语义级别的上下文特征;

ISNet提出了聚合图像级和语义级上下文信息。首先一个Imgae-level context module(ILCM)用来捕捉整个图像的每个像素的上下文信息(全局平均池化和Feature-x Concat,再与x使用self-attention计算相似度矩阵);其次使用一个semantic-level context module(SLCM)来聚合同类的每个像素的表示(对每个类别像素点进行了特征的加权,再对特征进行聚合,和x计算相似度矩阵),类别区域受到分割真值监督;最终,分别计算每个像素表示特征与image-level上下文信息、semantic-level上下文信息的相似度矩阵;最后通过加权聚合图像级上下文信息和语义级上下文信息以相似性作为权重来增强像素表示。

在Self-attention中,每个像素的上下文信息被不平衡的从所属类别区域和其他类别区域中捕获,例如,边界或小尺度对象区域中的像素倾向于从其他对象的区域捕获更多的上下文信息。 由于一个像素的标签是该像素所属对象的类别,来自其他对象的过多上下文信息可能会导致网络将这些像素错误地标记为其他类别。在OCR中,即使使用了代表区域特征的R和像素级特征的P计算相似性矩阵,对于P中的每个像素特征进行上下文信息聚合,依旧是从所有的Region(category)中获取相关的上下文信息。

ISNet通过聚合图像级上下文信息和语义级上下文信息来增强像素表示。
在这里插入图片描述

Github源码:

通过Backbone获得的特征为x,通过Decoder得到粗糙的初始分割结果preds,其被真值监督。对于preds每个像素位置选择对应的最大权重的类别标签,得到了一通道的类别图;

对于每一个类别,我们可以计算得到对应的二值图,则可以按当前类别得到所有相关归属于该类别的像素点位置;

根据preds[:, class_id]中得到对应类别的得分图,根据二值图像,可以得到实际归属于该类别的每个像素点得分,并使用Softmax,从而实现了在每个类别中独立进行加权。

def forward(self, x, preds):
        inputs = x
        batch_size, num_channels, h, w = x.size()
        num_classes = preds.size(1)
        feats_sl = torch.zeros(batch_size, h*w, num_channels).type_as(x)
        for batch_idx in range(batch_size):
            # (C, H, W), (num_classes, H, W) --> (H*W, C), (H*W, num_classes)
            feats_iter, preds_iter = x[batch_idx], preds[batch_idx]  # 得到当前图像的特征和预测map
            feats_iter, preds_iter = feats_iter.reshape(num_channels, -1), preds_iter.reshape(num_classes, -1)
            feats_iter, preds_iter = feats_iter.permute(1, 0), preds_iter.permute(1, 0)
            # (H*W, )
            argmax = preds_iter.argmax(1)  # 得到一通道图像,每个像素点对应的类别序号
            for clsid in range(num_classes):
                mask = (argmax == clsid)  # 根据类别序号,确定每个类别对应的二值图像
                if mask.sum() == 0: continue
                feats_iter_cls = feats_iter[mask]  # 在特征图中取出对应当前类别的像素点特征,例如有N个像素点,则特征图为[N, C];在粗糙预测中对应类别A的相关像素点特征
                preds_iter_cls = preds_iter[:, clsid][mask]  #  尽管当前类别为A,但是在argmax的时候,置信度不同,可以作为加权权重,取出属于类别A的像素对应类别A的得分
                weight = F.softmax(preds_iter_cls, dim=0)  # 使用Softmax归一化,对feats进行加权
                feats_iter_cls = feats_iter_cls * weight.unsqueeze(-1)
                feats_iter_cls = feats_iter_cls.sum(0)
                feats_sl[batch_idx][mask] = feats_iter_cls
                # 此时得到的是在对应类别mask内,进行了加权的像素级特征,在之后的类别里,这些像素点不会被重复处理了;对同一类别的像素点分配相同的值。
        feats_sl = feats_sl.reshape(batch_size, h, w, num_channels)
        feats_sl = feats_sl.permute(0, 3, 1, 2).contiguous()
        feats_sl = self.correlate_net(inputs, feats_sl)
        
        return feats_sl

Long-range & Short-range

BMVC 2019 Global aggregation then local distribution in fully convolutional networks

论文地址:https://arxiv.org/pdf/1909.07229.pdf

代码地址:https://github.com/lxtGH/GALD-DGCNet

全局聚合(Global Aggregation)通常依赖于large patterns特征,趋向于平滑small patterns features,例如边界和小的物体。GA可以显著地聚焦到显著对象上,改善模型在大物体上的性能表现,但是平滑了小物体对应的区域,。为了解决这个问题,GALD设计了Global Aggregation和Local Distribution,在维护了GA全局结构的同时,恢复了细节。

对于Backbone计算特征,首先通过Global Aggregation,由于没有额外的监督,在生成特征中,C通道潜在地描述了特征的patterns。对于每个c通道的特征,学习空间算子以基于图片的激活切片来重新计算图像中patterns的空间范围。

对于每个channel/patterns的空间算子被建模为一系列的深度卷积层,通过stride为d的卷积层进行下采样,再进行上采样和激活函数sigmoid,得到了0-1的HWC的特征图,其中包含了每个pattern的mask map,描述了每个pattern重新计算的空间范围。

根据重新计算的each position (HW) each pattern © 的空间范围来为经过全局聚合的特征进行加权。

Local distribution M 在全局信息和局部细节特征(from backbone)之间添加了对全局特征的逐点权衡;
在这里插入图片描述

在Coarse Data上的训练方法:

使用Batch size=16、固定的BN层以及更大的crop尺寸在2w Coarse Data上进行预训练 50k iterations

使用Batch size=8、更小的学习率在fine-data上进行fine-tune 10k iterations

MS/Flip 82.9%

Graph Convolution Net

BMVC 2019 Dual Graph Convolutional Network for Semantic Segmentation

在这里插入图片描述

Real-Time

在这里插入图片描述

Speed-Accuracy performance comparison on the Cityscapes test set.

解决实时语义分割的主流思路:

轻量级 Backbone:DFANet、DANet

Multi-branch:ICNet、BiSeNetV1、BiSeNetV2

低级细节特征与高级语义特征的融合

对于减少主分支的计算量:

1)可以使用原始分辨率,但不使用扩张卷积来维护空间分辨率

2)使用4x图像分辨率,可以使用扩展卷积来维护空间分辨率

ECCV 2018 BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation

在这里插入图片描述

在(a)中通过crop或者resize图像尺寸来减少计算量,丢失的空间信息弱化了对于边界、细节的预测;通过Network Pruning,弱化了特征向量空间的表征能力;ENet Drop Stage,放弃了最好stage的下采样,无法获得足够的感受野来捕获大物体的相关信息。

在(b)中使用U-Net结构,通过依次聚合编码器特征来逐渐提高分辨率并补充细节特征;在高分辨率特征图上的操作降低了推理的速度,U型结构依旧没办法从NetWork Pruning中有效地恢复空间特征。

BiseNet具有Spatial Path和Context Path,旨在分别处理空间细节信息和具有高感受野的上下文特征。对于SP,堆叠了三个卷积层将图像下采样到8x,保留了丰富的细节特征并维持空间尺寸大小;对于CP,在Xception的尾部添加了全局平均池化以获得最大的感受野。论文中同时提出了Feature Fusion Module(FFM)和Attention Refinement Module(ARM)来聚合特征。
在这里插入图片描述

语义分割任务需要丰富的空间信息和较大的感受野,模型通常牺牲空间分辨率来实现实时的推理速度和较低的性能表现。

BiseNet引入来一个小步长的Spatial Path来维护空间信息和生成高分辨率的空间细节特征;同时使用Context Path来获得有效感受野和上下文特征;解耦空间细节信息维持和高感受野。

提出了Feature Fusion Module来有效地聚合特征和Attention Refinement Module来细化特征。

在使用Res-101作为baseline的情况下,结果高于PSPNet、Deeplab v2;当使用轻量级Backbone时,模型能够实现实时速度和高精度。(结果比同为ECCV的工作ICNet高很多)

在消融实验中证明,Global average Pooling以及ARM的联合使用提供了高额的性能提升(~+3%),而基于FFM的SP分支相比于baseline仅提升1.4%。

ECCV 2018 ICNet for Real-Time Semantic Segmentation on High-Resolution Images

ICNet基于PSPNet(PSPNet作者)进行了修改,认为图像分辨率是影响实时语义分割网络速度的重要原因。ICNet利用了低分辨率图片的高推理速度和高分辨率图像的高推理性能,从低分辨率图像中经过语义分割网络来得到粗糙的低分辨率预测,使用高分辨率图像来提取低级细节特征,通过不断地为Cascade Fusion Unit和Cascade Label Guidence引入高分辨率特征,从而逐渐提高精度。

ICNet使用了图像级联的策略,从大分辨率图像(1x)中抽取浅层低级特征来维护空间特征(类似于BiseNet 的Spatial Path);为了减少计算量,对于小分辨率图像(4x)提取高级语义特征,使用Dilated Conv来维护空间分辨率和高感受野的语义特征。

在top分支中尽管由于低分辨率缺失了相关的边界信息和空间细节,但是已经可以捕捉到大量有效的高级语义细节;基于可信的粗糙预测结果,所以使用对参数进行限制的middle分支和bottom分支;对于middle分支和top分支的前几层共享参数,在bottom分支使用轻量级的多层卷积,所以不会造成较大的计算负担。在top分支和middle分支的输出进行了监督,并分配了0.4的对应权重。
在这里插入图片描述

类似的思路和结构,为什么ICNet的性能相比于BiseNet差距极大?

  1. ICNet同时利用了低分辨率的高级语义特征和高分辨率的低级细节特征,相比于BiseNet基于FFM的CP和SP方法的性能基本持平;

  2. ICNet中对16x、8x、4x的预测结果进行了监督,BiseNet对CP的最后两个stage的特征进行额外的监督;

  3. BiseNet中的GP和AFM提供了大量的性能提升,证明了Attention的有效性。

  4. ICNet因为复用了部分编码器,并且使用了2048*1024分辨率图像作为输入;BiseNet使用1536x768分辨率作为输入;所以在推理速度上也存在比较大的gap;

  5. U-Net结构对于恢复空间特征的重要作用。

BMVC 2018 Guided Upsampling Network for Real-Time Semantic Segmentation

在这里插入图片描述
在这里插入图片描述

共享参数在减少参数量的同时可能隐式地带来正则化效果,所以两分支编码器(1/2,1/4)共享参数能过带来更高的性能;

当使用三分支共享参数编码器(1,1/2,1/4)在显著地提升性能的同时,也损失了速度上表现,慢于实时速度。

CVPR 2019 DFANet: Deep Feature Aggregation for Real-Time Semantic Segmentation

在这里插入图片描述

高级语义特征通过连续地结合低级细节特征来抽象出有效的特征,同时具有大感受野和细节空间特征;

CVPR 2019 Partial Order Pruning: for Best Speed/Accuracy Trade-off in Neural Architecture Search

2020 Bisenet v2: Bilateral network with guided aggregation for real-time semantic segmentation

在这里插入图片描述

WACV 2021 RGPNet: A Real-Time General Purpose Semantic Segmentation

在这里插入图片描述
在这里插入图片描述

CVPR 2021 Rethinking BiSeNet For Real-time Semantic Segmentation

在BiSeNet中增添了额外的Spatial Path来编码空间信息是耗时的,并且由于任务特定设计的缺陷,从预训练任务(例如图像分类)借用的主干可能对图像分割效率低下。
在这里插入图片描述

  1. 设计了一个Short-Term Dense Concatenate module(STDC),其中使用了short-term的多尺度/感受野特征级联,引导多尺度特征表示。MobileNet、ResNet等为分类设计的模型在应用于分割领域时需要进行调整。在图像分类任务模型中倾向于在更高的层使用更大的通道数。但是在语义分割任务中,我们关注于可扩展的感受野和多尺度信息(scalable receptive field and multi-scale informations)。低级特征需要足够的通道数来编码具有较小感受野的更细粒度的信息,而具有更大感受野的高层更关注于高级特征的归纳,使用和低层相同的通道数,可能会造成信息的冗余。STDC以几何级数的方式逐渐减少来精心调整block中滤波器的数目;最终的输出来自于所以blocks的聚合,能保留可扩展的感受野和多尺度信息。
    在这里插入图片描述

  2. 在编码器中没有使用BiSeNet中耗时的附加分支,而是使用Detail Guidance 模块来引导low-level layers来进行空间细节的学习。首先使用Detail Aggregation Module来生成细节真值,接着使用binary cross-entropy loss和dice loss来优化细节信息的学习任务,可以被认为边信息学习。而边信息仅在训练阶段中被使用,帮助编码器low-level layer学习空间细节,并且不会为推理过程造成额外负担。
    在这里插入图片描述

  3. 将来自low-level layers的空间细节和high-level layers的语义信息融合得到最终的语义分割结果。

CVPR 2021 HyperSeg: Patch-wise Hypernetwork for Real-time Semantic Segmentation

论文地址: CVF-HyperSeg

引入元学习技术,为网络提供附加的适应性,在编码器中编码和生成解码器的权重。对于语义分割任务,通常使用由粗到细的金字塔结构,自适应操作可以在每个级别的过程中受益,因为过程中的影响被累计到下一个过程;并且由于图像的每个部分可能包含不同的对象,所以自适应被应用在局部。

在这里插入图片描述

  1. Context head使用nested U-Net来提取更高维度的语义上下文信息。在特征图中每个像素位置编码了输入图像的一个patch,这些patch间几乎没有重叠;对于跨越多patches的大物体由于有限的感受野通常结果较差。在Context head中通过nested U-Net的结构,使用2*2卷积(stride=2)来聚合patch特征,能够结合多patches的信息来提取有效的上下文信息。

  2. 设计Meta Block根据Context head提取的上下文信息生成每个block的权重,并使用新颖的dynamic patch-wise convolution,从而实现了元学习的技术,

  3. 论文提供了一种新颖的编码器-解码器方法,其中编码器的主干基于该领域的最新进展。 编码信号使用Context head 映射到动态网络权重,而解码器由具有动态空间权重的Meta Block组成。

Patch/Local

Focal Self-attention for Local-Global Interactions in Vision Transformers

通过Self-Attention 捕捉short-/long-range 视觉依赖是成功的关键,但是自注意力机制会带来高昂的算力消耗;很多最近的工作都尝试应用粗粒度的全局注意力和细粒度的局部注意力来减少计算/内存的消耗并提高性能。

Focal Self-attention旨在提出一种结合细粒度局部和粗粒度全局相互作用的新机制。在这种机制下,每个token以细粒度关注其最近的标记并且以粗粒度关注较远的像素位置,从而高效和有效地捕捉short-/long-range视觉依赖。

在Transformer中,Transformer layers能够对不同图像区域的全局上下文深度交互,来建模short/long-range依赖。根据Self-Attention的可视化,其能够同时学习局部周围信息和全局上下文信息。考虑到邻近区域之间的视觉依赖通常比远处的强,我们只在局部区域执行细粒度的自注意力,而全局执行粗粒度的注意力。如图所示,一个Query token以最细粒度关注其特征图中最近邻的位置像素。当建立其与更远处的区域之间的联系时,趋向于聚合token来建立粗粒度的视觉依赖。区域离query token越远,粒度越粗,因此它可以有效地覆盖整个高分辨率特征图,同时在执行self-attention时引入了更少了tokens。每个token都以焦点的形式聚合其他tokens(类似于heatmap),同时 1)利用多尺度体系结构为高分辨率图像保持合理的计算成本,2)将特征图分成多个窗口,其中tokens共享相同的环境,而不是对每个token执行focal self-attention。

在Transformer中,Transformer layers能够对不同图像区域的全局上下文深度交互,来建模short/long-range依赖。根据Self-Attention的可视化,其能够同时学习局部周围信息和全局上下文信息。考虑到邻近区域之间的视觉依赖通常比远处的强,我们只在局部区域执行细粒度的自注意力,而全局执行粗粒度的注意力。如图所示,一个Query token以最细粒度关注其特征图中最近邻的位置像素。当建立其与更远处的区域之间的联系时,趋向于聚合token来建立粗粒度的视觉依赖。区域离query token越远,粒度越粗,因此它可以有效地覆盖整个高分辨率特征图,同时在执行self-attention时引入了更少了tokens。每个token都以焦点的形式聚合其他tokens(类似于heatmap),同时 1)利用多尺度体系结构为高分辨率图像保持合理的计算成本,2)将特征图分成多个窗口,其中tokens共享相同的环境,而不是对每个token执行focal self-attention。
在这里插入图片描述
在这里插入图片描述

Local-to-Global Self-Attention in Vision Transformers

在这里插入图片描述
在这里插入图片描述

通过对图片特征下采样,来实现局部、全局特征的交互,对于图像特征图,以22、44尺度进行双线性下采样,并通过window-based multi-head self attention (W-MSA)来建模局部信息和全局信息的交互过程。

新范式-从数据集中建立更好的分隔嵌入空间

ICCV-2021出现了几篇大致类似的思路,包括王文冠、周天飞设计的建立图像间的像素语义关系的新范式、对数据集内图像编码特征、跨图像的区域匹配。

ICCV 2021 Specialize and Fuse: Pyramidal Output Representation for Semantic Segmentation(oral)

论文地址:CVF-ICCV

Motivation:FCN作为分割任务的基石,以端到端的方式学习像素级特征表示。但是FCN的空间不变性(spatial invariance)阻碍了在图像内像素之间对有用上下文进行建模的能力。因此后续工作的主流是深入研究有效上下文聚合的网络设计,包括dilation convolution/spatial pyramid pooling/multi-layer feature fusion/neural attention。另外由于广泛使用的像素级交叉熵损失根本上缺乏空间辨别能力,Iou-loss等代替优化标准被提出以在分割网络训练期间明确解决对象结构。现有的分割方法利用深层架构将图像像素投影到高阶非线性嵌入空间。这些方法典型地学习嵌入向量,仅仅使用图像采样(单个图像的像素依赖性)的‘local’上下文,而忽略整个数据集的‘global’上下文(即图像间的像素语义关系)。(现有的语义分割任务关注于挖掘图像“local”上下文信息,即通过上下文聚合模块(扩张卷积、神经注意力等)或者结构感知优化标准(Iou Loss等)来挖掘单个图像内的像素之间的依赖关系。这些方法忽略了训练数据间的“global”上下文信息,即不同图像中像素之间的丰富语义特征。)好的特征嵌入空间应该具有两种属性:1)解决单个像素嵌入的分类能力,2)空间结构良好以解决类内紧凑和类间分散的问题。在表征学习中被证明,对训练数据的内在结构(即2)进行编码有助于提高特征辨别力(即1)。

无监督表示学习的进展可以归因于对比学习的复兴,其是一个深度度量学习的一个重要分支。核心思想为:给定一个锚点,在投影的嵌入空间中将相似(正)样本和不同(负)样本区分开。特别是在计算机视觉领域,对比度是基于图像特征向量来评估的; 锚图像的增强版本被视为正面图像,而数据集中的所有其他图像都被视为负面图像。无监督对比学习的力量源于structured comparison loss(结构化比较损失),其利用了训练数据的上下文。

受到无监督对比表示学习的启发,提出了在全监督模式(fully supervised setting)下的像素级对比算法(pixel-wise contrastive algorithm)用于语义分割。具体来说,除了使用逐像素交叉熵损失来进行类别辨别(即1),同时使用逐像素的对比损失通过探索labeled pixel samples的结构信息进一步塑造像素嵌入空间(即2)。核心思想是强制属于同一语义类的像素嵌入向量相似,而来自不同语义类的像素嵌入向量更具有差异性。(对于训练中给出的像素级分类信息,属于同类的像素为正样本,属于不同类的像素为父样本)它通过明确探索标记像素的结构,提出了一种用于语义分割的像素级度量新范式,可以捕获嵌入空间的全局属性。该方法易于嵌入合并到现有的分割框架中,而不会在测试期间产生任何额外的开销。在知名的分割模型上(DeeplabV3、HRNet和OCR)和backbones(ResNet和HRNet),该方法在多个数据集上实现了性能改进。

首先,论文中提出了一个region memory bank来更好地处理语义分割任务的本质。面对海量高度结构化的像素训练样本,Memory不仅存储像素级嵌入特征,还存储语义区域(即来自同一图像的具有相同语义标签的像素)的池化特征。这引导了像素到区域对比度,作为像素到像素对比度策略的补充。

其次,提出了不同的采样策略,以更好地利用信息样本,让分割模型更加关注那些难以分割的像素。
在这里插入图片描述

Contribution:

  1. 我们提出了一种用于语义分割的监督式像素对比学习方法。 它将当前的图像训练策略提升到图像间、像素到像素的范式。 它通过充分利用标记像素之间的“全局”语义相似性来学习结构良好的像素语义嵌入空间。

  2. 我们提出了区域存储来更好地探索大规模数据空间并且支持进一步计算像素到区域的对比度。与像素到像素的对比度计算相结合,我们的方法利用了像素之间以及像素和语义区域之间的语义相关性。

  3. 我们证明可以提供具有更好示例和锚点采样策略的更强大的分割模型,而不是选择随机像素样本。

无监督对比学习:无监督视觉表征学习旨在学习CNN编码器来讲图像I转换成向量v,使向量v能给更好地描述图像I。对比方法主要基于样本之间的相似性原则,通过从一些负样本中分辨出正样本来进行训练。

监督对比分割:其包含了Pixel-Wise Cross-Entropy Loss、Pixel-to-Pixel Contrast以及Pixel-to-Region Contrast。

  1. Pixel-Wise Cross-Entropy Loss即CE Loss,这种训练目标设计主要受两个限制。1),其独立地惩罚每个像素预测,忽略了像素间的联系;2),由于使用了Softmax,损失仅仅依赖于logits的对数关系,而不能直接监督学习到的特征表示。

  2. Pixel-to-Pixel Contrast:像素级的对比学习方法正规化嵌入空间,并探索训练数据的全局架构。对于锚点anchor i,与其具有相同语义类别的像素为正样本,其他像素属于负样本。按照无监督对比学习的损失InfoNCE对单正样本计算损失,我们对正样本集计算损失。最关键的信息是,正负样本以及锚点像素不被限制在同一个图像中。

  3. Pixel-to-Region Contrast. 保存密集预测下的所有像素采样点,会存储大量的冗余信息并且带来高昂的计算负担。对latest batch保存图像,则限制了图像的多样性。为每个像素类别维护一个Memory queue,即对于每个类别,我们从最近的batch中的每个图像中随机选择V个像素点(一个小数值),并放进队列中。(队列长度为T, T>>V).这种下采样像素嵌入过于稀疏而无法完全捕获图像内容。因此继续建立了一个region memory bank来存储从图像分割(语义区域)中吸取的更多代表性嵌入。Region Memory存储的特征为CND,C为语义分割任务类别,N为分割数据集的全部训练图片,D为像素潜入的维度;(c,n)对应的元素为D维的特征向量,通过从第n张图片中对应c类别的所有像素潜入执行平均池化,可以以低内存消耗来存储更多的像素特征表示。按照NCE Loss来计算一个anchor pixel,其中对应类别的Region Memory中的嵌入作为正样本,其余类别的Region Memory中的嵌入作为负样本。对于Pixel Memory,存储的特征图size为CTD,其中T为队列长度;故整个Memory M的Size为C*(T+N)*D。

  4. Hard Example Sampling. 除了损失设计和训练样本的数量之外,训练样本的判别能力对于度量学习也至关重要。

在这里插入图片描述

本质上而言,施加了额外损失,帮助网络学习更有效的更有辨别力的特征表示,即优化backbone的特征提取能力。

对于整体的结构而言:

  1. FCN用于将图像编码到密集嵌入,ResNet/HRNet

  2. SEG用于将密集潜入映射到预测图,使用主流方法的分割head,DeeplabV3/HRNet/OCR

  3. PROJ用于将高维度像素潜入映射到256唯独的l2正则化的特征向量,来计算对比损失。

  4. Memory Bank

基于Patch的一些操作

在这里插入图片描述
在这里插入图片描述

t = torch.tensor([[[[1,2,3,4,5,6,7,8],
                    [9,10,11,12,13,14,15,16],
                    [17,18,19,20,21,22,23,24],
                    [25,26,27,28,29,30,31,32],
                    [33,34,35,36,37,38,39,40],
                    [41,42,43,44,45,46,47,48],
                    [49,50,51,52,53,54,55,56],
                    [57,58,59,60,61,62,63,64]]]]).float()
t_total = torch.cat([t,t,t,t], dim=1)
bacth, C, H, W = t_total.size()

t = rearrange(t_total, 'b c (p1 h) (p2 w) -> b (p1 p2 c) h w', h=2, w=2)  # h、w表示切分的
print(t)
t_avg = Avg(t)
print(t_avg)
t = rearrange(t_avg, 'b (p1 p2 c) h w -> b c (p1 h) (p2 w)', p1=H//2, p2=W//2)  # 按区域的通道堆叠
# print(t.shape)
print(t)
  • 12
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值