目标检测 | Ladder-style DenseNet 算法笔记

Efficient Ladder-style DenseNets for Semantic Segmentation of Large Images

会议: CVPR 2019

标题:《Efficient Ladder-style DenseNets for Semantic Segmentation of Large Images》

论文链接: https://arxiv.org/abs/1905.05661v1

本文仅作为个人学习笔记分享,图片来自于论文,如有侵权,请联系删除。

摘要

深度图像分类模型的最新进展为提高计算机视觉相关任务的性能提供了巨大的潜力。然而,当代GPU的内存严格限制阻碍了向语义分割的过渡。即使对于中等大小的Pascal VOC图像,卷积后向图所需的功能图缓存的范围也带来了重大挑战,同时当源分辨率在百万像素范围内时,需要仔细考虑体系结构。为了解决这些问题,我们提出了一种新的基于DenseNet的梯形结构,它具有高建模能力和非常精简的上行采样数据通路。我们还建议通过利用DenseNet特征抽取器固有的空间效率,大幅度减少特征映射缓存的范围。与竞争性方法相比,由此产生的模型提供的高性能和更少的参数,并允许在硬件上以百万像素分辨率进行训练。在城市景观、Pascal VOC 2012、Camvid和Rob 2018数据集的预测精度和执行速度方面,所呈现的实验结果优于最先进水平。源代码将在文章发布时公布。

Ladder-style DenseNet 特点

  1. 提出了一种新的基于DenseNet的梯形结构,它具有高建模能力和非常精简的上行采样数据通路
  2. 训练时需要硬件内存小,通过利用DenseNet特征抽取器固有的空间效率,大幅度减少特征映射缓存的范围,由此产生的模型性能高且参数少,可以在硬件上进行百万像素分辨率图像的训练。

DenseNet

Densenet的四大优点:

• 缓解梯度消失问题
• 增强特征传播
• 促进特征再用
• 大大减少了参数的数量

Densenet 网络架构分析

为了确保网络中各层之间的最大信息流,在Dense block中,作者直接将所有层(具有匹配的特征映射大小)连接起来。为了保留前向传播的特性,每个层从前面的所有层获得附加输入,并将其自身的特征映射传递到所有后续层。Dense Block结构示意图如下:
在这里插入图片描述
以上介绍的是densenet结构中的一个DenseBlock例子. dnesenet的总体结构图如下:

在这里插入图片描述

上图中的dense block 结构即是[5层的DenseBlock结构示意图]对应的内容. 由上图可知,此图结构中包含三个DenseBlock。

DenseBlock细节

DenseBlock 输出: xl=Hl([x0,x1, …, xl-1]).
其中,xl代表DenseBlock中第l层输出,x0 ~x l-1代表前面所有层的输出.因此,第l层的输入主要由x0 ~x l-1层的输出组成.其中,第l层的输入特征通道数量为:k0+k*(l-1),k代表growth rate,其代表前l-1层引出k个特征通道进入l层.

Hl()函数主要由以下层级组成:BN+ReLU+Conv(11)+BN+ReLU+Conv(33).其中,Conv(11)层级的引入作者称之为Bottleneck Layers, 其作用是为了减少输入的通道数量.一般Conv(11)卷积后的大小为4k(k为growth rate).

所以,DenseBlock结构中主要有两个超参数,growth rate和Bottleneck,将这两个参数理解清楚基本掌握了DenseBlock结构.

Transition Layers

作者在每两个DenseBlock结构之间引入了Transition Layers概念.为了进一步减少参数量,作者引入了一个Compression概念,用参数theta表示.Transition Layers主要由11卷积和33pooling层组成.Compression主要用1*1卷积降低DenseBlock的输出通道.因此,Compression可以进一步减少参数总量,达到密集网络的效果.

比较ResNets 和 DenseNets

