综述
https://cloud.tencent.com/developer/article/1589733
https://blog.csdn.net/ShuqiaoS/article/details/87360693
FCN
知乎教程:https://zhuanlan.zhihu.com/p/22976342?utm_source=tuicool&utm_medium=referral
Info
15 CVPR 17TPAMI
Abstract
- 不含全连接层(fc)的全卷积(fully conv)网络。可适应任意尺寸输入。将现代分类网络AlexNet、VGGNet、GoogLeNet改造为FCN,并微调
- 增大数据尺寸的反卷积deconv层。能够输出精细的结果
- 结合不同深度层结果的跳级(skip)结构。同时确保鲁棒性和精准性
Introduction
语义分割面临语义和位置之间固有的紧张关系:全局信息解决what问题,而局部信息解决where问题。
深度特征层次将位置和语义编码在一个非线性的local-to-global的金字塔中。在4.2节中,定义了一个skip架构来利用这个结合了深层、粗糙的语义信息和浅层、精细的外观信息的特征。
FCN
卷积网络是建立在平移不变性的基础上的。它们的基本成分(卷积、池化和激活函数)作用于局部输入区域,仅依赖于相对的空间坐标。
3.1. Adapting classifiers

直接生成heatmap,再加损失
UNet
Info
15ICM
UNet详解 最常用….最简单… 一种U型的网络结构来获取上下文的信息和位置信息
前半部分是特征提取部分,后半部分是上采样,有些文献也把这种结构叫做编码器-解码器结构。
copy and crop:在论文中叫拼接,在UNet有四个拼接操作。如上图所示:有人也叫Skip connect,这一操作的目的是为了融合特征信息,使深层和浅层的信息融合起来,在拼接的时候要注意,不仅图片大小要一致(故要crop,是为了使图片大小一致)而且特征的维度(channels)也要一样,才可以拼接。
Unet的好处我感觉是:网络层越深得到的特征图,有着更大的视野域,浅层卷积关注纹理特征,深层网络关注本质的那种特征,所以深层浅层特征都是有格子的意义的;另外一点是通过反卷积得到的更大的尺寸的特征图的边缘,是缺少信息的,毕竟每一次下采样提炼特征的同时,也必然会损失一些边缘特征,而失去的特征并不能从上采样中找回,因此通过特征的拼接,来实现边缘特征的一个找回。
- 医疗影像的所有特征都很重要,因此低级特征和高级语义特征都很重要,所以U型结构的skip connection结构(特征拼接)更好派上用场
- 医学影像数据较少,大网络容易过拟合
- 医学影像任务中,往往需要自己设计网络去提取不同的模态特征,因此轻量结构简单的Unet可以有更大的操作空间
Abstract
卷积网络的典型用途是分类任务,其中图像的输出是单个类别标签。 然而,在许多视觉任务中,尤其是在生物医学图像处理中,期望的输出应该包括定位,即,应该将类标签分配给每个像素。(也就是分割)
在U-Net结构中,包括一个捕获上下文信息的收缩路径和一个允许精确定位的对称拓展路径
Conclusion
Introduction
首先要像素级预测,其次训练图像没那么多,然后运行要快,最后上下文信息和局部位置信息的权衡。
UNet并不是一个完全对称的结构,因为使用的是不带padding的3x3卷积
如果想保持尺寸一致该如何做?
- 使用插值,插值是不可学习的,会带来一定的误差
- 使用转置卷积,会增加参数量,并且模型也不一定能学的很好
- same卷积,即使用padding,但是padding会引入误差,而且模型越深层得到的feature map抽象程度越高,收到padding的影响会呈累积效应 因为填充是0
- Overlap-tile 对称的肯定比0要好 通常需要将图像进行分块的时候才使用
图像的主要成分是低频信息,它形成了图像的基本灰度等级,对图像结构的决定作用较小;中频信息决定了图像的基本结构,形成了图像的主要边缘结构;高频信息形成了图像的边缘和细节,是在中频信息上对图像内容的进一步强化。
图像的高频信息和低频信息简单来说就是,高频就是变化多的细节,低频就是背景板。
UNet使用弹性变形来进行数据扩充,这可以使得网络学习到这种不变性invariance。
使用加权损失,迫使网络学习边界像素。
Training
由于没有填充的卷积,输出图像要比输入图像小一个恒定的边界宽度。
为了最小化开销并最大限度地利用GPU内存,偏爱大的输入块而不是大的批处理大小,因此将批处理减少到单个图像。
因此,使用一个高动量(0.99),以便在当前优化步骤中使用大量之前看到的训练样本来确定更新。
Data Augmentation
对于显微镜图像,首先需要平移和旋转不变性,以及对变形和灰度值变化的鲁棒性。特别是训练样本的随机变形似乎是训练带有少量标注图像的分割网络的关键概念。我们在3×3网格上使用随机位移矢量生成平滑变形。位移从一个10像素标准差的高斯分布中采样。然后使用双三次插值计算像素位移。缩路径的最后加入了Dropout,隐式的加强了数据增强。
DeeplabV3+
Info
18ECCV

