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

news2024/11/27 12:35:29

摘要

本文使用重参数的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 GFLOPs
                 Class     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.747
                   c17         40        131       0.99      0.992      0.995      0.833
                    c5         19         68      0.966          1      0.994      0.825
            helicopter         13         43      0.975      0.909      0.977       0.61
                  c130         20         85          1      0.999      0.995      0.654
                   f16         11         57      0.982       0.95      0.992      0.698
                    b2          2          2      0.887          1      0.995      0.822
                 other         13         86       0.98      0.965      0.972      0.516
                   b52         21         70      0.975      0.971      0.986      0.826
                  kc10         12         62          1      0.973      0.989      0.847
               command         12         40      0.993          1      0.995      0.826
                   f15         21        123      0.961          1      0.994      0.697
                 kc135         24         91      0.988      0.989       0.99      0.707
                   a10          4         27          1      0.476      0.936       0.45
                    b1          5         20      0.985          1      0.995      0.768
                   aew          4         25      0.951          1      0.995      0.785
                   f22          3         17      0.949          1      0.995       0.75
                    p3          6        105          1      0.973      0.995      0.813
                    p8          1          1      0.892          1      0.995      0.697
                   f35          5         32      0.966      0.969      0.987      0.547
                   f18         13        125      0.992      0.989      0.991      0.834
                   v22          5         41      0.986          1      0.995      0.737
                 su-27          5         31       0.98          1      0.995      0.861
                 il-38         10         27      0.991          1      0.995      0.834
                tu-134          1          1      0.847          1      0.995      0.895
                 su-33          1          2          1      0.774      0.995      0.796
                 an-70          1          2      0.889          1      0.995      0.725
                 tu-22          8         98      0.997          1      0.995      0.823

总结

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

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

相关文章

学IT上培训班真的有用吗?

在学习IT技术的过程中&#xff0c;你是否也被安利过各种五花八门的技术培训班&#xff1f;这些培训班都是怎样向你宣传的&#xff0c;你又对此抱有着怎样的态度呢&#xff1f;在培训班里学技术&#xff0c;真的有用吗&#xff1f; 一、引入话题 IT行业是一个快速发展和不断变化…

【数据结构】09.树与二叉树

一、树的概念与结构 1.1 树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 根结点&#xff1a;根…

java 公共字段填充

公共字段填充 1、mybatis-plus2、mybatis 使用注解加aop2.1 自定义注解2.2 自定义切面类2.3 在mapper上添加上自定义的注解 1、mybatis-plus 通过在类上使用如下的注解 TableField(fill FieldFill.INSERT) 是 MyBatis-Plus 中的注解&#xff0c;用于自动填充字段的值。MyBat…

【Python实战因果推断】25_倾向分5

目录 Stabilized Propensity Weights Pseudo-Populations Stabilized Propensity Weights 将经过处理的样本按 加权&#xff0c;就会产生一个与原始样本大小相同的伪群体&#xff0c;但就好像每个人都经过了处理。这意味着权重之和与原始样本大小大致相同。同样&#xff0c…

可视化作品集(08):能源电力领域

能源电力领域的可视化大屏&#xff0c;有着巨大的用武之地&#xff0c;不要小看它。 监控能源生产和消耗情况&#xff1a; 通过可视化大屏&#xff0c;可以实时监控能源生产和消耗情况&#xff0c;包括发电量、能源供应情况、能源消耗情况等&#xff0c;帮助管理者及时了解能…

llama2阅读: logits是什么?

Logits是一个在深度学习中&#xff0c;几乎一直都有的概念&#xff0c;它意味着模型unnormalized final scores. 然后你可以通过softmax得到模型针对你class的概率分布。 而在llama2的代码中&#xff0c;同样有logits的使用&#xff0c;那么针对llama2&#xff0c;logits的作用…

力扣考研经典题 反转链表

核心思想 头插法&#xff1a; 不断的将cur指针所指向的节点放到头节点之前&#xff0c;然后头节点指向cur节点&#xff0c;因为最后返回的是head.next 。 解题思路 1.如果头节点是空的&#xff0c;或者是只有一个节点&#xff0c;只需要返回head节点即可。 if (head null …

触底加载的两种思路(以vue3前端和nodejs后端为例)

一:首先,nodejs后端的代码都是一样的. 需要前端返回page参数,然后nodejs逻辑进行处理,截取页数和每页条数和总条数, 总条数用来作为判断是否有数据的条件,也可以不用,注意看下文 一:不用获取容器高度的. pinia中进行的axios请求处理 在vue文件中进行pinia中数据的导入,继续进…

