YoloV10改进策略:下采样与上采样改进|下采样模块和DUpsampling上采样模块|即插即用

摘要

在深度学习与计算机视觉领域,YoloV10作为实时目标检测算法的代表,以其卓越的性能和效率赢得了广泛认可。然而,为了不断追求更高的精度与更快的推理速度,我们在YoloV10的基础上进行了创新性改进,重点引入了先进的下采样模块和DUpsampling上采样模块。这些改进不仅显著提升了YoloV10的性能,还为其在复杂场景下的应用提供了更强大的支持。

下采样模块的革新

该模块结合了卷积层和最大池化层来生成具有较低维度的扩展特征图,同时考虑了计算成本的优化。以下是该下采样模块的详细总结:

  1. 卷积层和最大池化层

    • 卷积层:使用 3 × 3 3 \times 3 3×3的卷积核进行特征提取,其输出通道数量( C conv C_{\text{conv}} Cconv)根据 C out C_{\text{out}} Cout C in C_{\text{in}} Cin的关系动态确定。具体来说,当 C out > C in C_{\text{out}} > C_{\text{in}} Cout>Cin时,卷积层需要生成额外的特征图以补充最大池化层未提供的部分,此时 C conv = C out − C in C_{\text{conv}} = C_{\text{out}} - C_{\text{in}} Cconv=CoutCin
    • 最大池化层:使用 2 × 2 2 \times 2 2×2的池化窗口和步长为2进行下采样,以减少特征图的尺寸和计算量。当需要时,其输出通道数量与输入通道数量相同( C maxp = C in C_{\text{maxp}} = C_{\text{in}} Cmaxp=Cin)。
  2. 特征图拼接:卷积层和最大池化层的输出特征图在通道维度上进行拼接,以融合两者的特征信息。这种拼接方式使得模型能够同时利用卷积层的精细特征和最大池化层的全局特征。

  3. 批量归一化和激活函数:拼接后的特征图通过批量归一化(Batch Normalization)进行规范化处理,有助于加速训练过程并提高模型稳定性。随后,使用ReLU(Rectified Linear Unit)激活函数引入非线性,增强模型的表达能力。

在这里插入图片描述

DUpsampling上采样模块的引入

在目标检测任务中,上采样操作对于恢复目标的空间位置信息和提高检测精度至关重要。传统方法如双线性插值虽然简单高效,但往往难以达到最优的分割效果。为了克服这一局限,我们采用了DUpsampling模块来替代YoloV10中的上采样操作。DUpsampling通过一系列精心设计的 1 × 1 1\times1 1×1卷积和特征重塑操作,实现了对特征图的高效上采样。该方法不仅保持了数据的相关性,还能够在上采样过程中引入非线性变换,进一步提升分割精度。特别是在处理小目标和复杂场景时,DUpsampling模块的引入使得YoloV10的检测性能得到了显著提升。

在这里插入图片描述

优点总结

  1. 精度提升:下采样模块和DUpsampling上采样模块的引入,使得YoloV10在特征提取和分割精度上实现了质的飞跃。无论是在复杂背景下的目标检测,还是在小目标的识别上,都展现出了更加卓越的性能。

  2. 效率优化:尽管引入了更复杂的操作,但通过优化网络结构和算法设计,我们成功保持了YoloV10的高效推理速度。这使得改进后的模型在实际应用中更具竞争力。

  3. 灵活性与可扩展性:下采样模块和DUpsampling上采样模块作为独立的模块,可以方便地与其他网络架构进行集成和扩展。这为YoloV10的后续研究和应用提供了更多的可能性。

综上所述,通过对YoloV10的下采样和上采样模块进行创新性改进,我们成功打造了一个既高效又精准的实时目标检测模型。这一改进不仅为YoloV10的性能提升提供了新的思路和方法,也为深度学习在计算机视觉领域的应用注入了新的活力。我们期待这一改进能够在实际应用中发挥更大的作用,为智能安防、自动驾驶等领域的发展贡献更多力量。

论文翻译:《FastICENet:一种用于航空遥感河流冰图像的实时精确语义分割模型》

河流冰语义分割是一项关键任务,它可以为我们提供河流监测、灾害预测和交通管理所需的信息。以往的工作主要集中在提高准确性上,但对于实际应用而言,效率也同样重要。在本文中,我们提出了一种实时且准确的河流冰语义分割网络,命名为FastICENet。该网络架构主要由两个分支组成,即一个浅层高分辨率空间分支和一个深层上下文语义分支,这两个分支都是为了应对遥感图像中河流冰的尺度多样性和不规则形状而精心设计的。然后,在上下文分支中采用了基于轻量级Ghost模块的新型下采样模块和密集连接块,以降低计算成本。此外,还采用了一种可学习的上采样策略DUpsampling来替代常用的双线性插值,以提高分割精度。我们在三个公开可用的数据集(NWPU_YRCC_EX、NWPU_YRCC2和Alberta River Ice Segmentation Dataset)上进行了详细的实验。实验结果表明,我们的方法在与竞争方法相比时达到了最先进的性能。在NWPU_YRCC_EX数据集上,我们的分割速度可以达到90.84FPS,分割精度可以达到 90.770 % 90.770\% 90.770%的mIoU,这也说明了我们的方法在准确性和速度之间取得了良好的平衡。我们的代码可在https://github.com/nwpulab113/FastICENet上获得。

