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

总结

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用ndoe实现自动化完成增删改查接口

使用ndoe实现自动化完成增删改查接口 最近工作内容比较繁琐,手里需要开发的项目需求比较多,常常在多个项目之间来回切换,有时候某些分支都不知道自己开发了什么、做了哪些需求, 使用手写笔记的方式去记录分支到头来也是眼花缭乱&a…

vscode调试教程

VSCode调试 VSCode Debuggers VSCode使用launch.json进行细粒度的控制,可以启动程序或将其附加到复杂的调试场景中 打开Run and Debug视图Ctrl Shift D 点击create a launch.json file,选择C(GDB/LLDB) 会在工作目录自动创建.vscode/launch.json文…

【Python】已解决:(MongoDB安装报错)‘mongo’ 不是内部或外部命令,也不是可运行的程序

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例及解决方案五、注意事项 已解决:(MongoDB安装报错)‘mongo’ 不是内部或外部命令,也不是可运行的程序 一、分析问题背景 在安装和配置MongoDB时,有…

怎样在 PostgreSQL 中优化对 UUID 数据类型的索引和查询?

文章目录 一、UUID 数据类型概述二、UUID 索引和查询的性能问题三、优化方案(一)选择合适的索引类型(二)压缩 UUID(三)拆分 UUID(四)使用覆盖索引(五)优化查询…

一二三应用开发平台应用开发示例(6)——代码生成、权限配置、运行效果查看

生成代码 完成配置工作,接下来就是见证奇迹的时刻~ 返回到实体列表,选中“文件夹”记录,点击“生成代码”按钮,提示成功后,在项目的output目录下输出了平台基于配置模板产生的各层代码,在原有后端的基础上…

Pyserial设置缓冲区大小失败

文章目录 问题描述原因分析解决方案 问题描述 使用set_buffer_size()设置缓冲区大小后,buffer size仍为默认的4096 import time import serial ser serial.Serial(baudrate9600, timeout0.5) ser.port COM1 ser.set_buffer_size(rx_size8192) ser.open() while …

windows上部署python3.11

hello,大家好,我是一名测试开发工程师,至今已在自动化测试领域深耕9个年头,现已将本人实战多年的多终端自动化测试框架【wyTest】开源啦,在接下来的一个月里,我将免费指导大家使用wyTest,请大家…

欧拉函数.

性质1:质数n的欧拉函数为n-1. 性质2:如果p,q都是质数,那么ϕ ( p ∗ q ) ϕ ( p ) ∗ ϕ ( q ) ( p − 1 ) ∗ ( q − 1 ) 证明:p,2p....q*p都不与q*p互质,q同理,所以总的不互质个…

STM32芯片系列与产品后缀解读

一. 产品系列 STM32单片机是一系列基于ARM Cortex-M内核的32位微控制器,广泛应用于嵌入式系统中。 STM32系列由STMicroelectronics(意法半导体)开发和生产,并凭借其灵活的设计、丰富的外设和强大的生态系统,成为嵌入式…

咬文嚼字:词元是当今生成式人工智能失败的一个重要原因

生成式人工智能模型处理文本的方式与人类不同。了解它们基于"标记"的内部环境可能有助于解释它们的一些奇怪行为和顽固的局限性。从 Gemma 这样的小型设备上模型到 OpenAI 业界领先的 GPT-4o 模型,大多数模型都建立在一种称为转换器的架构上。由于转换器在…

Ubuntu24.04清理常见跟踪软件tracker

尽量一天一更,不刷视频,好好生活 打开系统监视器,发现开机有个tracker-miner-fs-fs3的跟踪程序,而且上传了10kb的数据。 搜索知,该程序会搜集应用和文件的信息。 删除tracker 显示带tracker的apt程序 sudo apt lis…

书生·浦语2.5开源,推理能力再创新标杆

导读 2024 年 7 月 3 日,上海人工智能实验室与商汤科技联合香港中文大学和复旦大学正式发布新一代大语言模型书⽣浦语2.5(InternLM2.5)。相比上一代模型,InternLM2.5 有三项突出亮点: 推理能力大幅提升,在…

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

题目: 题解: # 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,…

【Elasticsearch】Elasticsearch倒排索引详解

文章目录 📑引言一、倒排索引简介二、倒排索引的基本结构三、Elasticsearch中的倒排索引3.1 索引和文档3.2 创建倒排索引3.3 倒排索引的存储结构3.4 词典和倒排列表的优化 四、倒排索引的查询过程4.1 过程4.2 示例 五、倒排索引的优缺点5.1 优点5.2 缺点 六、倒排索…

【Excel】求和带文字的数据

目录标题 1. 给出样例2. CtrlE3. CtrlH → A替换为 → 全部替换 1. 给出样例 2. CtrlE 3. CtrlH → A替换为 → 全部替换

仿qq音乐播放微信小程序模板源码

手机qq音乐应用小程序,在线音乐播放器微信小程序网页模板。包含:音乐歌曲主页、推荐、排行榜、搜索、音乐播放器、歌单详情等。 仿qq音乐播放微信小程序模板源码

【ubuntu自启shell脚本】——在ubuntu中如何使用系统自带的启动应用程序设置开机自启自己的本地shell脚本

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、设置开机自启shell脚本1.使用 gnome-session-properties2.测试的shell例程代码 总结 前言 在Ubuntu系统中设置开机自启脚本是一种重要的自动化方法。开机自…

YOLO-World实时开集检测论文阅读

论文:《YOLO-World: Real-Time Open-Vocabulary Object Detection》 代码:https://github.com/AILab-CVC/YOLO-World 1.Abstract 我们介绍了YOLO World,这是一种创新的方法,通过在大规模数据集上进行视觉语言建模和预训练&#…

vue3+antd 实现点击按钮弹出对话框

格式1&#xff1a;确认对话框 按钮&#xff1a; 点击按钮之后&#xff1a; 完整代码&#xff1a; <template><div><a-button click"showConfirm">Confirm</a-button></div> </template> <script setup> import {Mod…

阶段三:项目开发---大数据开发运行环境搭建:任务4:安装配置Spark集群

任务描述 知识点&#xff1a;安装配置Spark 重 点&#xff1a; 安装配置Spark 难 点&#xff1a;无 内 容&#xff1a; Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop …