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

摘要

本文使用重参数的Block替换YoloV8中的Bottleneck,GFLOPs从165降到了116,降低了三分之一;同时,map50-95从0.937涨到了0.947。
改进方法简单,只做简单的替换就行,即插即用,非常推荐!

在这里插入图片描述

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

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优于现有的最先进模型,提供了高性能和快速推理能力。未来,我们计划探索更多强大的可重参数化训练结构。

改进方法

测试结果

YOLOv8l summary (fused): 208 layers, 31570800 parameters, 12060480 gradients, 116.8 GFLOPsClass     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 15/15 [00:04<00:00,  3.70it/s]all        230       1412      0.968       0.96       0.99      0.747c17         40        131       0.99      0.992      0.995      0.833c5         19         68      0.966          1      0.994      0.825helicopter         13         43      0.975      0.909      0.977       0.61c130         20         85          1      0.999      0.995      0.654f16         11         57      0.982       0.95      0.992      0.698b2          2          2      0.887          1      0.995      0.822other         13         86       0.98      0.965      0.972      0.516b52         21         70      0.975      0.971      0.986      0.826kc10         12         62          1      0.973      0.989      0.847command         12         40      0.993          1      0.995      0.826f15         21        123      0.961          1      0.994      0.697kc135         24         91      0.988      0.989       0.99      0.707a10          4         27          1      0.476      0.936       0.45b1          5         20      0.985          1      0.995      0.768aew          4         25      0.951          1      0.995      0.785f22          3         17      0.949          1      0.995       0.75p3          6        105          1      0.973      0.995      0.813p8          1          1      0.892          1      0.995      0.697f35          5         32      0.966      0.969      0.987      0.547f18         13        125      0.992      0.989      0.991      0.834v22          5         41      0.986          1      0.995      0.737su-27          5         31       0.98          1      0.995      0.861il-38         10         27      0.991          1      0.995      0.834tu-134          1          1      0.847          1      0.995      0.895su-33          1          2          1      0.774      0.995      0.796an-70          1          2      0.889          1      0.995      0.725tu-22          8         98      0.997          1      0.995      0.823

总结

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

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

相关文章

C++_STL---list

list的相关介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 list的底层是带头双向循环链表结构&#xff0c;链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和后一个元素。…

IDEA与通义灵码的智能编程之旅

1 概述 本文主要介绍在IDEA中如何安装和使用通义灵码来助力软件编程,从而提高编程效率,创造更大的个人同企业价值。 2 安装通义灵码 2.1 打开IDEA插件市场 点击IDEA的设置按钮,下拉选择Plugins,如下: 2.2 搜索通义灵码 在搜索框中输入“通义灵码”,如下: 2.3 安…

使用ifconfig命令获取当前服务器的内网IP地址

如何使用ifconfig命令获取当前服务器的内网IP地址呢&#xff1f; ifconfig eth0 | grep inet | awk {print $2}

什么是五级流水?银行眼中的“好流水”,到底是什么样的?

无论是按揭买房还是日常贷款&#xff0c;银行流水都是绕不开的一环。规划好你的流水&#xff0c;不仅能让你在申请贷款时更有底气&#xff0c;还可能帮你省下不少冤枉钱。今天&#xff0c;咱们就来一场深度剖析&#xff0c;聊聊如何在按揭贷款、个人经营抵押贷款前&#xff0c;…

代码随想录 数组部分+代码可在本地编译器运行

代码随想录 数组部分&#xff0c;代码可在本地编译器运行 文章目录 数组理论基础704.二分查找题目&#xff1a;思路二分法第一种写法二分法第二种写法 代码 27.移除元素题目&#xff1a;思路-双指针法代码 977.有序数组的平方题目思路-双指针代码 209.长度最小的子数组题目&am…

ChatGPT4深度解析:探索智能对话新境界

大模型chatgpt4分析功能初探 目录 1、探测目的 2、目标变量分析 3、特征缺失率处理 4、特征描述性分析 5、异常值分析 6、相关性分析 7、高阶特征挖掘 1、探测目的 1、分析chat4的数据分析能力&#xff0c;提高部门人效 2、给数据挖掘提供思路 3、原始数据&#xf…

科研绘图系列:R语言径向柱状图(Radial Bar Chart)

介绍 径向柱状图(Radial Bar Chart),又称为雷达图或蜘蛛网图(Spider Chart),是一种在极坐标系中绘制的柱状图。这种图表的特点是将数据点沿着一个或多个从中心向外延伸的轴来展示,这些轴通常围绕着一个中心点均匀分布。 特点: 极坐标系统:数据点不是在直角坐标系中展…

