Lightweight and Progressively-Scalable Networks for Semantic Segmentation(轻量级语义分割模型-2022)


文章地址
代码地址

摘要

  多尺度学习框架被认为是促进语义分割的模型。然而,这个问题并不是微不足道的,特别是对于现实世界的部署,这通常需要高效率的推理延迟。在本文中,我们从轻量级语义分割的角度彻底分析了卷积块的设计(卷积类型和卷积中的通道数),以及跨多个尺度的交互方式。通过如此深入的比较,我们总结出三个原则,并相应地设计了轻量级和渐进式可扩展网络(LPS-Net),它以贪婪的方式扩展了网络的复杂性。从技术上讲,LPS-Net 首先利用这些原理来构建一个微型网络。然后,LPS-Net 通过一次扩展单个维度(卷积块的数量、通道的数量或输入分辨率)逐步将微型网络扩展到更大的网络,以满足最佳速度/准确性权衡。

一、设计理念

  多尺度学习是对语义分割的性能提升的关键。目前的研究中,涉及利用多尺度学习主要可分为三个方面:U-shape、Pyramid Pooling和Multi-Path Framework。

  • U-shape:通过分层融合特征,逐渐提高空间分辨率,自然产生多尺度特征;
  • Pyramid Pooling:通过在多个尺度上执行空间或不对称空间金字塔池化来深入研究多尺度信息;
  • Multi-Path Framework:将输入图像的大小调整为多个分辨率或尺度,并将每个尺度输入到深度网络的单独路径中。通过这样做,Multi-Path设计将输入分辨率从高到低并行放置,并明确维护高分辨率信息,而不是从低尺度特征图恢复。因此,学习到的特征可能更有能力对每个像素进行分类和定位。

该网络采用的就是 Multi-Path Framework 这种多路径的思想,并同时兼顾了速度和准确性。其设计理论主要是两方面:
(1)用于语义分割的轻量级计算单元
(2)逐步扩大网络规模,同时平衡准确性和速度

  对于(1),作者通过探索卷积块的基本单元,包括卷积的类型和卷积中的通道数;
  对于(2),作者构建了一个微小的模型,然后沿着多个可能的维度逐步扩展微小模型,并在每一步中选择一个实现最佳权衡的单一维度,以缓解精度/速度平衡问题。

二、网络架构

在这里插入图片描述

2.1、卷积块

2.1.1、卷积类型

在这里插入图片描述

  作者将标准 3×3 卷积和深度可分离卷积进来了比较,发现标准卷积的FLOPS比深度可分离卷积高。根据经验和实验,LPSNet最后使用标准的 3×3 卷积

2.1.2、通道数

在这里插入图片描述
  由于现代库/设备中高度优化的软件(例如,BLAS、cuDNN)和硬件(例如,CUDA Core、Tensor Core),实际上推理时间和通道宽度之间的关系变得模糊。上图中比较了具有不同通道宽度的 3×3 卷积的 FLOP 和延迟。当通道宽度从 1 增加到 17 时,FLOP 呈二次增长(参见图 (a) 中的蓝色曲线);同时,延迟仅线性增长并在大约 8 和 16 通道宽度处达到平台期(参见图 (a) 中的红色曲线)。这种具有高 FLOPs 效率的通道宽度设置被视为卷积的“sweet spots”。类似地,在图 (b) 中,在 32 和 64 通道宽度处获得了高 FLOPs 效率。这些优点主要归功于具有 2^n -divisible 通道宽度的卷积的可并行化实现。因此,将 LPSNet 中卷积的通道宽度设为 2^n -divisible,其中 n 尽可能大。

2.2、Multi-Path交互

在这里插入图片描述
  实验研究了6种交互模块的变体,它们可以分为3类。对于第1类(Direct-A/B),转置卷积转换后的低分辨率特征通过元素求和或通道连接直接集成到高分辨率特征中。第2类还加上了注意力机制来促进多路径交互,即 Attention-A/B。由于大量的转置卷积转换和注意力,上述4种类型的交互模块在计算上是昂贵的。因此,通常将它们放置在多路径网络的末端,而使早期阶段的路径交互未被利用。
  为了缓解这个问题,设计了2个有效的交互模块来实现早期阶段的交互,即 Bilateral-A/B。Bilateral-A 转换低分辨率特征并将其注入高分辨率特征,反之亦然。这种对称设计平等地对待每条网络路径,简单的转换以有效的方式在早期阶段触发交互。Bilateral-B 进一步消除了 Bilateral-A 中的卷积变换,通过仅在输入特征图上应用空间调整大小和元素求和来实现最简单的交互。通过实验验证 Bilateral-B 实现了最佳速度/准确性权衡。因此,采用 Bilateral-B 作为 LPSNet 中的默认交互模块。

def bi_interaction(x_h, x_l):
    sizeH = (int(x_h.shape[-2]), int(x_h.shape[-1]))
    sizeL = (int(x_l.shape[-2]), int(x_l.shape[-1]))
    o_h = x_h + upsample(x_l, sizeH)
    o_l = x_l + upsample(x_h, sizeL)
    return o_h, o_l

def tr_interaction(x1, x2, x3):
    s1 = (int(x1.shape[-2]), int(x1.shape[-1]))
    s2 = (int(x2.shape[-2]), int(x2.shape[-1]))
    s3 = (int(x3.shape[-2]), int(x3.shape[-1]))
    o1 = x1 + upsample(x2, s1) + upsample(x3, s1)
    o2 = x2 + upsample(x1, s2) + upsample(x3, s2)
    o3 = x3 + upsample(x2, s3) + upsample(x1, s3)
    return o1, o2, o3

2.3、可伸缩架构

  确定好卷积块和交互模块后,LPSNet 架构可以定义为 N = {B, C, R},其中 B, C, R 是的可调参数。因此,网络复杂度由这些参数从3个维度决定。

  • 深度维度(B)是决定网络捕获高级语义信息能力的块数。
  • 宽度维度(C),即每个阶段的通道数,会影响每个卷积的学习能力。
  • 分辨率维度 ® ,表示每条路径的空间粒度。
    在这里插入图片描述

在设计 LPSNet 架构时,为了平衡这3个维度,首先构建一个微型网络,然后以渐进的方式一次扩展一个维度。最后通过实验给出的架构如下:

在这里插入图片描述
  注:虽然在上面整体网络架构上是画的三条路径交互,但论文中说明:与增加通道宽度和放大输入分辨率相比,融合三条或三条以上的路径并不是有效的语义分割的最优方法,考虑到性能与效率,最终模型是采用的两条路径,在开源代码中也可以体现。

2.4、模型对比

在这里插入图片描述

总结

  该模型没有使用复杂的操作与模块,仅在卷积块和双线性插值中使用3×3 Conv来实现路径间的交互。然后在这些基础上,构建一个小网络,通过探究扩展宽度、深度或分辨率的一定维度,将小网络扩展到一系列较大的网络。实现了模型性能与效率的良好平衡。

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想要躺平的一枚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值