Abstract

典型的DilatedFCN
空洞卷积可以减少下采样率但是又可以保证感受野,但是天下没有免费的午餐,保持分辨率意味着较大的运算量
空间金字塔池化SPP和编码器-解码器encoder-decoder
SPP通过多种感受野池化不同分辨率的特征来挖掘上下文信息。
Encoder-decoder逐步恢复空间信息来更好的捕捉物体的边缘。
DeepLabv3+对DeepLabv3进行了拓展,在encoder-decoder结构上采用SPP模块。encoder提取丰富的语义信息,decoder细化分割结果,恢复精细的物体边缘。encoder允许在任意分辨率下采用空洞卷积。
探索了Xception
Introduction
感觉decoder和HDNet的位置距离都是在逐步的探索物体边界
DeeplabV3采用ASPP PSPNet采用PPM模块
DeeplabV3+添加了一个简单有效的解码器模块来恢复对象边界,扩展了DeeplabV3

下采样会丢失对象的边界信息,
贡献:
- 提出了一种采用DeepLabv3作为强大的encoder和简单而有效的decoder模块的新型encoder-decoder结构。
- encoderdecoder结构中可以通过空洞卷积来平衡精度和运行时间,现有的encoder-decoder结构是不可行的。
- 将Xception模型应用于分割任务,并将depthwise separable convs应用于ASPP模块和decoder模块,从而实现更快、更强的encoder-decoder网络。
Related Work
为了提取上下文信息,提出了一些基于FCN的模型变体,例如:

还有采用概率图形模型,例如(Dense CRF),本文主要讨论使用spatial pyramid pooling 和encoder-decoder的模型
Spatial pyramid pooling
PSPNet的PPM和Deeplab的ASPP
Encoder-Decoder
通常,encoder-decoder包含(1)一个encoder模块,逐步减小特征图并捕获更高的语义信息,(2)一个decoder模块,逐步恢复空间信息。在此基础上,我们建议使用DeepLabv3作为编码器模块,并添加一个简单而有效的解码器模块,以获得更清晰的分割。
Depthwise separable convolution
Depthwise separable convolution 深度可分卷积or group convolution 群卷积 保持性能前提下,有效降低了计算量和参数量。
Method

3.1 Encoder-Decoder with Atrous Convolution
Depthwise separable convolution
将一个标准卷积分离成一个depthwise conv,然后是一个point-wise(即1x1 conv),大大降低了计算复杂性。

(a)DW:为每个输入通道应用一个过滤器 (b)PW:通道之间进行结合 (c):Atrous DW,在该文中,探讨了Atrous DW的效果 ,两个一起叫atrous separable convolution
DeepLabv3 as encoder
此处的output stride 表示input_size/output_size(在全局池化或全连接层之前)。
图像分类任务中,最终feature map的空间分辨率通常是输入图像分辨率的32倍,因此output stride = 32。
语义分割任务,令outputstride=16or8,通过移除最后1or2个blocks的stride并应用空洞卷积(rate=2and4 for stride=8)来密集提取特征。也就是说不下采样了,防止损失信息,但是通过空洞卷积来增强感受野。
DeeplabV3使用了ASPP,多尺度,包括image-level features(参见ParseNet),最终feature map是256通道
Proposed decoder
deeplabv3通常output stride=16.DeeplabV3中直接上采样16倍,可能无法恢复对象分割细节。
Low-level features后加一个1x1,因为他的通道一般挺多,如256或512,必须把它通道数减少,否则会超过encoder输出的feature map 的重要性,相连之后,应用几个3x3来细化特征,然后又一个简单的双线性上采样4倍。
3.2 Modified Aligned Xception
Xception用于图像分类,Aligner Xception用于物体检测,在Aligned Xception的基础上,将之应用于语义分割,
- 更多的层,为了计算量和内存,不对Entry flow网络结构进行修改。
- 所有池化层替换为depthwise separable conv,以便采用 atrous separable conv提取任意分辨率的特征。
- 类似于MobileNet,在每个3×3后添加额外的BN和ReLU。

Experiment
HDNet
Abstract
目前方法分离了特征图中点之间的关系,导致分割结果不连续
本论文提出混合距离网络,从两个方面来度量距离–位置距离和高维特征距离
在此基础上,提出了一种位置感知注意力模块,利用位置距离对上下文进行有效采样,生成稀疏混合距离关系。
它综合每个点的不同上下文,并生成position-wise的注意值,以紧凑的对象级表示。
在训练步骤中,高维特征距离损失也作为在特征空间中压缩类别级表示的辅助损失。
SOTA in Pascal Context, ADE20K, and COCO Stuff 10K
Introduction
ACNet[6] ICCV 2019 证明卷积核主要集中在中心点上,所以滑动窗口过程会产生每个点的隔离。这种隔离会干扰特征学习,导致分割结果的不连续,称为“隔离问题”。同时语义分割网络采用逐像素的交叉熵作为损失函数,对于相邻的像素点的监督是独立的,因此该损失函数无法有效地惩罚不连续的分割结果,这 加剧了分割结果中的孤立问题。
为了解决像素的孤立问题,许多研究在神经网络结构中加入上下文模块,通过在空间维度捕获像素点的上下文信息,增大像素的感受野,缓解像素孤立的问题。
- DeeplabV1 空洞卷积扩大感受野 但仍将点与全局场景上下文分隔开
- PSPNet、deeplabv2中进一步提多尺度的金字塔模型获得更大范围、更丰富的上下文信息。 PSPNet 金字塔池化模块PPM 两个点位于同一个池化窗口,产生相同但不准确的上下文信息 两个点相邻位于不同池化窗口,获得完全不同的上下文信息。

使用不同窗口大小的pooling操作,得到不同尺寸的输出,然后缩放到相同的尺寸,再进行特征融合。
具体来说,包含4个pooling层次,对于原始特征图,分别通过pooling得到大小为 ,
,
和
。然后分别使用1×1卷积调整通道数至
(
即为pooling层次数,此时
)。然后将这些特征图全部上采样,通过双线性插值完成。再将这些pooling特征图输出,以及原始的特征图(跳跃连接),全部concat起来,作为特征输出,可以由此产生分割的预测结果。
实现过程中,这些pooling层通过AdaptivePooling层完成,根据输入输出大小计算pooling的窗口大小。其中输出大小为 时,其实就是Global Average Pooling。
- Non-Local local operations就是基于局部区域进行操作,长距离依赖则是图像中非相邻像素点之间的关系。该论文中的非局部操作是将所有位置对一个位置的特征加权和作为该位置的响应值。使用相同策略,远程和短程背景起相同作用,这种关系表示忽略了一对像素点点之间的位置距离的影响,也失去了对象的整体概念 该方法不能解决对象内部的隔离问题,且导致大量的冗余计算 。
上述方法在捕捉上下文信息时丢弃了空间信息,这削弱了它们的分割精度。HDR 结合位置距离和高维特征距离 位置距离表示特征图上一对点之间的相对位置,而高维特征距离表示两个特征向量之间的相似性。HDR建模在一定范围内的一个点和它的上下文区域之间的关系,位置距离隐含在区域的范围内。
其次,提出位置感知注意模块LAA,对HDR的不同位置距离进行采样,从而捕获点与其不同上下文之间的关系。
然后由这些HDRs生成一个基于位置的注意值,以融合不同的关系,补充原有的特征图。
LAA模块引入稀疏关系连接来关注高维空间中特征的位置距离,而不是使用以前的方法[12DANet ,13 CCNet]中每对特征之间的密集连接,这样消耗的计算量较少。该算法能够感知物体在中心位置周围的空间关系,提高了分割结果的连续性,降低了计算复杂度。利用这一特点,我们的方法在中心对象上的特征分布明显比基于非局部的方法更紧凑
DANet:基于空洞卷积的FCN添加了两种注意力模块:position attention module和channel attention module
CCNet:Criss-Cross Attention 以十字形交叉的 对Non Local的一种改进,减少计算量