1、引言

图像语义分割在计算机视觉中仍然是一项具有挑战性的常规任务,广泛应用于地理信息系统[1,2]、自动驾驶、医学图像分析、视频监控、灾害预测[3]等领域。在河流冰语义分割领域,准确的分割结果可以为河流监测[4,5]、灾害预测[6]和交通管理提供关键信息,尤其是对于纬度跨度较大的河流而言。同时,分割模型往往需要部署到一些计算资源有限的水文站。因此,在实际应用中,需要构建既高效又准确的模型。

对于河流冰来说,获得可靠的分割结果十分困难。在大多数情况下,图像中的浮冰大小不一,形状不规则,这就要求网络具备提取多尺度特征的能力。随着深度学习方法的快速发展,许多基于深度卷积神经网络的优秀语义分割算法被提出。其中大多数会采用ResNet[7]、DeepLab[8]、Transformer[9]等骨干网络来提取有意义的特征。尽管这些复杂的网络提高了准确性,但它们的分割速度非常慢。通常,一些高精度网络模型的容量非常大,这使得它们难以在生产设备上部署。这促使我们为我们的任务设计一个更灵活的网络。

然而,追求时间效率模型并不容易实现。大多数实时深度神经网络选择轻量级骨干网络并减少特征通道数[10]等方法。然而,这些方法会降低网络捕捉细节信息的能力,从而进一步损害准确性。
我们需要构建一个既准确又快速的河流冰语义分割网络,以满足轻量级设备快速处理数据的需求。河流冰的实时和准确语义分割面临两个主要问题:(1)一些语义分割网络的分割精度非常高,但由于其模型结构非常复杂,而一些轻量级终端往往不具备实验室服务器的计算能力,导致分割速度慢,难以及时处理传感器传输的图像;(2)虽然一些轻量级网络可以满足实时要求,但其简单的网络结构导致分割精度低,难以实际应用。

为此,我们提出了一个双分支分割网络,即FastICENet,以提高准确性和效率。该网络受到[11]的启发,由一个空间分支和一个上下文分支组成。空间分支是一系列卷积和非线性映射层的堆叠,用于获取局部区域的细节。上下文分支旨在提供深层的语义信息,以便区分不同类型的对象。这达到了一个更复杂的分支,但也更耗时。因此,为了加快分割速度,我们采用了下采样和Ghost模块策略来降低上下文分支的分析成本。此外,由于河流冰图像中存在许多小冰块,我们采用了一种可学习的上采样策略DUpsampling来替代常用的双线性插值,以提高分割精度,特别是对于小冰块。
在这里插入图片描述

本文主要贡献总结如下:

  1. 我们采用双分支结构,并利用可学习的上采样策略DUpsampling替代常用的双线性插值,构建了一个名为FastICENet Accuracy Version(FastICENet(acc))的网络,以解决河流冰图像中尺度多样性和处理大量小冰块的问题。与最先进的方法相比,FastICENet(acc)表现出色,在NWPU_YRCC_EX数据集上达到了91.86%的mIoU,如图1所示,这是目前最高的分割精度。

  2. 我们开发了一个时间和精度平衡的模型FastICENet,该模型在上下文分支中采用了新的下采样模块和基于轻量级Ghost模块的密集连接块。这种设计改进在保持高分割精度的同时,显著提高了速度。

  3. 我们扩展并重标记了两个河流冰数据集,即NWPU_YRCC_EX和NWPU_YRCC2,现在这两个数据集都已公开可用。与Alberta River Ice Segmentation Dataset [12]一起,我们在三个公共数据集上进行了实验。与最近的实时语义分割方法相比,FastICENet在精度和速度之间达到了最先进的权衡,如图1所示。

本文的其余部分组织如下:第2节总结了实时语义分割和冰分割的相关工作。第3节描述了所提出的方法。第4节介绍了实验配置并分析了结果。最后,第5节给出了结论。

2、相关工作

2.1、实时语义分割

考虑到语义分割需要预测像素级别的标签,而一张遥感图像可能包含数百万个像素,因此这是一项耗时的任务。为解决这一问题,已进行了各种努力。一些研究人员通过裁剪或调整输入图像的大小来降低计算复杂度,如SNet [13]和ICNet [14]。一些方法通过减少网络通道数来提高推理速度,如SegNet [15]和ENet [16]。其他方法大多采用轻量级分类网络作为骨干网络,并精心设计网络以提高分割速度并弥补精度下降。例如,EDANet [17]提出了一种使用非对称卷积的高效密集模块的新网络架构。FastSCNN [18]在深度卷积神经网络中采用了跳跃连接,并提出了一个浅层学习模块来进行下采样,以实现快速有效的多分支低级特征提取。STDC [19]通过去除结构冗余,提出了一种新颖且高效的结构,即短期密集拼接网络(ShortTerm Dense Concatenate network)。PIDNet [20]受PID控制器启发,提出了一种实时语义分割网络。

2.2、冰分割

由于深度学习的优异表现,许多领域和应用都取得了快速发展和巨大进步。智能河流冰监测就是其中之一。Wang等人[21]使用基本的深度卷积神经网络,利用融化期间收集的双极化SAR场景来估算冰浓度。Singh等人[22]采用了一些基于卷积神经网络(CNN)的语义分割模型(如UNet[23]、SegNet[15]、DeepLab[24]和DenseNet[25])来将河流冰图像分割为水以及两种不同类型的冰(漂流冰和锚定冰)。ICENet[26]是一种用于河流冰分割的语义分割深度卷积神经网络,它使用位置和通道注意特征的融合。ICENetv2[27]根据河流冰的特性设计了一个多尺度特征融合框架,用于细粒度的河流冰分割。这些模型不断提高了性能,但它们很少关注速度,无法满足实时要求。在本文中,我们提出了一种实时且准确的河流冰语义分割网络,名为FastICENet。

河流冰的外观在尺度、颜色、纹理和形状上差异很大。特别是,河流冰的大小在图像中从几个像素到数千个像素不等。ICENet[26]和ICENetv2[27]表明,具有更精细的空间分支和深层上下文语义分支的双分支网络结构(如BiSeNet[11])非常适合分割具有尺度多样性特征的河流冰。

3、方法

3.1、总体架构

所提出的FastICENet的架构如图2所示。它由两个分支组成:空间分支和上下文分支,分别提取低层次的更精细的信息和深层的语义信息。
在这里插入图片描述

空间分支简单地由三个级联卷积模块组成,如图2所示。每个卷积层将特征图的大小下采样为前一层的一半,以获得低层次的更精细的信息。而上下文分支则通过缩放和细化操作进行了更精心的设计。然后,通过特征融合模块FFM将两个分支的输出特征进行融合。由于两个分支的特征图不相同,因此不能简单地将这两个部分的特征图相加。FFM的方法是将两个部分特征图进行拼接,然后使用卷积计算加权特征,将加权特征与原始特征图相乘以计算通道注意力,最后与原始特征图进行残差连接。最后,通过DUpsampling模块对上采样融合后的特征图,以生成最终的预测结果。

为了减少上下文分支的时间消耗,我们采用了基于轻量级Ghost模块的Downsampling模块和密集连接块。具体来说,上下文分支包含三个连续的Downsampling模块和一个包含五个Ghost模块的密集连接块(命名为Dense Block 1),之后是一个Downsampling模块和一个包含八个Ghost模块的密集连接块(命名为Dense Block 2)。然后,Dense Block 2的输出被并行地发送到注意力细化模块ARM和一个全局平均池化(GAP)层。经过ARM和平均池化后,它们的输出特征图被拼接起来,通过DUpsampling进行上采样,并由一个卷积模块重新计算。最后,得到的特征图和经过ARM细化的Dense Block 1的输出被拼接起来,通过另一个卷积模块重新计算,以产生上下文分支的最终输出。ARM模块使用全局池化和 1 × 1 1 \times 1 1×1卷积来计算输入特征图的权重,然后将其与输入特征图相乘以计算通道注意力。

以下三个小节将分别详细介绍新颖的Downsampling模块、基于轻量级Ghost模块的密集连接块以及DUpsampling模块的细节。

3.2、时间加速策略

3.2.1、下采样模块

受ENet [16]中初始块的启发,我们在上下文分支中使用下采样模块来获取特征。我们将部分卷积替换为最大池化,这可以减少计算成本。该模块如图3所示。
在这里插入图片描述

我们将输入和输出通道的数量分别表示为 C in  C_{\text {in }} Cin  C out  C_{\text {out }} Cout ,卷积层和最大池化层的输出通道数量分别表示为 C conv  C_{\text {conv }} Cconv  C maxp  C_{\text {maxp }} Cmaxp 。我们有
C out  = C conv  + C maxp ,   其中  C maxp = { 0 , C in  } .  \begin{array}{l} C_{\text {out }}=C_{\text {conv }}+C_{\text {maxp}} \text {, } \\ \text { 其中 } C_{\text {maxp}}=\left\{0, C_{\text {in }}\right\} \text {. } \end{array} Cout =Cconv +Cmaxp 其中 Cmaxp={0,Cin }
下采样模块作为特征图生成器,生成具有较低维度的扩展特征。由于我们采用来自最大池化的 C max ⁡ C_{\max } Cmax特征图,因此计算成本低于传统的卷积方式。当 C out  > C in  C_{\text {out }}>C_{\text {in }} Cout >Cin 时, C conv  = C out  − C in  C_{\text {conv }}=C_{\text {out }}-C_{\text {in }} Cconv =Cout Cin  C maxp = C in  C_{\text {maxp}}=C_{\text {in }} Cmaxp=Cin ;当 C out  ≤ C in  C_{\text {out }} \leq C_{\text {in }} Cout Cin 时,所有特征图均通过卷积生成。

然后,将这两层的输出进行拼接,并通过批量归一化和ReLU函数依次激活。在本文中,我们将卷积核设置为 3 × 3 3 \times 3 3×3,最大池化层设置为 2 × 2 2 \times 2 2×2,且步长均为2。

3.2.2、基于Ghost模块的密集块

a. 密集连接

DenseNet [25] 提出了密集连接的概念,通过跨通道连接特征来实现特征重用。EDANet [17] 也采用了密集连接的策略,但不同之处在于EDANet采用非对称卷积来实现模块之间的密集连接。每个模块将输入特征与新学习的特征连接起来形成最终输出。由于每个模块仅负责获得相对较少的新特征图,因此可以大大降低计算成本并提高预测速度。

因此,在本文中,我们提出了密集块,它继承了与EDANet相同的密集连接方法。但我们没有使用非对称卷积,而是采用了一个更轻量级的模块,即Ghost模块。

b. Ghost模块

给定输入数据 X ∈ R h × w × c X \in R^{h \times w \times c} XRh×w×c,其中 c c c 是输入通道数, h h h w w w 分别是输入数据的高度和宽度。卷积层生成 n n n 个特征图的操作可以表示为

Y = X ∗ f + b Y=X * f+b Y=Xf+b

其中 ∗ * 是卷积操作, b b b 是偏置项, Y ∈ R h ′ × w ′ × n Y \in R^{h^{\prime} \times w^{\prime} \times n} YRh×w×n 是大小为 h ′ h^{\prime} h w ′ w^{\prime} w、具有 n n n 个通道的输出特征图,而 f ∈ R c × k × k × n f \in R^{c \times k \times k \times n} fRc×k×k×n 是大小为 k × k k \times k k×k 的卷积滤波器。在此卷积过程中,由于卷积核的数量 n n n 和通道数 c c c 通常非常大,因此所需的浮点运算次数多达 n ⋅ h ′ ⋅ w ′ ⋅ c ⋅ k ⋅ k n \cdot h^{\prime} \cdot w^{\prime} \cdot c \cdot k \cdot k nhwckk。这正是耗时之处。

减少卷积通道的数量对于我们的实时性要求很有前景。卷积层的输出特征图通常包含大量冗余,这不符合我们的轻量化要求。GhostNet [28] 使用普通卷积滤波器生成较少的特征图 Y ′ ∈ R h ′ × w ′ × m Y^{\prime} \in R^{h^{\prime} \times w^{\prime} \times m} YRh×w×m。为了进一步获得所需的 n n n 个特征图,GhostNet 对 Y ′ Y^{\prime} Y 中的每个原始特征图应用一系列廉价的线性操作来生成幽灵特征图 Y Ghost  Y^{\text {Ghost }} YGhost ,根据:

y i j Ghost  = Φ i , j ( y i ′ ) , ∀ i = 1 , ⋯   , m , j = 1 , ⋯   , s y_{i j}^{\text {Ghost }}=\Phi_{i, j}\left(y_{i}^{\prime}\right), \forall i=1, \cdots, m, j=1, \cdots, s yijGhost =Φi,j(yi),i=1,,m,j=1,,s

其中 y i ′ y_{i}^{\prime} yi Y ′ Y^{\prime} Y 中的第 i i i 个原始特征图,而 Φ i , j \Phi_{i, j} Φi,j 是对 y i ′ y_{i}^{\prime} yi 进行的第 j j j 个线性操作,用于生成 y i ′ y_{i}^{\prime} yi 的第 j j j 个幽灵特征图 y i j Ghost  y_{i j}^{\text {Ghost }} yijGhost 。最后,将原始特征图 Y ′ Y^{\prime} Y 和通过式(3)生成的幽灵特征图 Y Ghost  Y^{\text {Ghost }} YGhost  进行拼接,以产生最终结果 Y ′ ′ Y^{\prime \prime} Y′′

3.2.3、 DUpsampling模块

在这里插入图片描述

双线性插值是解码器中常用于上采样特征图的方法。然而,这种方法非常简单且与数据无关,可能导致次优结果。为了实现更好的分割效果,我们采用DUpsampling [29] 代替双线性插值进行上采样。DUpsampling的流程图如图4所示。给定大小为 H × W × C H \times W \times C H×W×C 的特征图,在其上应用 N N N 1 × 1 1 \times 1 1×1 卷积滤波器以生成新的编码特征图,其大小为 H × W × N H \times W \times N H×W×N。然后将编码特征图重塑为 2 H × 2 W × N / 4 2 H \times 2 W \times N / 4 2H×2W×N/4 的大小,这是DUpsampling模块的输出特征图。通常,DUpsampling 可以沿空间维度将特征图上采样到任意倍数。在本文中,上下文分支中的特征图和融合后的特征图分别沿空间维度放大了2倍和8倍。

4、实验

在本节中,我们首先介绍两个新的公开数据集,即NWPU_YRCC_EX和NWPU_YRCC2。然后,我们简要描述了阿尔伯塔河冰分割数据集。此外,我们在这三个数据集上对FastICENet和对比方法进行了实验。我们的主要评价指标选择了mloU和FPS。最后,我们在NWPU_YRCC_EX上进行了消融实验,以验证我们提出模型的有效性。

4.1、数据集描述

4.1.1、NWPU_YRCC_EX

NWPU_YRCC_EX是NWPU_YRCC[26]的扩展。NWPU_YRCC数据集由814张图像组成,这些图像是从2015年11月至2019年3月期间在黄河宁夏至内蒙古段使用无人机拍摄的视频中选取的。NWPU_YRCC的图像被逐像素标记为三类:冰、水和岸,如图5(a)所示。图像的大小为 1600 × 640 1600 \times 640 1600×640。考虑到数据分布的平衡性,我们进一步从原始视频和图像中选取了73张图像作为NWPU_YRCC的补充。总共有887张精细标记的图像。我们将此数据集命名为NWPU_YRCC_EX,并将其分为524张训练图像、180张验证图像和183张测试图像。NWPU_YRCC_EX可以在https://github.com/nwpulab113/NWPUYRCCEX上下载。
在这里插入图片描述

4.1.2、NWPU_YRCC2

NWPU_YRCC2[27]数据集由1525张图像组成,这些图像是从2015年11月至2019年3月期间在黄河宁夏至内蒙古段使用无人机拍摄的视频中选取的。图像的大小为 1600 × 640 1600 \times 640 1600×640。NWPU_YRCC2与NWPU_YRCC_EX的区别在于,我们根据实际需要将冰分为岸冰和漂流冰。样本图像和四类标签如图5(b)所示。我们按照 3 : 1 : 1 3:1:1 3:1:1的比例将数据分为训练集、验证集和测试集。NWPU_YRCC2可以在[此处应提供下载链接,但原文未给出]上下载。

4.1.3、阿尔伯塔河冰分割数据集

阿尔伯塔河冰分割数据集[12]是在2016年和2017年冬季,通过无人机和安装在桥梁上的游戏相机从阿尔伯塔省的两条河流中捕获的。阿尔伯塔河冰分割数据集的图像被标记为三类:漂流冰、锚定冰和水,如图6所示。大多数图像的大小为 1281 × 1081 1281 \times 1081 1281×1081。由于逐像素标记非常耗时,因此只有50张标记过的图像。我们随机裁剪这些图片为 800 × 320 800 \times 320 800×320大小。最终,我们获得了198张带有完全标注标签的RGB样本图像。
在这里插入图片描述

4.2、训练与优化

所提出的网络由PyTorch实现,并在配备Intel Core CPU i5-7500(3.40 GHz)和NVIDIA GTX 1080 Ti的工作站上运行。我们在训练过程中采用了random_crop和random_mirror等数据增强方法。初始训练率设置为 5 e − 4 5 \mathrm{e}-4 5e4,批量大小为16,每个模型训练1000个周期。损失函数为交叉熵损失(CrossEntropy Loss),计算方式如下:

L = − 1 N ∑ i ∑ c = 1 M y i c log ⁡ ( p i c ) L=-\frac{1}{N} \sum_{i} \sum_{c=1}^{M} y_{i c} \log \left(p_{i c}\right) L=N1ic=1Myiclog(pic)

其中, N N N表示像素的数量, i i i表示像素的索引, M M M表示类别的数量, c c c表示类别的索引, y i c y_{i c} yic是像素 i i i的标签,当像素 i i i的类别为 c c c时, y i c y_{i c} yic为1,否则为0。 p i c p_{i c} pic表示像素 i i i属于类别 c c c的预测概率。在训练过程中,我们使用Adam优化器来优化模型。

4.3、评价标准

mloU和FPS是实时语义分割中常用的两个评价标准。mloU是平均交并比(mean intersection over union)的缩写,代表分割的准确性。FPS是每秒帧数(frame per second)的缩写,代表分割的速度。在本文中,mloU和FPS作为评估所提网络及其他对比方法性能的主要标准。此外,我们还记录了这些网络的参数数量(以千字节为单位)。

4.4、结果与评估

