YoloV9改进策略:Block改进|轻量实时的重参数结构|最新改进|即插即用(全网首发)

摘要

本文使用重参数的Block替换YoloV9中的RepNBottleneck,GFLOPs从239降到了227;同时,map50从0.989涨到了0.99(重参数后的结果)。

改进方法简单,只做简单的替换就行,即插即用,非常推荐!

在这里插入图片描述

论文翻译:《用于实时语义分割的可重参数化双分辨率网络》

https://arxiv.org/pdf/2406.12496

语义分割在自动驾驶和医学图像等应用中发挥着关键作用。尽管现有的实时语义分割模型在准确性和速度之间取得了令人称赞的平衡,但其多路径块仍然影响着整体速度。为了解决这个问题,本研究提出了一种专门用于实时语义分割的重参数化双分辨率网络(RDRNet)。具体来说,RDRNet采用了一种双分支架构,在训练过程中使用多路径块,并在推理过程中将它们重参数化为单路径块,从而同时提高了准确性和推理速度。此外,我们还提出了重参数化金字塔池化模块(RPPM),以增强金字塔池化模块的特征表示能力,同时不增加其推理时间。在Cityscapes、CamVid和Pascal VOC 2012数据集上的实验结果表明,RDRNet在性能和速度方面都优于现有的最先进模型。研究代码可在https://github.com/gyyang23/RDRNet获取。

关键词:实时语义分割,多分支,双分辨率深度网络,重参数化,金字塔池化模块。

一、引言

语义分割是计算机视觉领域中的一项关键任务,它要求将图像中的每个像素分配到一个特定的语义类别中。这项技术在包括自动驾驶[1]、医学图像分析[2]和环境监测[3]在内的各种应用中发挥着重要作用。随着深度学习技术的发展,语义分割模型的性能得到了大幅提升。然而,仍然存在一些需要解决的问题,例如模型无法快速分析图像。这一限制阻碍了模型在自动驾驶等下游任务中的直接部署。因此,对语义分割算法进行进一步的研究和改进仍然具有重要意义。

在过去,为了满足实时性或移动性要求,已经提出了许多实时语义分割模型[4]-[8]。这些模型的特点在于参数较少、计算量降低以及推理速度快。最早的模型之一ERFNet[4]通过使用一维卷积核和跳跃连接重新设计ResNet[9]块,实现了参数和计算量的减少。然而,ERFNet的编码器-解码器架构限制了其从高分辨率特征中有效学习空间信息的能力。为了应对这一限制,BiSeNetV1[5]引入了一种双分支架构,其中一个分支专注于空间细节学习,另一个分支则专注于深度语义信息。虽然BiSeNetV1&V2[5]、[6]在速度和准确性之间取得了良好的平衡,但DDRNet[7]和PIDNet[8]的出现进一步提高了模型的速度和准确性,其中PIDNet甚至在准确性上匹配或超过了高性能分割模型。

虽然这些模型[7]、[8]在速度和准确性方面取得了成功,但网络架构中使用残差块[9]无疑会阻碍推理速度。虽然残差块解决了深度神经网络中梯度消失和爆炸的问题,但其残差连接增加了计算成本和内存使用量,最终影响了推理速度。相比之下,由于单向性,单路径块[10]更适合实时分割。多路径块在训练方面表现出色,但不适合推理,而单路径块则表现出相反的特性。因此,受上述内容的影响,我们旨在使用多路径块进行训练,并使用单路径块进行推理。虽然这种方法在实时语义分割领域很少被探索,但在分类任务中,某些研究[11]-[13]在模型训练期间加入了多路径块,随后在推理期间将它们重新参数化为单路径块。

在本研究中,我们受到先前研究[13]、[14]的启发,提出了一种基于双分支架构的可重参数化双分辨率网络(RDRNet),用于实时语义分割任务。在提取浅层特征后,RDRNet将这些特征引导到两个不同的分支中。一个分支专注于学习深度语义信息(语义分支),而另一个分支则深入获取空间细节信息(细节分支)。值得注意的是,RDRNet不仅仅是在两个分支的末尾进行输出融合,而是促进了分支之间的多次交互,以实现更有效的信息融合。我们重新设计了ResNet块,通过消除冗余的内核,仅保留一个单一的 3 × 3 3 \times 3 3×3内核,并引入了一条带有两个 1 × 1 1 \times 1 1×1内核的新路径。重要的是,残差路径保持不变。在整个训练阶段,RDRNet块都遵循此配置。然而,在推理过程中,它经历了重参数化,将三条路径合并成一条带有 3 × 3 3 \times 3 3×3卷积核的单路径。此外,认识到PAPPM[8]与DAPPM[7]相比性能快速但相对较弱,我们提出了一种新的金字塔池化模块:可重参数化金字塔池化模块(RPPM)。RPPM通过在PAPPM旁边并行添加一个 3 × 3 3 \times 3 3×3分组卷积来学习更多的特征表示。在推理时,这个卷积与另一个分组卷积合并,生成一个新的 3 × 3 3 \times 3 3×3分组卷积,从而确保RPPM不会引入额外的计算负担。值得注意的是,RPPM在性能上与DAPPM相似,同时匹配了PAPPM的速度。
在这里插入图片描述

为了评估我们模型的性能和实时能力,我们在三个数据集上进行了实验:Cityscapes[15]、CamVid[16]和Pascal VOC 2012[17]。实验结果表明,RDRNet在分割精度和推理速度之间达到了最佳平衡,如图1所示。与其他最先进的实时语义分割模型相比,我们的模型表现出更优越的性能和更快的速度。此外,我们还进行了消融实验,以证明所提出的RPPM的有效性。

主要贡献总结如下:

  • 通过利用多路径块在训练中的优势来提升模型性能,并在推理过程中将多路径块重参数化为单路径块以提升推理速度,我们提出了一种新颖的模型,称为可重参数化双分辨率网络(RDRNet),用于实时语义分割。
  • 为了使金字塔池化模块能够学习更丰富的特征表示而不增加推理时间,我们引入了可重参数化金字塔池化模块(RPPM)。
  • 在三个公共数据集上的实验表明,与其他最先进的实时语义分割模型相比,所提出的模型在性能和推理速度上都表现出更优越的性能。