作者详细比较了ResNets与DenseNets(此部分可参考论文原文),认为在拥有相近的网络表达能力的ResNets与DenseNets网络架构中,DenseNets所需要的参数和计算量都相对较小。对于语义分割任务,应以其为基础模块。
在图1中,通过比较各个处理块来说明ResNets和DenseNet体系结构之间的相似性和差异性。我们考虑最广泛应用的变体:DenseNet-BC(瓶颈压缩)和预激活的ResNets瓶颈。
在这里插入图片描述
图1,具有n个单元的预激活的残差模块(a)和相对应的密集连接块(b)。标记的圆对应于卷积单位(f1-fk)、求和(+)和n路连接-concat(n)。所有连接均为三维张量D×H×W,其中D在连接线上方指定(为简单起见,我们假设批量大小为1)。Fin和Fout分别表示处理块输入和输出上的特征图数量。
在这里插入图片描述

表1比较了Resnet-50和Densenet-121中卷积权重的计数。我们发现,Densenet-121在B1块中的参数是Resnet-50的两倍,而在B3块中的关系则相反。最后一个残差块B4容量超过整个Densenet-121。最后,densenet-121的所有参数比resnet50的所有参数少三倍。

网络架构

研究者提出了一种高精度、低内存占用和高执行速度的轻量级语义分割体系结构。该体系结构由两个数据通路组成,这些数据路径由图2中的两个水平轨道指定。下采样数据路径由一个改进的densenet特征提取器和一个轻型空间金字塔池化模块(SPP)组成。特征提取器通过逐渐降低空间分辨率和增加特征图的数量(图2中的上层)将输入图像转换为特征张量F。SPP模块使用上下文信息丰富densenet功能,并创建上下文感知功能C。上采样数据路径将低分辨率功能C转换为高分辨率语义预测(图2中的底部轨道)。这种转换是通过将更深层次的语义与早期层次的精细细节有效地混合来实现的。

在这里插入图片描述
图2中DB代表这Dense Blocks,TD为transition layers,TU为transition-up blocks,f为输出特征图(后面的数字为特征图个数),输出特征图上的x4、x8…x32为下采样倍数,SPP为空间采样池化模块。
可以看出,其最明显的特征是有两个数据路径。
上面的为下采样数据路径,特征图不断缩小。下面为上采样数据路径,并在此进行数据融合。
整个结构宛如梯子,故称梯形风格的(Ladder-style) DenseNets 。

特征提取

DenseNet 特征提取模块包括密集模块(DB)和迁移层(TD)。每个密集块(DB)是卷积单元的串联,而每个卷积单元操作前面所有单元和块输入的串联,详见下采样通路。与最初的DenseNet设计不同,我们将密集块DB3分成两个片段(DB3a和DB3b)。并在它们之间放置一个跨步平均池层(D)。这扩大了DB3a之后所有卷积的接收区域,同时降低了它们的计算复杂度。与扩展过滤相比,这种方法权衡了空间分辨率(稍后我们将使用阶梯式混合进行恢复),从而提高了执行速度并减少了内存占用。尽管新的池化层在ImageNet预训练期间以未看到的方式改变了特征,我们使用原始Densenet模型的ImageNet预训练权重初始化DB3b过滤器。尽管存在这种差异,但微调成功地恢复并实现了竞争的泛化性。特征提取器的结果是将所有DB4单元连接到64×子采样表示F中。

空间金字塔池化(SPP)

空间金字塔池模块(SPP)通过在多个空间网格上用平均池化增加f来广泛捕获上下文信息。我们的SPP模块计划首先将F映射到D/2,其中D表示Densenet特征的维数。然后,得到的张量平均集中在四个行数分别为1行、2行、4行和8行的网格上。网格列的数量根据图像大小进行设置,以便所有单元格都是方形。我们将每个池化张量投影到D/8图上,然后用双线性上采样进行向上采样。将所有结果与投影F连接起来,最后与1×1×D/4卷积混合。生成的上下文感知特征张量C的形状为H/64×W/64×D/4。C的维数小于输入图像维数的48倍(我们假设densenet-121,d=1024)。
我们的SPP模块与[22]中提出的模块有两个不同之处。首先,我们根据输入特征的纵横比调整网格:不管输入图像的形状如何,每个网格单元总是方形面积的平均。其次,为了避免输出维数的增加,我们在池化前降低了输入特征的维数。通过4个双线性上采样

上采样数据通路

上采样通路的作用是恢复由于下采样而丢失的精细细节。该设计基于最小向上过渡(TU)块。TU块的目标是混合空间分辨率相差2倍的两种表示。较小的表示来自上采样数据通路,较大的表示来自通过跳连接的下采样通路。首先通过双线性插值法上采样较小的表示,使两种表示具有相同的分辨率。随后,通过将较大的表示投影到低维空间,这样两种表示就具有了相同的特征图。这平衡了两个数据路径的相对影响,并允许通过简单的求和混合两种表示。然后,我们应用1×1卷积来降低维数(如果需要),最后用3×3卷积来准备特征张量,以便进行后续的混合。混合过程是递归的重复上采样数据通路,从每个密集快的输出中得到跳连。最后一个向上转换模块(TD)从DenseNet中得到logits参数。最后通过4个双线性上采样得到输入分辨率的密集预测。

梯度检查点

语义分割在训练过程中需要大量的内存,特别是在大分辨率的输入图像上。由于GPU内存的限制,这些要求很难实现。例如,大家都知道,小批量的训练可能导致批量统计的不稳定性和较差的学习性能,这个问题不能通过更新累计后向传播来克服,因此这是达到高性能的一个障碍。

使用梯度检查点可以减少与反向传播相关的缓存的范围。主要的思想是告知前向传播只缓存所有激活中仔细选择的一个子集。这些激活随后用于在反向传播期间重新计算非缓存的激活。我们将计算图的显示缓存点成为梯度检查点。两个梯度检查点之间的子图称为检查点段。后向传播迭代所有检查点段,并按如下方式处理它们。首先,从缓存的检查点开始重新计算正向传递激活。第二,通过标准后向传播计算梯度。一旦处理了相应的段,即在继续下一段之前,就释放本地缓存。

我们注意到,分段粒度会影响空间和时间效率。扩大检查点段总是减少前向传播的内存占用。但是,对后向传播内存需求的影响是非常重要的。较大的段因为它们需要重新计算所有需要的激活,并将它们存储在本地缓存中,所以需要更多的内存。在某一点上,我们开始失去前向传播时获得的增益。最好的启发式方法是只检查来自3×3卷积的输出,因为它们是计算量最大的操作。换句话说,我们建议在后向传播期间重新计算词干、所有预测、所有批处理规范和所有连接。实验表明,该方法在前向和后向传播的最大内存分配之间取得了很好的平衡。

建议的检查点策略与前面的论文中的方法相关,后者将大量精力投入到共享内存的显式管理中。这里我们表明,依赖于标准的pytorch内存管理器可以获得类似的结果。我们还表明,通过利用标准的pytorch 模块torch.utils.checkpoint,可以完全避免自定义的后向传播操作。最后,我们建议通过只缓存3×3卷积的输出和输入图像来实现进一步的内存增益。我们通过检查stem、transition down和transitionup块以及整个densenet单元来实现这一点。据我们所知,这是第一个将积极的检查点应用于语义分割领域的描述。

实验结果

作者在主流的语义分割数据库上与基于ResNet的相同结构算法进行了比较,也与其他state-of-the-art进行了比较,验证了该算法精度达到最高的同时,速度快一个数量级,参数也是高精度语义分割算法中最小的(是在Cityscapes数据集上唯一的IoU上80的实时语义分割算法)。
下表2为在Cityscapes数据集验证集上使用与ResNet Blocks的算法的比较,可见在使用Dense Blocks时不仅参数少,计算速度快,而且精度也更高。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
表5为该算法的两个最好模型与state-of-the-art语义分割算法在 Cityscapes 验证集与测试集的结果比较。可见该文算法精度最高,计算量也接近最低水平。

在这里插入图片描述

在这里插入图片描述

图3为上述结果的散点图,该文提出的算法LDN是目前唯一的在Cityscapes数据集上IoU精度超过80的实时语义分割算法!
表6是在CamVid 测试集上与基于ResNet结构的算法结果比较,LDN121依然是精度高、模型小、速度快。
表7是与CamVid测试集上的其他state-of-the-art算法的结果比较,精度依旧是最优秀的。

在这里插入图片描述
在这里插入图片描述
表9是在Pascal VOC 2012 验证集与测试集上的与其他state-of-the-art算法相比的分割结果,依然取得了精度的新突破。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分割结果如下:

在这里插入图片描述

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值