初学Spring之 AOP 面向切面编程

AOP&#xff08;Aspect Oriented Programming&#xff09;面向切面编程 通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术 是面向对象&#xff08;OOP&#xff09;的延续 AOP 在 Spring 中的作用&#xff1a; 1.提供声明式事务 2.允许用户自定义切面 导…

ISO 50001:企业节能减排与可持续发展的双赢之道

在全球气候变化日益严峻、资源日益稀缺的今天&#xff0c;能源管理已成为企业可持续发展不可或缺的一部分。ISO 50001作为国际能源管理体系标准&#xff0c;正在全球范围内被越来越多的企业采纳。它不仅帮助企业提高能源效率&#xff0c;减少能源消耗&#xff0c;还在多个方面对…

Java的基础语法

叠甲&#xff1a;以下文章主要是依靠我的实际编码学习中总结出来的经验之谈&#xff0c;求逻辑自洽&#xff0c;不能百分百保证正确&#xff0c;有错误、未定义、不合适的内容请尽情指出&#xff01; 文章目录 1.第一份程序1.1.代码编写1.2.代码运行1.2.1.命令行编译1.2.2.IEDA…

存储结构与管理磁盘

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 目录 一、一切从“/”开始 二、物理设备的命名规则 三、文件系统与数据资料 四、挂载硬件设备 五、添加硬盘设备 六、添加交换分区 七、磁盘容…

Linux系统的介绍和常用命令

文章目录 介绍常用命令文件和目录操作文件内容操作系统管理命令网络命令 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xff1a;Liunx系统 ✨文章内容&#xff1a;Liunx系统介绍 &…

C语言 | Leetcode C语言题解之第217题存在重复元素

题目&#xff1a; 题解&#xff1a; struct hashTable {int key;UT_hash_handle hh; };bool containsDuplicate(int* nums, int numsSize) {struct hashTable* set NULL;for (int i 0; i < numsSize; i) {struct hashTable* tmp;HASH_FIND_INT(set, nums i, tmp);if (tm…

css导航栏遮挡住垂直滚动条,以及100vw引起的横向滚动条出现

滚动条被导航栏遮住问题 解决前 解决过程 一开始想要body的宽度为整个视口的宽度 100vw view width 不过出现了横向滚动条 于是乎想着给所有元素增加 x轴溢出时隐藏 问题解决&#xff0c;不过顶部的导航栏由于设置了fixed 又把右边导航栏挡住了 可能因为 body 占100视口宽度…

简单且循序渐进地查找软件中Bug的实用方法

“Bug”这个词常常让许多开发者感到头疼。即使是经验丰富、技术娴熟的开发人员在开发过程中也难以避免遭遇到 Bug。 软件中的故障会让程序员感到挫败。我相信在你的软件开发生涯中&#xff0c;也曾遇到过一些难以排查的问题。软件中的错误可能会导致项目无法按时交付。因此&…

【python】python当当数据分析可视化聚类支持向量机预测(源码+数据集+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

【C++】map和set详解

目录 1. 关联式容器 2. 键值对pair 3. 树形结构的关联式容器 4. set 4.1 set的介绍 4.2 set的构造 4.3 set的迭代器 4.4 set的容量 4.5 set的常用函数 5. multiset 6. map 6.1 map的介绍 6.2 map的构造 6.3 map的迭代器 6.4 map的容量 6.5 map的operator[] 6.6…

【学习笔记】程序设计竞赛

程序设计竞赛 文章目录 程序设计竞赛0x00 基本操作指南0x01 算法分析0x02 STL和基本数据结构栈队列集合map 0x03 排序插入排序归并排序&#xff08;Merge Sort)快速排序 0x04 搜索技术BFSDFS回溯与剪枝 深度迭代ID A*A star双向广搜 0x05 递推方程0x06 高级数据结构并查集二叉树…

STM32快速复习(八)SPI通信

文章目录 前言一、SPI是什么&#xff1f;SPI的硬件电路&#xff1f;SPI发送的时序&#xff1f;二、库函数二、库函数示例代码总结 前言 SPI和IIC通信算是我在大学和面试中用的最多&#xff0c;问的最多的通信协议 IIC问到了&#xff0c;一般SPI也一定会问到。 SPI相对于IIC多了…