原文链接:https://arxiv.org/pdf/1702.08502.pdf
源码: https://github.com/TuSimple/TuSimple-DUC
作者设计了密集上采样卷积(DUC)来生成像素级预测,它能够捕获和解码双线性上采样中通常缺失的更详细信息。在编码阶段提出了一种混合扩展卷积(HDC)框架。该框架有如下特点:
1)有效地扩大了网络的感受野(RF),以聚集全局信息;
2) 缓解了标准膨胀卷积运算造成的“网格问题”。
大多数最先进的语义分割系统有三个关键组成部分:
1)一个完整的协同进化网络(FCN),将最后几个全连接层按卷积层重新放置,以进行有效的端到端学习和推理,可以接受任意大小的输入;
2) 条件随机场(CRF),用于捕获图像中的局部和长期相关性,以优化预测图;
3) 扩张卷积(或膨胀卷积),用于提高中间特征映射的分辨率,以便在保持相同计算成本的同时生成更准确的预测。
一、实现细节:
(一)、Dense Upsampling Convolution (DUC)
假设输入图像具有高度H、宽度W和通道C,像素级语义分割的目标是生成一个大小为H×W的标签映射,其中每个像素用一个类别标签进行标记。将图像输入深度FCN后,在进行预测之前,在最后一层获得尺寸为h×w×c的特征图,其中h=h/d,w=w/d,d为下采样因子。DUC不是执行双线性上采样,也不是使用反卷积网络,而是直接在特征映射上应用卷积运算,以获得密集像素级预测映射。下图描述了本网络的架构和DUC层。
DUC操作都是关于卷积的,这是在维度为h×w×c的ResNet的特征图上执行,以获得维度 h × w × ( d 2 × L ) h×w×(d^2×L) h×w×(d2×L)的输出特征图,其中L是语义分割任务中的类总数。因此,密集卷积的每一层都在学习每个像素的预测。然后,使用softmax层将输出特征映射reshape为H×W×L,并应用元素级argmax操作符来获得最终的标签映射。在实践中,可能不需要“reshape”操作,因为特征图可以直接调整为为要输入softmax层的向量。DUC的关键思想是将整个标签特征图划分为相等的 d 2 d^2 d2子部分,这些子部分的高度和宽度与引入的特征图相同。也就是说,将整个标签映射转换为具有多个通道的较小标签映射。这种转换允许我们直接在输入特征映射和输出标签映射之间应用卷积运算,而无需在反卷积网络中插入额外的操作(反池化)。 由于DUC是可学习的,因此它能够捕获和恢复双线性插值操作中通常缺失的精细详细信息。例如,如果一个网络的下采样率为1/16,而一个对象的长度或宽度小于16个像素(例如极或远处的人),那么双线性上采样很可能无法恢复该对象。同时,必须对相应的训练标签进行降采样,以与输出维度相对应,这将导致详细信息的丢失。另一方面,在原始分辨率下执行DUC的预测,从而实现像素级解码。此外,DUC操作可以自然地集成到FCN框架中,并使整个编码和解码过程端到端可训练。 具体的操作过程如下:
(二)、Hybrid Dilated Convolution (HDC)
在一维中,扩张卷积定义为:
其中 f [ i ] f[i] f[i]是输入信号, g [ i ] g[i] g[i]是输出信号, h [ l ] h[l] h[l]表示长度为l的滤波器,r对应于我们用来采样 f [ i ] f[i] f[i]的膨胀率。在标准卷积中,r=1。
在语义分割系统中,二维膨胀卷积是通过在卷积核的每个像素之间插入“孔”(零)来构造的(如果对膨胀卷积不是很清楚,可以看下我之前的博客)。对于大小为k×k的卷积核,得到的膨胀卷积的大小为 k d × k d k_d×k_d kd?×kd?,其中 k d = k + ( k ? 1 ) ? ( r ? 1 ) k_d=k+(k? 1) ·(r? 1) kd?=k+(k?1)?(r?1)扩张卷积用于通过替换最大池化或跨步卷积层来保持FCN中特征图的高分辨率,同时保持相应层的感受野。例如,如果ResNet-101中的卷积层的步长s=2,则该步长重置为1以消除下采样,并且对于后续层的所有卷积核,膨胀率r设置为2。该过程迭代地应用于所有具有下采样操作的层,因此输出层中的特征映射可以保持与输入层相同的分辨率。然而,在实践中,膨胀卷积通常应用于已经降采样的特征图,以实现合理的效率与精度权衡。
然而,在上述扩展卷积框架中存在一个理论问题,我们称之为“网格化”(如下图的a):对于膨胀卷积层 l l l中的像素 p p p,对像素 p p p有贡献的信息来自 l ? 1 l? 1 l?1层以p为中心附近的 k d × k d k_d×k_d kd?×kd?区域。由于膨胀卷积在卷积核中引入了零,因此参与计算的实际像素 k d × k d k_d×k_d kd?×kd?区域的计算结果仅为k×k,他们之间的间隙为r? 1.。如果k=3,r=2,则该区域25个像素中只有9个用于计算(下图a)。由于所有层都具有相等的扩张率r,那么对于顶部扩张卷积层 l t o p l_{top} ltop?中的像素p,有助于计算p值的最大可能位置数为 ( w ′ × h ′ ) / r 2 (w^{'}×h^{'})/r^2 (w′×h′)/r2,其中 w ′ , h ′ w^{'},h^{'} w′,h′分别是底层膨胀卷积层的宽度和高度。因此,像素p只能以棋盘格式查看信息,并且丢失了大部分信息(当r=2时至少75%)。
当r由于额外的下采样操作而在更高层变大时,来自输入的样本可能非常稀疏,这可能不利于学习,因为**1)局部信息完全缺失;2) 这些信息信息之间距离太远不相关。在大范围内可能是无关的。**网格效应的另一个结果是,l层附近r×r区域中的像素从完全不同的“网格”集合接收信息,这可能会损害局部信息的一致性。
作者提出了一个简单的解决方案:混合膨胀卷积(HDC),以解决这个理论问题。假设有N个核大小为K×K的卷积层,其膨胀率为 [ r 1 , … , r i , … , r n ] [r_1,…,r_i,…,r_n] [r1?,…,ri?,…,rn?],HDC的目标是让一系列卷积运算的RF的最终大小完全覆盖一个正方形区域,没有任何孔或缺失边。将“两个非零值之间的最大距离”定义为
M n = r n M_n=r_n Mn?=rn?。设计目标是让 M 2 ≤ K M_2≤ K M2?≤K。例如,对于内核大小K=3,r=[1,2,5]模式的作用相当于 M 2 = 2 M_2=2 M2?=2(如下图);
然而,r=[1,2,9]模式并不适用于 M 2 = 5 M_2=5 M2?=5。
实际上,在下采样发生后,我们不是对所有层使用相同的膨胀率,而是对每个层使用不同的膨胀率。在网络中,扩张率的分配遵循锯齿波式的启发:许多层被组合在一起,形成扩张率不断增加的波的“上升沿”,下一组重复相同的模式。例如,对于扩张率r=2的所有层,将3个后续层作为一个组,并将其扩张率分别更改为1、2和3。通过这样做,顶层可以在与原始配置相同的区域(上图(b))中从更大范围的像素访问信息。这一过程在所有层中重复,从而使顶层的感受野保持不变。 HDC的另一个好处是,它可以在整个过程中使用任意的膨胀率,从而自然地扩大网络的感受野,而无需添加额外的模块,这对于识别相对较大的对象非常重要。然而,需要注意的一点是,一个组内的膨胀率不应该有一个公因子关系,否则网格问题仍然适用于顶层。这是HDC方法与Atrus spatial pyramid pooling(ASPP)模块中的上下文聚合模块之间的一个关键区别。此外,HDC自然地与网络的原始层集成,无需添加额外的模块。
二、实验细节:
论文一共在三个数据集上做了测试:CityScapes,KITTI dataset for road estimation, PASCAL VOC2012. 以预训练的ResNet101和ResNet152为特征提取层。
CityScapes
CityScapes的数据尺寸固定为 1024 × 2048 1024 × 2048 1024×2048 ,本文的策略是将图片分成12个 800 × 800 800 × 800 800×800 的patches,整个训练集大小为 2975 ? 12 = 35700 2975 ? 12 = 35700 2975?12=35700 .这样的数据增强可保证图片的每个区域都被访问到,比随机的cropping要更细腻。
DUC
在DUC中,唯一要改变的是顶部卷积层的形状。例如,如果在baseline模型中,顶层卷积层的维数是68×68×19(19是类数),那么对于具有DUC的网络,同一层的维数将是 68 × 68 × ( r 2 × 19 68×68×(r^2×19 68×68×(r2×19),其中r是网络的总下采样率(在这种情况下,r=8)。然后将预测图reshape为544×544×19的大小。与baseline模型相比,DUC将引入额外的参数,但仅限于最顶层的卷积层。ResNet DUC结果的可视化以及与基线模型的比较如下所示 从左到右:输入图像、真实图片(评估中忽略黑色区域)、baseline模型和ResNet DUC模型。
由图可以清晰的看见DUC主要提高了小目标物的识别率,验证了DUC可以恢复双线性插值上采样损失的信息。
Abation Studies:主要做以下方面的实验.
1) 网络的下采样率,控制中间特征图的分辨率;
2) 是否应用ASPP模块,以及模块中的并行路径数;
3) 是否进行12倍的数据扩充;
4)单元大小,它决定了一个预测像素投影到的邻域区域(单元×单元)的大小。像素级DUC应使用cell=1;然而,由于真值标签通常无法达到像素级精度,作者也尝试在实验中使用cell=2。从下表可以看出:
降低下采样率会降低准确率。ASPP模块通常有助于改善性能。数据增强有助于提高准确率,使用cell=2有轻微的提升,同时有助于降低计算消耗。减小下采样率会降低精度。此外,由于特征图的分辨率不断提高,这也显著提高了计算成本。ASPP通常有助于提高性能,将ASPP通道从4个增加到6个(扩张率从6个增加到36个,间隔6个)会产生0.2%的提升。数据扩充有助于实现另外1.5%的改进。与cell=1相比,使用cell=2可以产生稍好的性能,并且通过将最后一个卷积层的通道减少4倍,有助于降低计算成本。
Bigger Patch Size: 因为 c e l l = 2 cell=2 cell=2会大幅度减少计算量消耗,故讨论patch size对性能的影响。将patch size提高到 880 × 880 880 × 880 880×880 ,将原本的12倍cropping换成7倍的cropping,性能提升了1%;
Compared with Deconvolution: 将DUC模型与反卷积进行比较,反卷积还包括学习上采样。比较了1)从预测图(八倍上采样8)到原始分辨率的直接反卷积;2) 先使用2倍上采样,然后使用4倍上采样因子进行反卷积。deconv网络的参数数量与DUC大致相同。使用ResNet-DUC-biger-patch模型来训练网络。上述两种模型实现的mIOU分别为75.1%和75.0%,低于ResNet DUC模型(75.7%mIOU)
Conditional Random Fields(CRF): 作为FCN的后处理步骤,全连接的CRF被广泛用于提高语义分割质量。遵循原始的CRF设计细节。对验证集上的参数进行网格搜索,并对所有模型使用 σ α = 15 、 σ β = 3 、 σ γ = 1 、 w 1 = 3 σ_α=15、σ_β=3、σ_γ=1、w_1=3 σα?=15、σβ?=3、σγ?=1、w1?=3和 w 2 = 3 w_2=3 w2?=3。将CRF应用到最好的ResNet DUC模型中,产生了76.7%的mIoU,比不使用CRF的模型提高了1%。
Hybrid Dilated Convolution (HDC)
作者使用最好的101层ResNet DUC模型作为应用HDC的起点。对HDC模块的几种变体进行了实验:
1、无膨胀卷积:对于所有包含膨胀卷积的ResNet块,使其膨胀率r=1(无膨胀)。
2、Digilation conv:对于所有包含Digilation的块,将每2个块分组在一起,第一个块的r=2,第二个块的r=1。
3、Dilation-RF:对于包含23个膨胀率r=2的块的 r e s 4 b res4b res4b模块,将每3个块分组,并将它们的膨胀率分别更改为1、2和3。在最后两个block,保持r=2。对于包含3个膨胀率r=4的块的 r e s 5 b res5b res5b模块,将它们分别更改为3、4和5。
4、Dilation-bigger:对于 r e s 4 b res4b res4b模块,将每4个块分组,并将它们的放大率分别更改为1、2、5和9。最后3个块的膨胀率率分别为1、2和5。对于 r e s 5 b res5b res5b模块,将膨胀率设置为5、9和17。
结果总结如下:增加感受野的大小通常会产生更高的准确性。下图说明了ResNetDUC HDC模型在消除网格效应方面的有效性。
上图第一排:真值。第二行:ResNet-DUC模型的预测。观察到强烈的网格效应。第三行:预测ResNet-DUC HDC(扩张RF)模型。
受VGG网络设计的启发,一个5×5卷积层可以分解为两个相邻的3×3卷积层,以增加网络的表现力,同时保持感受野的大小,用三个3×3卷积层替换了原始ResNet-101网络中的7×7卷积层。通过重新训练更新后的网络,使用单一模型在测试集上实现了80.1%的mIoU,无需CRF后处理。