II、相关工作

语义分割旨在将图像中的每个像素分配给其对应的语义类别。此外,语义分割可以进一步分为高性能语义分割和实时语义分割。

A. 高性能语义分割

高性能语义分割指的是在保证分割质量和准确性的前提下对图像进行语义分割。作为最早的深度学习分割模型,FCN(全卷积网络)[18]通过将传统CNN(卷积神经网络)模型中的全连接层替换为卷积层,实现了端到端的像素级语义分割。然而,FCN中过度使用下采样操作导致特征图中空间细节的丢失。为了解决这个问题并在不牺牲空间分辨率的情况下扩大感受野,DeepLab系列[19]、[20]将具有不同扩张率的空洞卷积[21]集成到网络中,这偏离了传统的卷积方式。此外,为了从多尺度特征中聚合上下文信息并增强网络捕获全局信息的能力,PSPNet(金字塔场景解析网络)[22]引入了金字塔池化模块。与通过多尺度特征融合来捕获上下文的方法不同,DANet(双注意力网络)[23]在网络内部采用双注意力机制,以自适应地合并局部特征及其全局依赖。近年来,Transformer取得了显著的发展,催生了几种基于Transformer结构的分割模型[24]-[26]。这些模型利用Transformer的自注意力机制有效地捕获长距离依赖,从而在语义分割任务中实现了性能上的显著提升。

B. 实时语义分割

实时语义分割指的是在确保分割速度的前提下对图像进行语义分割。这种方法通常会采用轻量级网络架构,或者通过模型压缩和加速等技术来提高分割速度。根据实时语义分割模型的架构,模型可以进一步分为两大类:编码器-解码器架构和多分支架构。

编码器-解码器架构:ERFNet [4] 引入了一种新型块,该块利用非对称卷积核(ID convolution kernel)和跳跃连接(skip connection)来减少参数和计算量。类似地,CGNet [27] 提出了上下文引导块(Context Guided block),该块在同时学习局部特征和周围上下文特征的同时,还利用全局上下文信息对它们进行进一步改进。为了提高推理速度和减少参数,CGNet在上下文引导块中使用了逐通道卷积(channel-wise convolutions),并精心设计了整个网络。STDC [28] 认识到在BiSeNet [5] 中添加额外分支以补偿空间信息不足的做法是耗时的。为了解决这个问题,STDC 提出了一种细节聚合模块(Detail Aggregation Module),该模块以单分支的方式保留了低级特征的空间信息。此外,PPLiteSeg [29] 优化了解码器部分,并引入了一个灵活且轻量级的解码器来减少计算开销。

多分支架构:编码器-解码器架构模型通常使用跳跃连接(skip connections)来连接编码器和解码器之间的特征图,从而利用空间细节。相比之下,多分支架构模型在网络中加入了额外的分支,使空间细节的学习成为可能。ICNet [30] 集成了由适当标签指导的多分辨率分支。BiSeNetV1和V2 [5], [6] 引入了一个双分支架构,其中一个分支专门用于学习深层的语义信息,另一个分支则专注于学习空间信息。值得注意的是,这两个分支不共享权重。相比之下,[7], [8], [31] 等方法则共享了一些主干网络的低层权重。Fast-SCNN [31] 在提取了一定的浅层特征后,将特征分成两个分支:一个分支保留特征,另一个分支提取全局特征。DDRNet [7] 在两个分支之间进行了多次双边融合,以高效地合并信息,同时引入了深度聚合金字塔池化模块(DAPPM),该模块按顺序合并提取的多尺度上下文信息。PIDNet [8] 提出了一个三分支架构,利用三个分支分别解析详细信息、深层语义信息和边界信息。此外,PIDNet 还引入了并行聚合金字塔池化模块(PAPPM),它是DAPPM的改进版本,旨在实现并行计算。

尽管基于编码器-解码器架构的模型旨在加强其学习空间细节的能力,但与多分支架构模型相比,仍存在差距。这种差距体现在准确性与速度之间的权衡上。因此,我们基于双分支架构实现了RDRNet。现有的实时语义分割模型,无论是基于编码器-解码器还是多分支架构,都受到多路径块使用的阻碍,这限制了模型的推理速度。与这些模型不同,我们的RDRNet在训练过程中采用多路径块以确保其学习能力。然而,在推理过程中,RDRNet将多路径块重新参数化为单路径块,以在不牺牲准确性的情况下提高其速度。

III、方法

在本节中,我们首先介绍所提出的可重新参数化双分辨率网络(RDRNet)的总体框架,然后详细解释可重新参数化块(Reparameterizable Block)和可重新参数化金字塔池化模块(Reparameterizable Pyramid Pooling Module)。最后,我们详细阐述了模型训练阶段所使用的损失函数。

A. 可重新参数化双分辨率网络

如图2所示,RDRNet在提取浅层特征后,将特征图分流到两个分支。上分支称为语义分支,设计用于学习深层语义信息。相比之下,下分支称为细节分支,负责捕获空间细节信息。在阶段4的多个块中进行特征提取后,两个分支的特征进行双边融合,使两个分支能够相互补充。阶段5也执行类似的操作。在阶段6之后,语义分支的特征被送入金字塔池化模块以生成更丰富的特征表示,而细节分支的特征保持不变。最终,两个分支的特征相加并传递给分割头进行预测。在训练阶段,一个辅助分割头提供了一个额外的损失函数,有助于模型全面学习数据特征。值得注意的是,由于辅助分割头在推理阶段不被使用,因此它不会影响模型的推理速度和效率。
在这里插入图片描述