Related Work
近年来出现许多用于捕获上下文信息的模块
Spatial Aggregation Module空间聚集模块
Deeplab V1:空洞卷积
Deeplab V2:atrous spatial pyramid pooling (ASPP) 空洞空间金字塔池化 与SPPNet空间金字塔池化网络中的SPP模块类似,在给定的输入上以不同采样率的空洞卷积并行采样,相当于以多个比例捕捉图像的上下文


Relation Module 关系模块
CCNet:简化Non Local计算
Approach
三部分 1 HDR Hybrid distance relation 2 LAA Location Aware Attention 3 HFD loss
1 HDR: Hybrid Distance Relation
目前的方法只考虑上下文信息的捕获,而不考虑特征的连续性,不能很好的解决隔离问题。
HDR的目的:1 产生连续结果 2 避免冗余计算
$R_k(i,j)=F(x_{i,j},A_k(x_{i,j}))$
$x_{i,j}$表示i,j处点的特征向量,$A_k(x_{i,j})$表示range为k的上下文计算得出的特征向量,$F(.,.)$计算两个特征向量之间的高维特征距离
HDR的本质是两个特征向量之间的特征距离,每个HDR通过聚合函数$Ak(·)$使用采样后的特征图,使点感知周围区域。
位置距离是指周围区域的范围。
所以位置距离通过聚合函数$Ak(·)$嵌入到了HDR中,从而使所提出的HDR既考虑了高维特征距离,又考虑了位置距离。
随着range k的不同,如下:
换句话说,中心点可以感知到在二维平面上由于不同的距离k到物体边界的空间距离。
此外,HDR在捕捉不同k范围的中心点与其上下文区域之间的关系时,可可视化为稀疏连接;Non Local则是使用孤立的一对点之间的密集连接关系(图5a)。并且k为n和k为n-1时的差值代表kn和kn-1间的上下文,这种带孔的HDR增强了上下文的多样性。
F可以简单实现为余弦距离,只关注了点的分布,忽略了点的特征值的大小,[-1,1]方便后续操作
为了简化聚合过程的计算,使用池化操作作为聚合函数$A_k(.)$,将k专门化为池化窗口的大小。因此,特定区域内的距离为正方形。
$Ak(·)$采用平均池化操作,考虑k范围内的所有点,对于大对象,无论窗口大小,响应一致。此外,我们还采用了最大池化操作,可以捕捉到显著特征。为了使每个点获得自己的聚合结果,将聚合函数设为位置级函数,步幅设为1。
由于k值不同,一串$A_k(.)$函数可以视为局部位置级金字塔。
和PPM的区别:
PPM是一个全局金字塔,通过这种下行采样策略,相邻的点可能会得到相同或不同的上下文信息,如下图:
这种全局的方式丢弃了特定位置,产生不精确的上下文信息。
本论文的HDR是每个点的局部金字塔,所以特征图大小为HxW,就有HxW个金字塔,每个点都有它自己的上下文。
ASPP[14]是另一个捕捉上下文信息的位置金字塔,因此可以将其表述为与HDRs中提出的聚合相同。但它继承了扩张卷积的缺点,即只对一个感受野中的几个点进行采样,而忽略了整个感受野。而池操作可以考虑整个字段,不会导致这种不连续的效果。
2 LLA: Location Aware Attention
LAA模块利用提出的HDR,获取不同范围的上下文信息,增强对对象大小的感知,增强对象级的连续性。
LAA有4个子模块:输入/输出变换、多范围HDRs、HDRs结果的交互、对原始feature map的激励
变换子模块:$\theta$为1x1卷积,减少了信道数量。$\phi$也是1x1卷积,但是前后信道数目不变。
**交互子模块:**在每一点融合不同的关系,可以表示为:
$u_{i,j }= ω([R_{k_1}(i, j), R_{k_2}(i, j), · · · , R_{k_n} (i, j)]),$
不同的k表示不同的范围 ,ω(·)是一种不同关系的位置非线性融合。
**激励子模块: ** $v_{i,j }= u_{i,j} × x_{i,j}$
最终结果:$y_{i,j} = x_{i,j} + ϕ(v_{i,j})$,可表述为位置方面的增强
Channel Attention用的就是DANet中的。
基于稀疏连接和位置注意,我们的注意模块计算复杂度明显低于Non Local。其次,交互模块和激励模块补充了每个点的特征,增强了位置感知。
3 HFD: High-dimension Feature Distance Loss

目前的网络[12DANet,13CCNet,18EMANet]使用头部结构来减少特征图的通道来对每个点进行分类,这是一种从高维特征到预测语义类别的有效概述,而潜在特征的监督仅依赖于梯度通过。
为了预测类别内的连续结果和类别间的分化结果,高维特征应保持相同的一致性和差异性。
HFD Loss:减少类别内点的特征距离的方差,增加类别间的方差
负对数似然(不就是交叉熵函数吗):
$L_{H,p} = −E_x[log\widetilde{D}p(x)]$
x为某一点特征,$\widetilde{D}p(x)$为某一点特征与第q类特征中心的归一化距离。与无监督聚类方法类似,HFD loss方法探索了每个类别的特征中心,并迫使每个点靠近相应的中心。为了得到点与类别中心的精确对应,使用ground truth对结果进行监督,这是与聚类方法的主要区别。
T维度为CxN,C为特征个数,就是每个点有多少个k,N为类别个数,整体是softmax归一化。
look-up table:
查找表T是根据生成的特征图对每个类别进行高维表示。因此,在训练过程中,随着特征图的变化,它会不断更新。
在更新过程中,采用与批处理归一化层相同的指数移动平均策略,通过小批量逼近实数表示。所以更新不需要梯度,而是依赖于输入,如图8中的黑色虚线,公式为:
初始中心就是加起来求平均,之后采用移动平均策略。
提出的HFD Loss使得每个点的高维特征更接近ground truth所表示的特征中心Tp,直接促进了高维特征空间中类别的识别。本文提出的HFD Loss作为辅助Loss监督头部结构之前的高维特征图。而传统的交叉熵损失也通过最终的分割结果来监督HDNet。
Experiments
数据集:PASCAL Context ADE20K COCO Stuff 10K
4.1. Implements Details
多尺度空洞卷积
Info
16ICLR
Abstract
开发了一个新的卷积网络模块,专门用于密集预测。该模块使用空洞卷积来系统地聚合多尺度上下文信息而不丢失分辨率。
该架构基于空洞卷积支持感受野的指数扩展,而不会丧失分辨率或覆盖范围的事实。我们表明,所提出的上下文模块提高了最先进的语义分割系统的准确性。
Introduction
语义分割具有挑战性,因为它需要结合像素级精度和多尺度上下文推理。
FCN表明原本用于图像分类的卷积网络架构可以成功地用于密集预测。这些重新设计的网络在挑战语义分割基准上的表现大大超过了先前的技术水平。由于图像分类和密集预测的结构差异,这引发了新的问题。重新使用的网络的哪些方面是真正必要的,哪些方面在密集操作时降低了准确性?专为密集预测设计的专用模块能否进一步提高准确性?
现代图像分类网络通过连续的池化和子采样层集成多尺度上下文信息,从而降低分辨率,直到获得全局预测。相反,密集预测需要多尺度上下文推理与全分辨率输出相结合。
近年来研究了两种方法来解决多尺度推理和全分辨率密集预测的矛盾需求。
一种方法是反复进行上卷积,目的是恢复丢失的分辨率,同时从下采样层进行全局视角。这就留下了一个问题,即是否真的有必要进行严重的中间下采样。
例如15年ICCV的<<Learning deconvolution network for semantic segmentation>>
Encoder-Decoder结构 采用了VGG16
产生足够多的候选区域,然后在每个候选区域用网络获得语义分割图(semantic segmentation maps),然后将所有区域的输入组合起来
另一种方法包括提供多个重新缩放版本的图像作为网络输入,并结合这些多个输入的预测。同样,目前还不清楚是否真的需要对重新缩放后的输入图像进行单独分析
在这项工作中,我们开发了一个卷积网络模块,在不丢失分辨率或分析重新缩放图像的情况下聚合多尺度上下文信息。该模块可以插入到任何分辨率的现有体系结构中。与从图像分类中继承过来的金字塔形架构不同,提出的上下文模块是专门为密集预测而设计的。该模块基于空洞卷积,支持感受野的指数扩展,而不会丢失分辨率或覆盖范围
DILATED CONVOLUTIONS
FCN虽然分析了filter dilation但是没有使用它,deeplabV1使用filter dilation简化了FCN的网络结构