为了验证FastICENet的有效性和优越性,我们将其与最新的快速语义分割网络在NWPU_YRCC_EX、NWPU_YRCC2和阿尔伯塔河冰分割数据集上进行了比较。在同一台机器和相同条件下测量了它们的性能。我们以BiSeNet[11]作为基线。FastICENet(acc)源自BiSeNet,其中双线性插值上采样被DUpsampling替换。比较结果如表1、表2和表3所示,前三名结果分别用红色、绿色和蓝色标记。
在这里插入图片描述
在这里插入图片描述

4.4.1、NWPU_YRCC_EX

我们可以看到,我们的方法FastICENet(acc)达到了最高的分割精度(即 91.860 % m l o U 91.860\% \mathrm{mloU} 91.860%mloU),但其速度较慢。FastICENet以94.840 FPS的速度表现更佳,接近最快的分割网络,如ContextNet[30]和FastSCNN[18]。其精度达到 90.770 % m I o U 90.770\% \mathrm{mIoU} 90.770%mIoU,比这两个网络高出约 3 % 3\% 3%。此外,FastICENet在精度上与CGNet[31]、LinkNet[32]和PIDNet-S[20]相近,但我们的分割速度远超这些网络。同时,我们观察到模型分割的速度与参数数量并非负相关。我们分析认为,尽管一些模型参数较少,但这些参数的操作更为复杂,也会导致分割速度的损失。在后续研究中,我们可以考虑在保持当前分割精度的同时,进一步加快分割速度。
在这里插入图片描述

我们在NWPU_YRCC_EX数据集上对三个最快的网络FastSCNN、ContextNet和FastICENet的分割结果进行了可视化。我们选择这三个网络的原因是它们在分割速度上相近且远超其他网络。可视化结果如图7所示。每行中的第一张图片代表原始图像,中间三张图片分别代表FastSCNN、ContextNet和FastICENet的分割结果,最后一张图片代表真实标签。可以看出,在三个分割速度最快的网络中,我们的方法精度优于其他两个网络。在图7中,最明显的部分已经用黑色方框标出。

4.4.2、NWPU_YRCC2

由于需要将冰分为岸冰和漂流冰,我们还在NWPU_YRCC2数据集上进行了实验。结果如表2所示。该数据集需要区分两种不同的冰,这导致所有网络的精度都有所下降,但可以看出,我们的FastICENet(acc)仍然达到了第二高的精度(即 81.871 % m l o U 81.871\% \mathrm{mloU} 81.871%mloU),但其分割速度远快于ICENetv2[27]。ContextNet[30]和FastSCNN[18]的速度最快,但它们的精度较低。我们的FastICENet在速度和精度之间取得了平衡,其速度(即108.78 FPS)与最快的方法相近,同时达到了 80.790 % m l o U 80.790\% \mathrm{mloU} 80.790%mloU的精度。根据NWPU_YRCC2的具体任务,我们的模型FastICENet(acc)能够准确地区分岸冰和漂流冰,在漂流冰类别中具有最高的交并比(IoU),在岸冰类别中也排名靠前。同时,我们的模型FastICENet也能准确地区分漂流冰和岸冰,并大大提高了分割速度。
在NWPU_YRCC2数据集上,我们同样对三个最快的网络FastSCNN、ContextNet和FastICENet的分割结果进行了可视化。可视化结果如图8所示。每行中的第一张图片代表原始图像,中间三张图片分别代表FastSCNN、ContextNet和FastICENet的分割结果,最后一张图片代表真实标签。可以看出,在三个分割速度最快的网络中,我们的方法能够更好地识别漂流冰和岸冰。在图8中,最明显的部分已经用黑色方框标出。
在这里插入图片描述

4.4.3、阿尔伯塔河冰分割数据集

我们在阿尔伯塔河冰分割数据集上与最新的快速语义分割网络进行了比较。在该数据集的图像中,由于水与其他两种冰的光谱特性差异较大,水的交并比(IoU)较高。然而,由于漂流冰和锚定冰之间的差异较小,所有网络在这两种冰上的IoU都较低。比较结果如表3所示。可以看出,ContextNet[30]和FastSCNN[18]的速度最快。但是,由于数据量较少且两种冰的光谱相似,ContextNet[30]和FastSCNN[18]的精度非常低。然而,我们的FastICENet(acc)仍然达到了最高的精度(即 82.34 % m l o U 82.34\% \mathrm{mloU} 82.34%mloU),而FastICENet在将速度大幅提升至159.82 FPS的同时,仍然保持了较高的精度(即 81.77 % m l o U 81.77\% \mathrm{mloU} 81.77%mloU)。

在阿尔伯塔河冰分割数据集上,我们对三个最快的网络FastSCNN、ContextNet和FastICENet的分割结果进行了可视化。可视化结果如图9所示。每行中的第一张图片代表原始图像,中间三张图片分别代表FastSCNN、ContextNet和FastICENet的分割结果,最后一张图片代表真实标签。可以看出,在三个分割速度最快的网络中,我们的方法能够更好地区分漂流冰和锚定冰。在图9中,最明显的部分已经用红色方框标出。

