DDRNet实时语义分割

Deep Dual-resolution Networks for Real-time and Accurate Semantic Segmentation of Road Scenes

原文项目地址

摘要: 语义分割是自动驾驶汽车理解周围场景的关键技术。当代模型的吸引人的性能通常是以繁重的计算和漫长的推理时间为代价的,这对于自动驾驶来说是无法忍受的。最近的方法使用轻量级架构(编码器-解码器或双路径)或对低分辨率图像进行推理,实现了非常快速的场景解析,甚至在单个 1080Ti GPU 上以超过 100 FPS 的速度运行。然而,这些实时方法与基于扩张主干的模型在性能上仍然存在显着差距。为了解决这个问题,本文提出了一系列专门为实时语义分割而设计的高效主干网。所提出的深度双分辨率网络(DDRNet)由两个深度分支组成,在这两个分支之间执行多个双边融合。此外,我们设计了一种名为深度聚合金字塔池模块(DAPPM)的新上下文信息提取器,以扩大有效感受野并基于低分辨率特征图融合多尺度上下文。本文的方法在 Cityscapes 和 CamVid 数据集上实现了准确性和速度之间的新的最先进的权衡。特别是,在单个 2080Ti GPU 上,DDRNet-23-slim 在 Cityscapes 测试集上在 102 FPS 下产生 77.4% mIoU,在 CamVid 测试集上在 230 FPS 下产生 74.7% mIoU。通过广泛使用的测试增强,本文的方法优于大多数最先进的模型,并且需要更少的计算。


引言:
在本文中,提出了具有深度高分辨率表示的双分辨率网络,用于高分辨率图像(尤其是道路驾驶图像)的实时语义分割。本文的 DDRNet 从一个主干开始,然后分为两个具有不同分辨率的并行深度分支。一个深层分支生成相对高分辨率的特征图,另一个深层分支通过多次下采样操作提取丰富的语义信息。两个分支之间桥接多个双边连接,实现高效的信息融合。此外,还提出了一个名为 DAPPM 的新颖模块,它输入低分辨率特征图,提取多尺度上下文信息,并以级联方式合并它们。在语义分割数据集上进行训练之前,双分辨率网络按照常见范例在 ImageNet 上进行训练。

主要创新:

  1. 提出了一系列具有深度双分辨率分支和多个双边融合的新型双边网络,作为实时语义分割的有效骨干网络。
  2. 一个新颖的模块旨在通过将特征聚合与金字塔池相结合来获取丰富的上下文信息。当在低分辨率特征图上执行时,推理时间几乎没有增加。

方法

在本节中,描述整个管道,它由两个主要组件组成:深度双分辨率网络和深度聚合金字塔池模块。

在这里插入图片描述

  1. Deep Dual-resolution Network(深度双分辨率网络)
    首先,通过向分类主干(如ResNet)添加额外的高分辨率分支来实现双分辨率网络。为了在分辨率和推理速度之间取得平衡,让高分辨率分支的分辨率为输入图像的1/8的,因此将高分辨率分支附加到conv3 stage的后面,也就是第一个1/8特征图的后面(即采用了一种类似HRNet的网络结构设计)。高分辨率分支不包含任何下采样操作,并且与低分辨率分支一一对应,进而在不同阶段进行多次双向特征融合,实现空间信息和语义信息的充分融合。
    DDRNet-23-slim 和 DDRNet-39 的详细架构如表 1 所示。修改了原始 ResNet 的输入主干,用两个连续的 3×3 卷积层替换一个 7×7 卷积层。剩余的基本块用于构造主干和随后的两个分支。为了扩大输出维度,在每个分支的末尾添加一个瓶颈块。双边融合包括将高分辨率分支融合到低分辨率分支(高到低融合)和将低分辨率分支融合到高分辨率分支(低到高融合)。对于从高到低的融合,在逐点求和之前,通过步幅为 2 的 3×3 卷积序列对高分辨率特征图进行下采样。对于从低到高分辨率的情况,低分辨率特征图首先通过 1×1 卷积进行压缩,然后通过双线性插值进行上采样。图3展示了双边融合是如何实现的。第i个高分辨率特征图 X H i X_{Hi} XHi和低分辨率特征图 X L i X_{Li} XLi可以写为:
    在这里插入图片描述
    在这里插入图片描述
    本文共构建了4种不同深度和宽度的双分辨率网络。DDRNet-23的宽度是DDRNet-23-slim的两倍,DDRNet-39 1.5×同样也是DDRNet-39的较宽版本

  2. Deep Aggregation Pyramid Pooling Module(深度聚合金字塔池化模块)

在这里插入图片描述
DAPPM是一个类似于PPM的多尺度模块,接在语义分支的最后,用来进一步从低分辨率特征图中提取上下文信息,其具体结构如图5所示。以1/64分辨率的特征图为输入,采用指数步长的大池化核生成1/128、1/256、1/512分辨率的特征图,以及输入特征图和全局平均池化产生的图像级信息(红色块)。作者认为,仅使用一个3×3卷积或1×1卷积将所有的多尺度上下文信息融合在一起是不够的。所以采用类似Res2Net的结构,首先对特征图进行上采样(灰色块),然后使用更多的3×3卷积,以层次残差hierarchial-residual的方式融合不同尺度的上下文信息(紫色块)。最后将所有得到的特征concatenate并使用一个1×1卷积压缩。此外,为了便于优化,还添加了一个1×1卷积映射作为shortcut。
在这里插入图片描述
在 DAPPM 内部,较大池化内核提取的上下文与更深层次的信息流集成,通过将不同深度与不同大小的池化内核集成来形成多尺度性质。表 II 显示 DAPPM 能够提供比 PPM 更丰富的上下文。尽管DAPPM包含更多的卷积层和更复杂的融合策略,但由于输入分辨率仅为图像分辨率的1/64,因此几乎不影响推理速度。例如,对于1024×1024的图像,特征图的最大分辨率为16×16。
在这里插入图片描述

  1. Overall Architecture for Semantic Segmentation(语义分割总体架构)
    DDRNet的整体结构如图4所示,对第一部分提出的双分辨率网络Dual-resolution Network做了一些修改来适应语义分割任务:
    (1)将低分辨率分支RBB(single residual bottleneck block)的3×3卷积stride设为2,进一步下采样;
    (2)在低分辨率分支的输出中加入DAPPM,从1/64分辨率的特征图中提取丰富的上下文信息;
    (3)最后用双线性插值和求和融合实现的低到高融合取代高到低融合;
    (4)设计了一个简单的分割头,由3×3卷积和1×1卷积组成。可以通过改变3×3卷积的输出通道数来调整分割头的计算量,DDRNet-23-slim为64,DDRNet-23为128,DDRNet-39为256。
    除了分割头和DAPPM模块以外,所有模块都在ImageNet上进行了预训练。
    在这里插入图片描述
  2. Deep Supervision
    在训练阶段额外的监督可以简化深度卷积神经网络的优化,也就是辅助损失。辅助损失源于PSPNet,监督ResNet-101的res4_22 block的输出,在损失函数中,辅助损失的权重设置为0.4,后续的BiSeNetV2、SFNet中同样有相应的沿用。DDRNet只采用简单的附加监督来保证公平比较,监督的位置如图4所示,用于辅助损失的分割头在测试阶段可以discarded,不会影响推理速度。最终的损失函数如式(3)所示,辅助损失的权重同样设置为0.4.
    在这里插入图片描述
实验

在这里插入图片描述
从表IV中可以看到DDRNet在实时性和高精度之间实现了新的最优平衡。最小的模型DDRNet-23-slim在测试集上取得了77.4% mIoU和102 FPS;更大的模型DDRNet-23在已发布的实时方法中取得了最高的精度,79.4% mIoU和37 FPS,超过了SFNet(ResNet-18)0.5%mIoU且速度是它的两倍。最大的模型DDRNet-39取得了80.4% mIoU和22 FPS。在Cityscapes验证集上,DDRNet-23-slim取得了最优的结果,仅有36.3 GFLOPs和5.7M参数。

在这里插入图片描述
从表V中可以看到DDRNet-23-slim在测试集上取得了74.7%和230 FPS,且没有用Cityscapes做预训练。该方法的准确率位居第二,运行速度快于其他方法。考虑到CamVid的训练像素远小于Cityscapes,所以可以认为DDRNets的出色表现部分归功于充足的ImageNet预训练。此外,在Cityscapes上做预训练之后的模型,在保持实时性的同时取得了最高的精度,DDRNet-23实现了80.6% mIoU和94 FPS,比BiSeNetV2-L精度更高且更快。
在这里插入图片描述

表VI表明,在这个具有挑战性的场景下,DDRNet同样远优于BiSeNetV2。DDRNet-23实现了和PSPNet50类似的精度,而运行速度是PSPNet50的20倍。
通过将DDRNet与Cityscapes测试集中最优的模型进行比较,进一步展示了DDRNet在语义分割方面的能力。表VII表明标准的测试增强将DDRNet-39的准确率从80.4%提高到81.9%。DDRNet-39性能优于许多集成了self-attention的模型。DDRNet-39 1.5×的模型大小更接近表7中的其他模型,达到了非常有竞争力的性能(82.4% mIoU)。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

相关推荐

  1. GO语言实现视频分割

    2024-07-15 20:16:01       56 阅读
  2. 语义分割任务的准确率计算:基于PyTorch实现

    2024-07-15 20:16:01       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 20:16:01       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 20:16:01       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 20:16:01       62 阅读
  4. Python语言-面向对象

    2024-07-15 20:16:01       72 阅读

热门阅读

  1. (leetcode学习)16. 最接近的三数之和

    2024-07-15 20:16:01       19 阅读
  2. /EtherCATInfo/Descriptions/Devices/Device/SubDevice/@Hideable

    2024-07-15 20:16:01       18 阅读
  3. 零基础自学爬虫技术该从哪里开始入手?

    2024-07-15 20:16:01       21 阅读
  4. FeignClient详解

    2024-07-15 20:16:01       22 阅读
  5. 【经验】LiveData使用常见问题

    2024-07-15 20:16:01       21 阅读
  6. A2A VPN简介

    2024-07-15 20:16:01       22 阅读
  7. c++多态详细学习

    2024-07-15 20:16:01       18 阅读
  8. 注册登录后上传文件到本地数据库项目

    2024-07-15 20:16:01       17 阅读
  9. PYTHON 常用算法 33个

    2024-07-15 20:16:01       19 阅读
  10. k8s集群创建devops项目一直等待状态,没有发现host

    2024-07-15 20:16:01       21 阅读
  11. C++:异常

    2024-07-15 20:16:01       24 阅读
  12. C++的模板(十一):算法的轨迹

    2024-07-15 20:16:01       20 阅读