在以往的研究中,如DDRNet[7]和PIDNet[8]等作品采用了ResNet[9]残差块作为其模型的基本块。为了消除残差块导致的较慢推理速度,我们使用提出的可重新参数化块作为RDRNet的基本块。在图2中,可以看到可重新参数化块占据了整个模型的主要部分(阶段1到5),这是我们RDRNet推理速度提升的主要因素。在进行双边融合时,RDRNet将使用 1 × 1 1 \times 1 1×1卷积来压缩语义分支的特征,使用双线性插值进行上采样,然后将其加到细节分支的特征上。细节分支的特征则通过步长为2的 3 × 3 3 \times 3 3×3卷积(或两个)进行扩展和下采样,然后加到语义分支的特征上。图3展示了阶段4之后的双边融合过程。假设 R S R_{S} RS R D R_{D} RD分别对应语义分支和细节分支的一系列可重新参数化块, T S → D T_{S \rightarrow D} TSD T D → S T_{D \rightarrow S} TDS分别表示语义到细节的特征对齐操作和细节到语义的特征对齐操作。双边融合后,语义分支的第 i i i个特征,记为 X S i X_{S}^{i} XSi,和细节分支的第 i i i个特征,记为 X D i X_{D}^{i} XDi,可以表述如下:

{ X S i = ReLU ⁡ ( R S ( X S i − 1 ) + T D → S ( R D ( X D i − 1 ) ) ) X D i = ReLU ⁡ ( R D ( X D i − 1 ) + T S → D ( R S ( X S i − 1 ) ) ) \left\{\begin{array}{l} X_{S}^{i}=\operatorname{ReLU}\left(R_{S}\left(X_{S}^{i-1}\right)+T_{D \rightarrow S}\left(R_{D}\left(X_{D}^{i-1}\right)\right)\right) \\ X_{D}^{i}=\operatorname{ReLU}\left(R_{D}\left(X_{D}^{i-1}\right)+T_{S \rightarrow D}\left(R_{S}\left(X_{S}^{i-1}\right)\right)\right) \end{array}\right. {XSi=ReLU(RS(XSi1)+TDS(RD(XDi1)))XDi=ReLU(RD(XDi1)+TSD(RS(XSi1)))

我们RDRNet的分割头与DDRNet类似,包含一个 3 × 3 3 \times 3 3×3卷积后跟一个 1 × 1 1 \times 1 1×1卷积。 3 × 3 3 \times 3 3×3卷积用于学习在合并语义特征和细节特征后的特征,同时也调整通道维度( O c O_{c} Oc)。 1 × 1 1 \times 1 1×1卷积用于将特征通道数与类别数对齐;例如,如果类别数为19,则 1 × 1 1 \times 1 1×1卷积将特征从通道 O c O_{c} Oc调整到19。
在这里插入图片描述

我们对RDRNet的深度和宽度进行了缩放,并构建了RDRNet的四个不同版本,即RDRNetS-Simple、RDRNet-S、RDRNet-M和RDRNet-L。在表I中,我们展示了RDRNet-S和RDRNet-L的详细架构。RDRNetS-Simple和RDRNet-S具有相同的深度和宽度,但在分割头中的 O c O_{c} Oc不同,而RDRNet-M的宽度是RDRNet-S的两倍。我们将这四个模型的 O c O_{c} Oc分别设置为64、128、128和256。
在这里插入图片描述

B. 可重新参数化块

如图4所示,可重新参数化块(RB)在训练期间有三条路径:第一条路径应用一个 3 × 3 3 \times 3 3×3卷积,第二条路径应用两个 1 × 1 1 \times 1 1×1卷积,第三条路径是残差连接。在进行下采样操作时,会移除残差连接。这是因为残差连接用于保持输入特征图,而下采样操作会将特征图的空间分辨率减半,使得残差路径不再适用。在推理时,RDRNet将RB重新参数化为一个 3 × 3 3 \times 3 3×3卷积,而不会损失精度。与ResNet块相比,RB增加了一条由两个 1 × 1 1 \times 1 1×1卷积组成的路径。这条路径使RB能够学习更多的特征表示,有助于提高模型的性能。
在这里插入图片描述

在进行重新参数化时,RB首先将卷积权重与批量归一化(BN)的参数合并。假设在BN中,缩放因子、偏移因子、均值和方差分别为 γ , β , μ \gamma, \beta, \mu γ,β,μ σ ∈ R C out \sigma \in \mathbb{R}^{C_{\text{out}}} σRCout,对于一个输入通道为 C in C_{\text{in}} Cin、输出通道为 C out C_{\text{out}} Cout k × k k \times k k×k卷积,将卷积权重 W ∈ R C out × ( C in × k × k ) W \in \mathbb{R}^{C_{\text{out}} \times\left(C_{\text{in}} \times k \times k\right)} WRCout×(Cin×k×k)与偏置 B ∈ R C out B \in \mathbb{R}^{C_{\text{out}}} BRCout和BN合并后得到的权重和偏置如下:

W ′ = γ σ W , B ′ = ( B − μ ) γ σ + β W^{\prime}=\frac{\gamma}{\sigma} W, \quad B^{\prime}=\frac{(B-\mu) \gamma}{\sigma}+\beta W=σγW,B=σ(Bμ)γ+β

在这里插入图片描述

如图5所示,在合并卷积和BN后,RB会将两个 1 × 1 1 \times 1 1×1卷积串联起来。假设有两个 1 × 1 1 \times 1 1×1卷积,输入特征为 x ∈ R C in × H × W x \in \mathbb{R}^{C_{\text{in}} \times H \times W} xRCin×H×W,输出特征为 y ∈ R C out 2 × H ′ × W ′ y \in \mathbb{R}^{C_{\text{out} 2} \times H^{\prime} \times W^{\prime}} yRCout2×H×W,则卷积可以表示为:

其中*表示卷积操作,.表示矩阵乘法。 i m 2 c o l \mathrm{im} 2 \mathrm{col} im2col算子将输入 x x x转换为一个二维矩阵,该矩阵对应于卷积核的形状。例如, i m 2 c o l 1 \mathrm{im} 2 \mathrm{col}_{1} im2col1会将形状为 C in × H × W C_{\text{in}} \times H \times W Cin×H×W x x x转换为形状为 ( C in × 1 × 1 ) × ( H ′ × W ′ ) \left(C_{\text{in}} \times 1 \times 1\right) \times\left(H^{\prime} \times W^{\prime}\right) (Cin×1×1)×(H×W) X X X。reshape算子将得到的矩阵转换为张量(特征图)。由于 W 1 × 1 ( 2 ) W_{1 \times 1}^{(2)} W1×1(2)是一个形状为 C out 2 × ( C out 1 × 1 × 1 ) C_{\text{out} 2} \times\left(C_{\text{out} 1} \times 1 \times 1\right) Cout2×(Cout1×1×1) 1 × 1 1 \times 1 1×1卷积核,并且 W 1 × 1 ( 1 ) ⋅ i m 2 c o l 1 ( x ) W_{1 \times 1}^{(1)} \cdot \mathrm{im} 2 \mathrm{col}_{1}(x) W1×1(1)im2col1(x)的形状为 C out 1 × ( H ′ × W ′ ) C_{\text{out} 1} \times\left(H^{\prime} \times W^{\prime}\right) Cout1×(H×W),我们可以得出:

im ⁡ 2 col ⁡ 2 ( reshape ⁡ ( W 1 × 1 ( 1 ) ⋅ im ⁡ 2 col ⁡ ( x ) ) ) = W 1 × 1 ( 1 ) ⋅ im ⁡ 2 col ⁡ 1 ( x ) .  \begin{array}{l} \operatorname{im} 2 \operatorname{col}_{2}\left(\operatorname{reshape}\left(W_{1 \times 1}^{(1)} \cdot \operatorname{im} 2 \operatorname{col}(x)\right)\right) \\ =W_{1 \times 1}^{(1)} \cdot \operatorname{im} 2 \operatorname{col}_{1}(x) \text {. } \\ \end{array} im2col2(reshape(W1×1(1)im2col(x)))=W1×1(1)im2col1(x)

根据方程3和方程4,可以进一步推导如下:
= W 1 × 1 ( 2 ) ⋅ W 1 × 1 ( 1 ) ⋅ im2col ( x ) = ( W 1 × 1 ( 2 ) ⋅ W 1 × 1 ( 1 ) ) ⋅ im2col 1 ( x ) = W 1 × 1 ∗ x , \begin{array}{l} =W_{1 \times 1}^{(2)} \cdot W_{1 \times 1}^{(1)} \cdot \text{im2col}(x) \\ =\left(W_{1 \times 1}^{(2)} \cdot W_{1 \times 1}^{(1)}\right) \cdot \text{im2col}_1(x) \\ =W_{1 \times 1} * x \text{,} \\ \end{array} =W1×1(2)W1×1(1)im2col(x)=(W1×1(2)W1×1(1))im2col1(x)=W1×1x,
其中 W 1 × 1 W_{1 \times 1} W1×1是合并后产生的新卷积。因此,两个 1 × 1 1 \times 1 1×1卷积可以合并为一个单独的 1 × 1 1 \times 1 1×1卷积,而不会导致任何性能下降。值得注意的是,方程4仅在第二个 1 × 1 1 \times 1 1×1卷积的步长为1时成立。当RB执行下采样时,第一个 1 × 1 1 \times 1 1×1卷积的步长设置为2,而第二个 1 × 1 1 \times 1 1×1卷积的步长设置为1。

在合并了两个串联的 1 × 1 1 \times 1 1×1卷积之后,RB(残差块)中剩下了一个 3 × 3 3 \times 3 3×3卷积、一个 1 × 1 1 \times 1 1×1卷积和一个残差连接。随后,RB将分别重新参数化 1 × 1 1 \times 1 1×1卷积和残差连接为 3 × 3 3 \times 3 3×3卷积。如图5所示,直观上很明显, 1 × 1 1 \times 1 1×1卷积是 3 × 3 3 \times 3 3×3卷积的一个特例,其中中心元素的权重值非零,而其他元素的权重值为0。因此,RB可以很容易地将 1 × 1 1 \times 1 1×1卷积重新参数化为 3 × 3 3 \times 3 3×3卷积。关于残差连接,RB将首先构建一个 1 × 1 1 \times 1 1×1卷积 W r c ∈ R C i × C j × 1 × 1 ( i ≤ j ≤ out ) W_{rc} \in \mathbb{R}^{C_{i} \times C_{j} \times 1 \times 1}(i \leq j \leq \text{out}) WrcRCi×Cj×1×1(ijout)来替代它,其中如果 i i i等于 j j j,则权重值为1;如果 i i i不等于 j j j,则权重值为0。然后,将 1 × 1 1 \times 1 1×1卷积重新参数化为 3 × 3 3 \times 3 3×3卷积。由于现在所有三条路径都是 3 × 3 3 \times 3 3×3卷积,RB可以直接将这三个 3 × 3 3 \times 3 3×3卷积的权重和偏置相加,以获得一个新的 3 × 3 3 \times 3 3×3卷积。

总的来说,RB不仅受益于多路径块的训练优势,还继承了单路径块的推理优势。这种设计不仅使模型在训练期间能够充分利用多路径块的丰富信息和复杂的特征表示,还促进了推理阶段的快速图像分割。
C. 可重新参数化的金字塔池化模块

金字塔池化模块(PPM)[22]被用于捕获图像在多个尺度上的特征,帮助模型理解和分析图像中的局部和全局信息。在实时语义分割模型中,提出的深度聚合PPM(DAPPM)[7]和并行聚合PPM(PAPPM)[8]显著提升了模型的性能。虽然PAPPM基于DAPPM采用并行处理来加快模块速度,但由于并行化中省略了某些操作,模块的精度有所降低。为了同时实现PAPPM的速度和DAPPM的性能,我们引入了可重新参数化的PPM(RPPM)。
在这里插入图片描述

图6展示了RPPM的总体结构,清晰地可视化了从输入特征到输出特征的流程,其中并行卷积本质上是分组卷积。鉴于PyTorch中的分组卷积利用并行计算技术,在不同卷积对不同输入进行操作的情况下,我们可以将不同的输入拼接起来,然后传递给分组卷积,从而利用并行计算来提升推理速度。在RPPM中,我们采用两个并行结构的 3 × 3 3 \times 3 3×3分组卷积,使模块能够学习更丰富的特征表示,从而提升性能。值得注意的是,这两个卷积仅在训练过程中存在,在测试时,RPPM将它们重新参数化为一个单独的、优化的分组卷积。这个过程类似于残差块(RB)的重新参数化过程。训练后,RPPM首先将两个 3 × 3 3 \times 3 3×3分组卷积及其对应的批量归一化(BN)层进行融合,然后通过元素相加合并两个卷积的权重和偏置。由于RPPM的推理结构与PAPPM一致,RPPM成功保持了PAPPM的推理效率,同时实现了性能提升。
D. 深度监督

先前的研究[6]-[8]已经证明,在模型训练阶段引入辅助分割头可以在不增加额外推理成本的情况下提升分割性能。在RDRNet中,我们在训练过程中使用了一个额外的辅助分割头,该分割头在测试过程中被移除。如图2所示,这个辅助分割头位于RDRNet第4阶段双侧融合之后,从细节分支接收特征。模型经过前向传播后,总损失可以表示为:

L = L n + α L a L=L_{n}+\alpha L_{a} L=Ln+αLa

其中, L n L_{n} Ln L a L_{a} La分别代表正常损失和辅助损失, α \alpha α表示辅助损失的权重系数,在RDRNet中设置为0.4。为了有效地处理数据不平衡和难例样本问题,我们还采用了OHEM交叉熵作为损失函数,这与之前的工作[8]保持一致。

IV. 实验

A. 数据集

Cityscapes。Cityscapes[15]在城市场景理解和自动驾驶领域被广泛使用。它包含19个类别,共有5000张图像,其中2975张用于训练,500张用于验证,1525张用于测试。这些图像都经过了精细的标注,分辨率为 1024 × 2048 1024 \times 2048 1024×2048像素。

CamVid。CamVid[16]是第一个带有语义标签的视频数据集。它包含701张图像,其中367张用于训练,101张用于验证,233张用于测试。每张图像的分辨率为 720 × 960 720 \times 960 720×960像素。该数据集包含32个类别标签,但通常只有其中的11个用于训练和评估。

Pascal VOC 2012。Pascal VOC 2012[17]主要用于图像分类、目标检测和图像分割等任务。它涵盖了20个类别和1个背景类别。共有2913张图像用于语义分割任务,包括训练集中的1464张图像和验证集中的1449张图像。与Cityscapes和CamVid不同,这些图像的分辨率不是固定的。
B. 实现细节

Cityscapes。我们使用随机梯度下降(SGD)作为优化器,动量设置为0.9,权重衰减为0.0005。初始学习率设置为0.01,并采用幂次为0.9的多项式学习率策略逐渐降低学习率。在训练过程中,应用了数据增强技术,包括在0.5到2.0范围内进行随机缩放、以 1024 × 1024 1024 \times 1024 1024×1024的分辨率进行随机裁剪,以及以0.5的概率进行随机水平翻转。在推理过程中,使用了分辨率为 1024 × 2048 1024 \times 2048 1024×2048的原始图像,并未应用数据增强。我们将批量大小设置为12,并在两个GPU上训练模型进行了 120   K 120 \mathrm{~K} 120 K次迭代(大约484个周期)。

CamVid。遵循先前的工作[7]、[8],我们使用了Cityscapes的预训练模型,并将学习率初始化为0.001。在训练过程中,我们使用了与Cityscapes相同的数据增强技术,但不同之处在于图像被随机裁剪到 720 × 960 720 \times 960 720×960的分辨率。在推理过程中,使用了分辨率为 720 × 960 720 \times 960 720×960的原始图像。我们在单个GPU上训练了模型7800次迭代(200个周期),其余超参数的设置与Cityscapes中使用的相同。

Pascal VOC 2012。我们使用了Cityscapes的预训练模型,并将初始学习率设置为0.001。在训练过程中,图像分辨率被调整为 512 × 2048 512 \times 2048 512×2048,然后应用了与Cityscapes相同的数据增强技术,但不同之处在于图像被随机裁剪到 512 × 512 512 \times 512 512×512的分辨率。在推理过程中,图像分辨率被调整为 512 × 2048 512 \times 2048 512×2048。值得注意的是,这里的分辨率只是一个调整目标。由于Pascal VOC中的图像分辨率不是固定的,因此为了保持纵横比,将图像调整到接近 512 × 2048 512 \times 2048 512×2048的分辨率。我们在两个GPU上进行了24400次迭代(200个周期)的训练,其余超参数的设置与Cityscapes中使用的相同。

C. 计算平台

我们使用的计算平台硬件包括Intel Xeon Gold 5218R CPU和两个NVIDIA RTX 3090 GPU。软件堆栈包括Ubuntu 20.04.1、CUDA 11.3、PyTorch 1.12.1和MMSegmentation [35] 1.0.0。在训练阶段,我们使用两个GPU,而在推理阶段,只使用一个GPU,并将批量大小设置为1。

D. 与最先进模型的比较

我们在三个基准数据集(即Cityscapes、CamVid和Pascal VOC 2012)上评估了我们的模型性能。为了确保公平比较,我们在表中指出了模型是否在ImageNet [36]数据集上进行了预训练,因为一些现有工作采用了这种策略,而其他工作则没有。在评估指标方面,我们选择平均交并比(mIoU)作为主要指标来评估所有模型的性能。
在这里插入图片描述

Cityscapes。表II展示了分割模型在Cityscapes验证集和测试集上的实验结果,其中*符号表示我们在自己的平台上重新训练了模型,并在自己的平台上评估了模型的推理速度。值得注意的是,表中列出的模型在测试集上进行评估之前,都使用了组合的训练集和验证集进行训练。实验结果表明,我们的RDRNet在mIoU方面优于其他最先进的模型,同时保持了具有竞争力的推理速度和模型大小。作为我们最快的模型,RDRNet-S-Simple在验证集上达到了 76.8 % m I o U 76.8\% \mathrm{mIoU} 76.8%mIoU,优于同规模的其他模型,并且达到了134.6 FPS,这也优于其他模型。

尽管Fast-SCNN是最快的,达到了192.0 FPS,但其性能仅为 71.0 % 71.0\% 71.0%,这还不够。在测试集上,我们的RDRNetS-Simple模型仅次于PIDNet-S。经过进一步分析,我们发现PIDNet-S中分割头的 O c O_{c} Oc(此参数在III-A中引入)为128,而我们的RDRNet-S-Simple的 O c O_{c} Oc较低,为64,这限制了模型的表示能力。通过将 O c O_{c} Oc增加到128(RDRNet-S),我们的模型在测试集上的性能与PIDNet-S相当,同时仍然保持了速度优势。此外,与其他相同大小的模型相比,我们的RDRNet-M和RDRNet-L模型也表现出了卓越的性能和快速的推理速度。例如,我们的RDRNet-L在验证集和测试集上的mIoU分别比PIDNet-L提高了 0.5 % 0.5\% 0.5% 0.2 % 0.2\% 0.2%,同时保持了8.2 FPS的速度优势。

CamVid。表III展示了分割模型在CamVid测试集上的实验结果,其中表中的所有模型都使用MMSegmentation在我们的平台上重新训练,并在我们的平台上进行推理。基于之前的研究[7]、[8],训练过程利用了由训练集和验证集组成的组合数据集,而测试集则用于模型评估。在重新训练过程中,我们将所有模型的学习率降低到原始学习率的 1 / 10 1/10 1/10,并对Cityscapes预训练权重进行了7800次迭代微调,同时保持其他训练参数与Cityscapes训练时一致。
在这里插入图片描述

实验结果表明,我们的RDRNet在性能和推理速度之间保持了平衡。与ERFNet、ICNet、CGNet、BiSeNet和STDC相比,RDRNet在性能和速度上都处于领先地位。虽然Fast-SCNN是最快的,但其mIoU仅达到 66.2 % 66.2\% 66.2%。与DDRNet-23-Slim相比,RDRNet-SSimple在性能和速度上都表现出色。然而,虽然RDRNet-M的mIoU高于DDRNet-23,但其FPS略低。与PIDNet-S相比,RDRNet-S达到了相同的mIoU,但速度快了46.6 FPS。此外,RDRNet-M和RDRNet-L分别在性能和速度上优于PIDNet-M和PIDNet-L。具体来说,RDRNet-M在保持与PIDNet-M相似mIoU的同时,实现了19.5 FPS的提升,而RDRNet-L在mIoU上优于PIDNet-L,并实现了11.4 FPS的提升。

Pascal VOC 2012. 表IV展示了分割模型在Pascal VOC 2012验证集上的实验结果,其中表中的所有模型都使用MMSegmentation在我们的平台上重新训练,并在我们的平台上进行推理。在重新训练过程中,我们将所有模型的学习率降低到原始学习率的 1 / 10 1/10 1/10,并对Cityscapes预训练权重进行了24400次迭代微调,同时保持其他训练参数与Cityscapes训练时一致。实验结果表明,所提出的RDRNet在性能和推理速度之间达到了最佳平衡。虽然PIDNet在Cityscapes和CamVid上取得了优异的结果,但在VOC 2012上却难以复制这种成功。相比之下,RDRNet在所有三个数据集上都始终表现出色。作为我们最快的模型,RDRNet-SSimple在mIoU方面分别比DDRNet-23-Slim和PIDNet-S高出 0.6 % 0.6\% 0.6% 1.0 % 1.0\% 1.0%,并且在FPS上有显著的9.8和53.8的提升。此外,我们的其他RDRNet变体也表现出强大的性能。除了mIoU指标外,我们还通过像素精度指标来补充我们的评估,该指标是通过确定准确分类的像素占总像素数的比例来计算的。实验结果表明,我们的RDRNet在像素精度方面也表现出优越性。有趣的是,BiSeNetV1在VOC验证集上的mIoU特别出色,比BiSeNetV2高出显著的 6.0 % 6.0\% 6.0%

我们不确定这是否是由于ImageNet预训练的影响,因为BiSeNetV1虽然在ImageNet上进行了预训练,但在CamVid测试集上的表现却不如BiSeNetV2。为了验证这种效果是否确实由ImageNet预训练引起,我们进行了不使用ImageNet预训练的额外实验。实验结果表明,在没有ImageNet预训练的情况下,BiSeNetV1的mIoU从 56.0 % 56.0\% 56.0%下降到 54.2 % 54.2\% 54.2%。这表明,即使不进行ImageNet预训练,BiSeNetV1在VOC数据集上仍然能够表现出色。尽管BiSeNetV1在这个特定数据集上表现出色,但考虑到在所有三个数据集上的实验,我们得出结论,RDRNet总体上优于BiSeNetV1。

E. 可视化结果分析

为了清晰地展示我们模型的性能,我们对DDRNet-Slim、PIDNet S和我们的RDRNet-Simple的分割结果进行了可视化,如图7所示。该图表明,与其他分割模型相比,RDRNet能够更完整地识别目标。例如,在第一行中,三个模型都没有完全识别出卡车,但RDRNet提供了更完整的识别。在识别公共汽车(第四行)时也出现了同样的问题。在第五行中,DDRNet和PIDNet对地面上的交通标志似乎不太敏感,而RDRNet则准确地识别了它。因此,RDRNet获得了更好的分割结果。
在这里插入图片描述

F. 消融研究

可重参数化块。为了验证RB的有效性,我们进行了一系列消融实验。具体来说,我们从包含一个 3 × 3 3 \times 3 3×3卷积的单路径块开始实验,并逐步添加了一个包含两个 1 × 1 1 \times 1 1×1卷积的路径和一个具有残差连接的路径。由于 1 × 1 1 \times 1 1×1卷积路径包括两个 1 × 1 1 \times 1 1×1卷积,我们进一步通过减少这些卷积来探索其他组合。如表V所示,当仅使用单路径块时,RDRNet的性能最低,mIoU仅为 75.6 % 75.6\% 75.6%。然而,随着额外路径的引入,性能逐渐提高,达到了 76.8 % 76.8\% 76.8%。有趣的是,“Conv $3 \times 3+\operatorname{Conv}_{1 \times 1}^{(1)}+ $Residual”组合的性能比“Conv 3 × 3 + Conv ⁡ 1 × 1 ( 1 ) 3 \times 3+ \operatorname{Conv}_{1 \times 1}^{(1)} 3×3+Conv1×1(1)”组合更差,这表明残差连接并不总是对模型性能产生积极影响。此外,由于包含 1 × 1 1 \times 1 1×1卷积的路径可以包含任意数量的此类卷积,我们进行了消融实验以确定此路径的最佳数量。表VI中的实验结果表明,当此路径包含两个 1 × 1 1 \times 1 1×1卷积时,RDRNet的性能最佳。每个额外的 1 × 1 1 \times 1 1×1卷积都会使模型训练的内存使用量增加约3.3 GiB。值得注意的是,我们在这些实验中没有测试FPS,因为在推理过程中,所有组合的结构都保持一致。
在这里插入图片描述

可重参数化金字塔池化模块。为了验证RPPM的有效性,我们进行了一系列消融实验。具体来说,我们分别用PPM、DAPPM和PAPPM替换了RDRNet中的RPPM。此外,我们还完全移除了RPPM,从而消除了金字塔池化模块,以观察其对模型性能的影响。实验结果如图8所示,其中不同深浅的紫色代表不同的模块,“None”表示没有金字塔池化模块。如图所示,所提出的RPPM达到了最高的性能,达到了 76.8 % 76.8\% 76.8%,比PAPPM高出 0.6 % 0.6\% 0.6%。与PAPPM相比,这种性能提升并没有增加额外的推理时间成本,因为RPPM的结构在推理过程中被重新参数化为与PAPPM一致。当不使用金字塔池化模块时,模型实现了最快的推理速度,达到了140.0 FPS,但mIoU仅为 72.9 % 72.9\% 72.9%。我们认为为了mIoU提高 3.9 % 3.9\% 3.9%而牺牲5.4 FPS是合理的。
在这里插入图片描述

双向融合。为了验证两种双向融合的有效性,我们进行了一系列消融实验。具体来说,我们深入研究了RDRNet不使用双向融合、RDRNet仅使用双向融合1(在第四阶段后应用)和RDRNet仅使用双向融合2(在第五阶段后应用)的场景。图8显示,在不使用双向融合的情况下,RDRNet的mIoU最低,为 74.8 % 74.8\% 74.8%,但达到了最快的FPS,达到144.2。与仅使用双向融合1相比,仅使用双向融合2可以实现更高的性能,但推理速度较慢。当同时利用双向融合1和双向融合2时,mIoU达到峰值 76.8 % 76.8\% 76.8%,但相应的FPS下降到134.6。总而言之,尽管模型的推理速度有所降低(但仍可接受),但采用两种双向融合证明对于提高性能是有效的。

V、结论

在本研究中,我们提出了一种可重参数化双分辨率网络(RDRNet)用于实时语义分割。通过在训练过程中利用多路径块并在推理过程中将其重新参数化为单路径块,我们优化了准确性和速度。此外,我们还引入了一个可重参数化金字塔池化模块(RPPM)来增强特征表示,同时不增加推理时间。广泛的实验结果表明,RDRNet优于现有的最先进模型,提供了高性能和快速推理能力。未来,我们计划探索更多强大的可重参数化训练结构。

改进方法

测试结果

yolov9-c summary: 555 layers, 48445152 parameters, 0 gradients, 227.8 GFLOPs
                 Class     Images  Instances          P          R      mAP50   mAP50-95: 100%|██████████| 15/15 00:05
                   all        230       1412      0.924      0.977       0.99      0.729
                   c17        230        131      0.962      0.985      0.994        0.8
                    c5        230         68      0.948          1      0.989      0.838
            helicopter        230         43      0.953          1      0.982      0.656
                  c130        230         85      0.988      0.999      0.995       0.69
                   f16        230         57      0.949      0.965      0.976      0.658
                    b2        230          2      0.762          1      0.995      0.601
                 other        230         86      0.939      0.953       0.98      0.579
                   b52        230         70      0.963      0.957      0.983      0.823
                  kc10        230         62      0.985      0.984      0.988      0.834
               command        230         40      0.947          1      0.993      0.798
                   f15        230        123      0.984          1      0.995      0.699
                 kc135        230         91      0.954      0.989      0.987      0.716
                   a10        230         27      0.968      0.963      0.981      0.477
                    b1        230         20          1      0.987      0.995      0.668
                   aew        230         25      0.883          1      0.972       0.76
                   f22        230         17       0.95          1      0.995      0.727
                    p3        230        105      0.984          1      0.995      0.806
                    p8        230          1      0.598          1      0.995      0.597
                   f35        230         32          1      0.984      0.995      0.567
                   f18        230        125      0.982      0.992      0.989      0.815
                   v22        230         41      0.981          1      0.995      0.726
                 su-27        230         31       0.97          1      0.995      0.859
                 il-38        230         27      0.954          1      0.995      0.788
                tu-134        230          1      0.599          1      0.995      0.895
                 su-33        230          2          1       0.61      0.995      0.697
                 an-70        230          2       0.76          1      0.995      0.796
                 tu-22        230         98      0.993          1      0.995      0.809

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/782614.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

保健品商城小程序模板源码

保健品商城小程序模板源码 简洁通用的保健品,健康生活,零售商品,电子商务微信小程序前端模板下载。包含:主页、购物车、客服、个人中心、我的订单、商品详情、我的钱包、设置等等。 保健品商城小程序模板源码

程序员如何做好需求判断?

1. 导语 本文作为2024上半年核心思考之二。 通过他人经验传导、个人实践、广泛阅读书籍(方法论类、企业经营类、传记类、财务类,具体书单附文末),学会基于更高阶的经营者视角来做好业务需求判断。本文思路如下: 首先,抛一个灵魂问…

【server】springboot 整合 redis

1、redis 使用模式 1.1 单机模式 1.1.1 编译安装方式 1.1.1.1 下载 Redis的安装非常简单,到Redis的官网(Downloads - Redis),下载对应的版本,简单几个命令安装即可。 1.1.1.2 编译安装 tar xzf redis-stable.tar.…

IDEA 开发工具

IDEA 开发工具 IDEA软件激活新建项目新建project 运行调试 IDEA软件激活 访问激活码网进入带*的域名下载并解压左上角的zip包先执行sh uninstall.sh,再执行sh install.sh在带*的网页中复制并使用激活码code 新建项目 新建project file》New〉Project》New Proje…

【测试】系统压力测试报告模板(Word原件)

系统压力测试,简而言之,是在模拟高负载、高并发的环境下,对系统进行全面测试的过程。它旨在评估系统在面对极端使用条件时的性能表现,包括处理能力、响应时间、资源消耗及稳定性等关键指标。通过压力测试,开发团队能够…

MySQL之备份与恢复和MySQL用户工具(一)

备份与恢复 备份脚本化 为备份写一些脚本是标准做法。展示一个示例程序,其中必定有很多辅助内容,这只会增加篇幅,在这里我们更愿意列举一些典型的备份脚本功能,展示一些Perl脚本的代码片段。你可以把这些当作可重用的代码块&…

Python酷库之旅-第三方库Pandas(009)

目录 一、用法精讲 19、pandas.read_xml函数 19-1、语法 19-2、参数 19-3、功能 19-4、返回值 19-5、说明 19-6、用法 19-6-1、数据准备 19-6-2、代码示例 19-6-3、结果输出 20、pandas.DataFrame.to_xml函数 20-1、语法 20-2、参数 20-3、功能 20-4、返回值 …

【国产开源可视化引擎Meta2d.js】网格

画布背景网格 在线体验: 乐吾乐2D可视化 示例: // 设置默认缺省网格属性 meta2d.store.options.grid true; // 开启 meta2d.store.options.gridColor eeeeee; // 网格线条颜色 meta2d.store.options.gridSize 10; // 格子大小// 设置单个图纸的网格…

Golang | Leetcode Golang题解之第222题完全二叉树的节点个数

题目&#xff1a; 题解&#xff1a; func countNodes(root *TreeNode) int {if root nil {return 0}level : 0for node : root; node.Left ! nil; node node.Left {level}return sort.Search(1<<(level1), func(k int) bool {if k < 1<<level {return false}…

【ETABS】【RHINO】案例:Swallow to ETABS

文章目录 01. Swallow Overview总览1 LOAD&#xff1a;Defination of LoadCase、Response Combo2 SectionArea Section and Area Load&#xff08;面截面定义与指定&#xff0c;面荷载指定&#xff09;Frame Section with rebarattr and linear load&#xff08;带钢筋属性框架…

flutter:监听路由的变化

问题 当从路由B页面返回路由A页面后&#xff0c;A页面需要进行数据刷新。因此需要监听路由变化 解决 使用RouteObserver进行录音监听 创建全局变量&#xff0c;不在任何类中 final RouteObserver<PageRoute> routeObserver RouteObserver<PageRoute>();在mai…

Hi3861 OpenHarmony嵌入式应用入门--UDP Server

本篇使用的是lwip编写udp服务端。需要提前准备好一个PARAM_HOTSPOT_SSID宏定义的热点&#xff0c;并且密码为PARAM_HOTSPOT_PSK。 修改网络参数 在Hi3861开发板上运行上述四个测试程序之前&#xff0c;需要根据你的无线路由、Linux系统IP修改 net_params.h文件的相关代码&…

基于轨迹信息的图像近距离可行驶区域方案验证

一 图像可行驶区域方案 1.1 标定场景 1.2 标定步骤 设计一定间距标定场&#xff0c;在标定场固定位置设置摄像头标定标识点。主车开到标定场固定位置录制主车在该位置各个摄像头数据&#xff0c;通过摄像头捕获图像获取图像上关键点坐标pts-2d基于标定场设计&#xff0c;计算…

Python | Leetcode Python题解之第222题完全二叉树的节点个数

题目&#xff1a; 题解&#xff1a; # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def countNodes(self,…

基于字典学习的地震数据降噪(MATLAB R2021B)

稀疏表示基于研究者们提出了许多变换基函数的方法逐渐成型&#xff0c;比如小波域&#xff0c;曲波域&#xff0c;dreamlet 域等&#xff0c;其原理是利用地震信号在变换域内的稀疏性和可分离性以去除噪声。继 Donoho发表非线性去噪方法-小波阈值萎缩方法&#xff0c;在后续的研…

汉中茗茶小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;基础数据管理&#xff0c;茶叶管理&#xff0c;论坛管理&#xff0c;公告管理&#xff0c;茗茶历史管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;茗茶信息&#xf…

阶段三:项目开发---搭建项目前后端系统基础架构:任务9:导入空管基础数据

任务描述 本阶段任务是导入项目的基础数据&#xff0c;包括空管基础数据和离线的实时飞行数据&#xff08;已经脱敏&#xff09;。 任务指导 本阶段任务需要导入两种数据&#xff1a; 1、在MySQL中导入空管基础数据 kongguan.sql空管基础数据表说明&#xff1a; 1告警信息…

JVM原理(二二):JVM虚拟机线程调度与状态转换

1. Java线程调度 Java的线程是被映射到系统的原生线程上实现的 线程调度是指系统为线程分配处理器使用权的过程&#xff0c;调度主要方式有两种&#xff0c;分别是协同式线程调度和抢占式线程调度。 协同式线程调度&#xff1a;如果使用协同式调度的多线程系统&#xff0c;线…

Cortex-A510——内核及汇编

Cortex-A510——内核及汇编 小狼http://blog.csdn.net/xiaolangyangyang 1、异常等级 2、异常等级切换 同步异常&#xff1a; 1、SVC/HVC/SMC&#xff1b; 2、MMU引发的异常&#xff08;内核态EL1发生&#xff0c;发生后不会进行异常等级切换…

Java基础-内部类与异常处理

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、Java 内部类 什么是内部类&#xff1f; 使用内部类的优点 访问局部变量的限制 内部类和继承 内部…