[论文笔记] DDRNET

仅作个人笔记 不友善我会激情开麦

摘要

作者说尽管最近的实时语义分割方法已经很快了 但是仍然比不过基于膨胀卷积的方法 作者提出DDRNET  经典的two-branch   设计了一条新的上下文提取模块(DAPPM)能增大感受野并且能基于低分辨率特征图融合多尺度上下文信息

引言

前面就是介绍了一下语义分割的实际应用  后面介绍说最近提出的实时语义分割方法大概分成两类:第一类是利用高效GPU的骨干特别是ResNet18  第二类则是用从头开始训练的复杂的轻量级编码器  然后作者开始引出DDRNET 从主干开始分为两个分辨率不同的分支  两个分支之间有多个双边连接来融合特征 并且设计了一个新模块DAPPM用来将输入的低分辨率图提取多尺度上下文信息  在训练语义分割的数据集之前 先在ImageNet上做了预训练

本文三大创新点:1 提出具有深度双分辨率分支和多个双边融合的新型网络

2 通过将特征聚合与金字塔池化相结合来获取丰富语义信息   当应用在低分辨率特征图的时候 推理时间几乎没增加

3 实现了新sota

相关工作 

分三类来介绍

1 高性能语义分割(非实时的)  2 实时语义分割     3 上下文提取模块

这个可以自己去看原文 这篇写的挺全的 值得一看 写的很详细不在多说

模型方法

由深度双分辨率网络和深度聚合金字塔池化模块组成(the Deep Dual-resolution Network and the Deep Aggregation Pyramid Pooling Module.

先贴一个整体大图

A 深度双分辨率网络

方便起见 作者直接向ResNet添加额外的高分辨率分支  这条高分辨率从分支添加到conv3的末尾  让这条高分辨率分支创建分辨率为原图1/8的特征图 这条高分辨率分支不包含任何下采样操作 并且与低分辨率从分支对应以形成深度高分辨率表示 以充分融合空间信息和语义信息

网络详细结构图 两个版本

作者用两个连续的3*3卷积层题画了原有ResNet中的7*7卷积层 剩余的基本块用于构造主干和随后的两个分支   为了扩大输出维度 每个branch的末尾添加了一个bootleneck block 

双边融合这里与bisenetv2 有点不同  这里面有高分辨率到低分辨率的融合也有低分辨率到高分辨率的融合   并且融合前的策略也有所不同  

从高到低的融合 在逐点求和之前 通过步幅为2的3*3卷积对高分辨率图进行下采样  

从低到高的融合  先通过一个1*1卷积对低分辨率图进行压缩 然后通过双线性插值进行上采样  

下图展示高低分辨率图如何融合

数学方程式可以概括如下

作者一共构建了四种不同的ddrnet版本

DDRNet-23 的宽度是 DDRNet-23-slim 的两倍,DDRNet-39 1.5× 也是 DDRNet-39 的更宽版本。

B 深度聚合金字塔池化模块

作用:从低分辨率从特征图中提取上下文信息

以原图的1/64分辨率作为输入  然后经过一个具有指数级步长增长(2,4,8)的大池化层生成1/128,1/256,1/512尺寸的特征图 还利用了输入特征图和全局平均池化生成的图像信息 

作者说仅仅通过一个单个的3*3或者1*1卷积将多尺度上下文信息融合在一起是不够的,受到Res2Net的启发 先通过对特征图进行上采样 然后再用更多3*3卷积以层次残差的方式融合不同尺度上下文信息  数学公式描述如下

最后 使用1*1卷积连接并压缩特征图  

与SwiftNet类似 DAPPM是使用BN-RELU-Conv实现的

整体框架概览

对双分辨率网络进行了一些更改以适应分割任务:

首先将低分辨率从分支RBB中的3*3卷积的步长设置为2进行下一步下采样 然后再低分辨率从分支的输出中添加DAPPM 从1/64分辨率的高级特征图中提取丰富上下文信息(原文中有提到 1/64很小 不会影响速度)  

最后的从高到低的融合被替换为通过双线性插值和加和融合 

最后设计了一个简单的分割头 由3*3卷积和后面的1*1卷积组成  分割头的计算负载可以通过改变3×3卷积层的输出维度来调整。 我们将 DDRNet-23-slim 设置为 64,将 DDRNet-23 设置为 128,将 DDRNet39 设置为 256。 请注意,除了分割头和 DAPPM 模块外,所有模块都已在 ImageNet 上进行了预训练。

D 深度监督

这个老操作了 基本都在用  额外的监督可以简化深度卷积神经网络的优化 这这列举了前人的几种方法    在PSPNet中,添加辅助损失来监督ResNet-101的res4_22块的输出,并根据实验结果将相应的权重设置为0.4。 BiSeNetV2 提出了一种增强训练策略,其中在语义分支的每个阶段的末尾添加额外的分割头。 然而,它需要大量的实验来找到平衡每个损失的最佳权重,并导致训练记忆的不可忽略的增加。 为了获得更好的结果,SFNet 采用了类似的策略,称为级联深度监督学习。

在本文中,作者仅采用简单的额外监督来与大多数方法进行公平比较。 我们按照PSPNet添加如图4所示的辅助损失,并将权重设置为0.4。 辅助分割头在测试阶段被丢弃。 最终损失是交叉熵损失的加权和,可以表示为:

实验

训练设置:

在对语义分割任务进行微调之前,双分辨率网络在 ImageNet 上进行训练,遵循与之前的工作相同的数据增强策略。 所有模型均在 4 个 2080Ti GPU 上以 224×224 的输入分辨率、256 的批量大小和 100 个 epoch 进行训练。 初始学习率设置为 0.1,并在第 30、60 和 90 个时期减少 10 倍。我们使用 SGD 训练所有网络,权重衰减为 0.0001,Nesterov 动量为 0.9。 ImageNet 验证集上的 Top-1 错误如表 III 所示。 尽管 DDRNet 的效率并不优于在 ImageNet 上精心设计的许多先进的轻量级骨干网,但考虑到速度权衡,它仍然在语义分割基准上取得了初步的结果。 下面介绍Cityscapes、CamVid、COCOStuff的训练设置。

1)城市景观:我们使用SGD优化器,初始学习率为0.01,动量为0.9,权重衰减为0.0005。 我们采用0.9次幂的策略学习策略来降低学习率,并实现数据增强方法,包括随机裁剪图像、0.5到2.0范围内的随机缩放和随机水平翻转。 将图像随机裁剪成1024×1024进行训练。 所有模型均在 4 个 2080Ti GPU 上使用 484 个 epoch(约 120K 次迭代)、批量大小为 12 和syncBN 进行训练。 对于在测试服务器上评估的模型,我们在训练期间同时从训练集和验证集中提供图像。 为了与和进行公平比较,还使用了在线困难示例挖掘(OHEM)。

2)CamVid:我们将初始学习率设置为0.001,并训练所有模型968个epoch。 图像被随机裁剪成 960×720 以便进行训练。 所有模型均在单个 GPU 和其他训练设备上进行训练 尾巴与 Cityscapes 的尾巴相同。 当使用 Cityscapes 进行预训练时,我们对模型进行了 200 个时期的微调。

3)COCOStuff:初始学习率为0.001,总训练周期为110。在数据增强之前,我们将图像的短边尺寸调整为640。 裁剪尺寸为640×640,与BiSeNetV2相同。 其他训练细节与 Cityscapes 相同,而权重衰减为 0.0001。 在推理阶段,我们将图像分辨率固定为640×640。

实验部分 简单看看就行  肯定自己最好  贴几张实验结果吧 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值