4.5、消融实验

为了展示我们网络中子模块的有效性,我们在NWPU_YRCC_EX数据集上进行了一组对比实验。我们以BiSeNet[11]作为基线。Baseline+DUp表示将基线中常用的双线性插值替换为我们的DUpsampling,即我们的FastICENet(acc)。Baseline+DUp+DS表示将Baseline+DUp中的卷积下采样替换为我们的下采样模块。Baseline+DUp+DS+EDA表示在Baseline+DUp+DS的基础上加入EDA模块,即基于非对称卷积模块的密集连接块。Baseline+DUp+DS+Ghost表示在Baseline+DUp+DS的基础上加入我们基于Ghost模块的密集连接块。最后,通过将Baseline+DUp+DS+Ghost中上下文分支和空间分支的通道数减半,我们得到了FastICENet。消融实验的结果如表4所示。
在这里插入图片描述

本实验验证了这些模块的有效性。在这些模块的联合作用下,最终模型显著提高了分割速度,但精度略有下降。DUpsampling在仅带来轻微时间衰减的情况下,将精度提高了 2 % 2\% 2%。然后,下采样模块极大地提高了分割速度,但其精度损失较大。因此,最终我们使用EDA和Ghost模块在最小化速度损失的前提下提高分割精度。在所有实验设置中,FastICENet在精度略有降低的情况下实现了最佳速度。

5、结论

本文提出了一种有效的实时河流冰语义分割网络FastICENet。针对尺度多样性的特点,FastICENet采用了一个包含更精细的空间分支和深层多尺度语义上下文分支的双分支结构。虽然上下文分支耗时较多,但为了降低计算成本,我们采用了一种新的下采样模块和一个非常轻量级的基于Ghost模块的密集连接块。这些措施显著降低了计算复杂度,同时保持了较高的分割精度。为了提高小块冰的分割精度,我们采用了一种可学习的上采样方法DUpsampling,将低分辨率特征图像恢复到原始大小。在三个数据集上的实验结果均表明,FastICENet在精度略有下降的情况下,能够大大提高分割速度,满足准确且实时的要求。FastICENet在最近的实时分割方法中表现最佳。

需要进一步探索其他应用场景。由于冰分割数据集的数据量相对较少,比如与用于场景理解的Cityscapes[40]等传统数据集相比,我们模型的稳定性和性能应是进一步研究的主题。

在未来的工作中,我们将扩展数据集,这可能会提高我们的分割精度。同时,我们还将研究如何在更好地保持分割精度的同时提高分割速度。

作者贡献声明

本文的主要思想由张秀伟、赵子旭和张燕宁提出。数据集由张秀伟、赵子旭、冉令岩、王雯娜、兰泽泽、何厚军、刘启星和张宝森采集、标注和分析。实验由张秀伟和赵子旭设计和执行。论文由张秀伟、赵子旭和冉令岩撰写,并由邢颖慧和殷寒琳修订。所有作者都已阅读并同意发表该手稿的已出版版本。

代码

class UpSample(nn.Module):

    def __init__(self, n_chan, factor=2):
        super(UpSample, self).__init__()
        out_chan = n_chan * factor * factor
        self.proj = nn.Conv2d(n_chan, out_chan, 1, 1, 0)
        self.up = nn.PixelShuffle(factor)
        self.init_weight()

    def forward(self, x):
        feat = self.proj(x)
        feat = self.up(feat)
        return feat

    def init_weight(self):
        nn.init.xavier_normal_(self.proj.weight, gain=1.)

class DownsamplerBlock(nn.Module):
    def __init__(self, ninput, noutput):
        super(DownsamplerBlock,self).__init__()

        self.ninput = ninput
        self.noutput = noutput

        if self.ninput < self.noutput:
            # Wout > Win
            self.conv = nn.Conv2d(ninput, noutput-ninput, kernel_size=3, stride=2, padding=1)
            self.pool = nn.MaxPool2d(2, stride=2)
        else:
            # Wout < Win
            self.conv = nn.Conv2d(ninput, noutput, kernel_size=3, stride=2, padding=1)

        self.bn = nn.BatchNorm2d(noutput)

    def forward(self, x):
        if self.ninput < self.noutput:
            output = torch.cat([self.conv(x), self.pool(x)], 1)
        else:
            output = self.conv(x)

        output = self.bn(output)
        return F.relu(output)

改进方法

将上面的代码复制到block.py中,如下图:
在这里插入图片描述
在__init__.py导入UpSample和DownsamplerBlock,如下图:

在这里插入图片描述
在这里插入图片描述
在task.py中导入UpSample和DownsamplerBlock,如下图:
在这里插入图片描述
在task.py的parse_model函数中增加UpSample和DownsamplerBlock,代码如下:
在这里插入图片描述
在这里插入图片描述
修改配置文件ultralytics/cfg/models/v10/yolov10l.yaml,代码如下:

# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  - [-1, 1, DownsamplerBlock, [128]] # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, DownsamplerBlock, [256]] # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, DownsamplerBlock, [512]] # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, DownsamplerBlock, [1024]] # 7-P5/32
  - [-1, 3, C2fCIB, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]] # 9
  - [-1, 1, PSA, [1024]] # 10

# YOLOv8.0n head
head:
  - [-1, 1, UpSample, []]
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  - [-1, 3, C2fCIB, [512, True]] # 13

  - [-1, 1, UpSample, []]
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  - [-1, 3, C2f, [256]] # 16 (P3/8-small)

  - [-1, 1, DownsamplerBlock, [256]]
  - [[-1, 13], 1, Concat, [1]] # cat head P4
  - [-1, 3, C2fCIB, [512, True]] # 19 (P4/16-medium)

  - [-1, 1, DownsamplerBlock, [512]]
  - [[-1, 10], 1, Concat, [1]] # cat head P5
  - [-1, 3, C2fCIB, [1024, True]] # 22 (P5/32-large)

  - [[16, 19, 22], 1, v10Detect, [nc]] # Detect(P3, P4, P5)

在项目的根目录添加train.py脚本,代码如下:

from ultralytics import YOLOv10
import os

if __name__ == '__main__':
    # 加载模型
    model = YOLOv10(model="ultralytics/cfg/models/v8/yolov10l.yaml")  # 从头开始构建新模型

    # Use the model
    results = model.train(data="VOC.yaml", epochs=300, device='0', batch=8, seed=42,)  # 训练模

训练完成后,就可以看到测试结果!

在项目的根目录添加val.py脚本,代码如下:


from ultralytics import YOLOv10

if __name__ == '__main__':
    # Load a model
    # model = YOLO('yolov8m.pt')  # load an official model
    model = YOLOv10('runs/detect/train/weights/best.pt')  # load a custom model


    # Validate the model
    metrics = model.val(split='val')  # no arguments needed, dataset and settings remembered

split='val’代表使用验证集做测试,如果改为split=‘test’,则使用测试集做测试!

在项目的根目录添加test.py脚本,代码如下:

from ultralytics import YOLOv10


if __name__ == '__main__':
    # Load a model
    # model = YOLO('yolov8m.pt')  # load an official model
    model = YOLOv10('runs/detect/train/weights/best.pt')  # load a custom model
    results = model.predict(source="ultralytics/assets", device='0',save=True)  # predict on an image
    print(results)

test脚本测试assets文件夹下面的图片,save设置为true,则保存图片的测试结果!

测试结果

YOLOv10l summary (fused): 462 layers, 32324240 parameters, 0 gradients, 129.3 GFLOPs
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 15/15 [00:03<00:00,  4.34it/s]
                   all        230       1412      0.951        0.9      0.979      0.716
                   c17        230        131      0.973      0.939      0.991      0.811
                    c5        230         68      0.961      0.926      0.984      0.816
            helicopter        230         43      0.947      0.907      0.945      0.561
                  c130        230         85      0.976      0.974      0.989      0.616
                   f16        230         57      0.957      0.912      0.929      0.616
                    b2        230          2      0.868          1      0.995      0.721
                 other        230         86      0.965      0.907       0.96      0.505
                   b52        230         70      0.955      0.919      0.963      0.786
                  kc10        230         62      0.987      0.984      0.985      0.804
               command        230         40       0.95      0.953      0.991      0.772
                   f15        230        123      0.968      0.972      0.993       0.66
                 kc135        230         91      0.968      0.912      0.974      0.665
                   a10        230         27      0.931      0.593      0.841      0.422
                    b1        230         20          1      0.865      0.995      0.769
                   aew        230         25      0.928       0.96      0.981      0.754
                   f22        230         17      0.943      0.967      0.986      0.708
                    p3        230        105      0.981      0.965      0.993      0.789
                    p8        230          1        0.9          1      0.995      0.697
                   f35        230         32          1      0.713      0.982      0.534
                   f18        230        125      0.976      0.968      0.991      0.803
                   v22        230         41      0.985      0.976      0.995      0.661
                 su-27        230         31      0.981          1      0.995      0.847
                 il-38        230         27      0.972          1      0.995      0.788
                tu-134        230          1       0.78          1      0.995      0.895
                 su-33        230          2          1          0      0.995      0.707
                 an-70        230          2      0.845          1      0.995      0.796
                 tu-22        230         98      0.983       0.98      0.994      0.818

总结

通过百度网盘分享的文件:YoloV10改进策略:下采样与上采样改进下采样模块和DUpsampl...
链接:https://pan.baidu.com/s/18KQTAYZG7FutscgXiS64xg?pwd=pg57 
提取码:pg57
  • 18
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI智韵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值