【后端面试题】【中间件】【NoSQL】MongoDB查询优化3(拆分、嵌入文档,操作系统)

拆分大文档 很常见的一种优化手段&#xff0c;在一些特定的业务场景中&#xff0c;会有一些很大的文档&#xff0c;这些文档有很多字段&#xff0c;而且有一些特定的字段还特别的大。可以考虑拆分这些文档 大文档对MongoDB的性能影响还是很大的&#xff0c;就我个人经验而言&…

ASCII码对照表【2024年汇总】

&#x1f37a;ASCII相关文章汇总如下&#x1f37a;&#xff1a; &#x1f388;ASCII码对照表&#xff08;255个ascii字符汇总&#xff09;&#x1f388;&#x1f388;ASCII码对照表&#xff08;Unicode 字符集列表&#xff09;&#x1f388;&#x1f388;ASCII码对照表&#x…

Day05-04-持续集成总结

Day05-04-持续集成总结 1. 持续集成2. 代码上线目标项目 1. 持续集成 git 基本使用, 拉取代码,上传代码,分支操作,tag标签 gitlab 用户 用户组 项目 , 备份,https,优化. jenkins 工具平台,运维核心, 自由风格工程,maven风格项目,流水线项目, 流水线(pipeline) mavenpom.xmlta…

【瑞数补环境实战】某网站Cookie补环境与后缀分析还原

文章目录 1. 写在前面2. 特征分析3. 接口分析3. 补JS环境4. 补后缀参数 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走…

二分查找2

1. 山脉数组的峰顶索引&#xff08;852&#xff09; 题目描述&#xff1a; 算法原理&#xff1a; 根据题意我们可以将数组分为两个部分&#xff0c;一个部分是arr[mid-1]<arr[mid]&#xff0c;另一个部分为arr[mid-1]>arr[mid]&#xff0c;此时不难发现我们可以将二分…

Flink,spark对比

三&#xff1a;az 如何调度Spark、Flink&#xff0c;MR 任务 首先&#xff0c;使用java编写一个spark任务&#xff0c;定义一个类&#xff0c;它有main方法&#xff0c;里面写好逻辑&#xff0c;sparkConf 和JavaSparkContext 获取上下文&#xff0c;然后打成一个jar包&#xf…

数据结构——二叉树相关题目

1.寻找二叉树中数值为x的节点 //寻找二叉树中数值为x的节点 BTNode* TreeFind(BTNode* root, BTDataType x)//传过来二叉树的地址和根的地址&#xff0c;以及需要查找的数据 {if (root Null){return Null;}//首先需要先判断这个树是否为空&#xff0c;如果为空直接返回空if (…

【JavaWeb程序设计】JSP实现购物车功能

目录 一、结合之前所学的相关技术&#xff0c;编写代码实现以下购物车功能 1. 我实现的功能运行截图如下 &#xff08;1&#xff09;商品列表页面home.jsp &#xff08;2&#xff09;登录账号页面/未登录点击结账页面 &#xff08;3&#xff09;重新登录页面&#xff08;记…

昇思25天学习打卡营第18天|ShuffleNet图像分类

一、简介&#xff1a; ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一样主要应用在移动端&#xff0c;所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作&#xff1a;Poin…

如何在centos7安装Docker

在centOS7中我们可以使用火山引擎镜像源镜像安装Docker,以下是具体的安装步骤。 step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils Step 2: 添加软件源信息 sudo yum-config-manager --add-repo https://mirrors.ivolces.com/docker/linux/centos/docker-ce.r…

力扣双指针算法题目:二叉树的层序遍历(BFS)

目录 1.题目 2.思路解析 3.代码 1.题目 . - 力扣&#xff08;LeetCode&#xff09; 2.思路解析 对二叉树进行层序遍历&#xff0c;顾名思义&#xff0c;就是按每一层的顺序对二叉树一层一层地进行遍历 思路如下 从第一层开始&#xff0c;先将二叉树地头放入队列q&#xff0…

2007-2022年中国各企业数字化转型与供应链效率

企业数字化转型与供应链效率是现代企业管理和发展的两个关键方面。以下是对中国各企业数字化转型与供应链效率数据的介绍&#xff1a; 数据简介 企业数字化转型&#xff1a;指企业通过采用数字技术与创新方法&#xff0c;改造业务流程、组织结构和产品服务&#xff0c;以提升…

UCOS-III 系统移植

1. 移植前准备 1.1 源码下载 UCOS-III Kernel Source&#xff1a; https://github.com/weston-embedded/uC-OS3.git Micriμm CPU Source &#xff1a; https://github.com/weston-embedded/uC-CPU.git Micriμm Lib Source&#xff1a; https://github.com/weston-embedded…