$F_{i+1}=F_i\cdot_{2^i}k_i,i=0,1,2\cdots$,则获得$(2^{i+2}-1)\cdot (2^{i+2}-1)$的感受野

- a图对应3x3的空洞率为1的卷积,和普通的卷积操作一样,计算量是9个点。对于(a)这个feature map F1而言,F1是由1-dilated convolution 卷积F0得来的,如果不考虑之前层的感受野,那这个卷积核的感受野大小是3x3,也就是F1的每个元素的感受野都是3x3。
- b图对应3x3的空洞率为2的卷积,实际的计算量还是9个点。对于(b)这个feature map而言,(b)是对(a)空洞卷积而来的,卷积核覆盖的区域大小为5x5(图中蓝框),但是这个时候感受野大小并不是5x5,因为a中的元素的感受野就已经为3x3了,覆盖的5x5区域要往外多加(3-1)/2=1个像素,如(b)中红框所示。即1-dilated和2-dilated堆叠起来就能达到7x7的感受野,而普通卷积需要三层3x3的卷积层堆叠才能达到7x7的感受野。
- c图对应3x3的空洞率为4的卷积,实际的计算量还是9个点。同理,对于©而言,卷积核覆盖的(b)区域大小为9x9(图中蓝框),但是由于(b)中的元素的感受野大小为7x7,因此,在这个9x9的区域大小之外还要扩张出(7-1)/2=3个像素,如©中红框所示。即1-dilated、2-dilated、4-dilated堆叠起来就能达到15x15的感受野。
- 注意,这个的stride是1
MULTI-SCALE CONTEXT AGGREGATION
network architecture
上下文模块旨在通过聚合多尺度上下文信息来提高密集预测体系结构的性能。该模块接受通道数为C的特征图作为输入,并生成通道数为C的特征图作为输出。输入和输出具有相同的形式,因此该模块可以插入现有的密集预测体系结构中
从小的局部特征,到大的特征
初始化
卷积网络通常使用随机分布的样本进行初始化。然而,我们发现随机初始化方案对上下文模块并不有效。我们发现一个具有清晰语义的替代初始化更有效:
这种identity初始化设置所有滤波器的值,这样每一层都能将前一层的信息直接传递到下一层。直觉上感到不利于反向传播信息的传递。但实验证明这种担心是多余的。
basic 的context module只有64C^2个参数,参数的数量非常少,但实验结果已经表现的非常好了