摘要
高精度、轻量级和实时响应是实现自动驾驶的三个基本要求。在这项研究中,我们介绍了一个自适应、实时和轻量级的多任务模型,旨在同时解决目标检测、可行驶区域分割和车道线分割任务。具体来说,我们开发了一个具有统一和精简的分割结构的端到端多任务模型。我们在分割颈部引入了可学习参数,以自适应地连接特征,所有分割任务都使用相同的损失函数。这消除了定制化的需要,并增强了模型的泛化能力。我们还引入了一个仅由一系列卷积层组成的分割头,减少了推理时间。我们在BDD100k数据集上取得了具有竞争力的结果,特别是在可视化结果上。性能结果显示,目标检测的mAP@50为 81.1 % 81.1\% 81.1%,可行驶区域分割的mIoU为 91.0 % \mathbf{91.0\%} 91.0%,车道线分割的IoU为 28.8 % \mathbf{28.8\%} 28.8%。此外,我们还引入了真实世界的场景来评估我们的模型在实际场景中的性能,这显著优于竞争对手。这表明我们的模型不仅具有竞争性的性能,而且比现有的多任务模型更加灵活和快速。源代码和预训练模型已发布在https://github.com/JiayuanWang-JW/YOLOv8-multi-task。
索引术语 - 多任务学习,全景驾驶感知,目标检测,可行驶区域分割,车道线分割
I. 引言
随着深度学习的快速发展,计算机视觉领域取得了巨大的进步,特别是在自动驾驶应用方面[[1]-[3]。自动驾驶系统(ADS)为日常驾驶提供了极大的便利。在ADS中,检测与分割是至关重要的,主要包括三个核心任务:目标检测、可行驶区域分割和车道线分割,如图1所示。在自动驾驶任务中,激光雷达和摄像头传感器常常被使用。然而,基于摄像头的方法因其低成本而脱颖而出。因此,将摄像头与深度学习模型相结合成为了一个强大的解决方案。此外,高精度、实时性和轻量级是自动驾驶任务中的关键要素。在紧急情况下,ADS必须快速准确地做出决策,以避免潜在的碰撞或安全地绕过障碍物。准确而快速地估计可行驶区域和车道线对于有效的路线规划至关重要。实际上,对于ADS来说,保持每秒超过30帧(FPS)的帧率至关重要[4]。鉴于边缘设备的计算能力有限,通过深度学习方法在自动驾驶中同时实现实时性能和高精度是一个挑战。
针对自动驾驶领域内的各个任务,已经提出了许多方法,其中许多方法都取得了出色的结果。对于目标检测任务,主要有两种主流方法。第一类是双阶段技术,以开创性的Fast R-CNN[5]为代表。虽然这些方法优先考虑检测准确性,但往往以牺牲计算效率为代价。第二类是一阶段方法,以You Only Look Once(YOLO)系列[6]-[9]为代表,从版本1到最新的版本8。YOLOv8尤其以其实时检测能力而引人注目,已被广泛用于各种检测任务。它主要侧重于检测而非分割。尽管为分割任务引入了分割头,但所使用的损失函数和评估指标主要针对检测任务。此外,YOLOv8每个模型只能实现一个任务。而且,YOLOv8在自动驾驶的多任务背景下处理多个任务的能力存在固有的局限性。尝试在多任务条件下应用它需要部署多个模型,导致训练和推理时间的大幅增加。
对于分割任务,全卷积网络(FCN)的出现是该领域的里程碑之一[10]。此外,在可行驶区域分割任务中,U-Net[11]和SegNet[12]是常见的模型。然而,车道线分割与可行驶区域分割有所不同,因为车道线在道路图像中具有独特的细长和狭窄特征。车道线分割需要低级别和多尺度的特征进行有效的分析。最近,PointLaneNet[13]和MFIALane[14]等模型在车道线分割领域获得了广泛认可。尽管它们在车道线分割任务中取得了显著的性能,但将这些任务与检测任务集成到单个模型中仍面临挑战,这主要是由于所需的特征分辨率不同。分割在像素级别上操作,而目标检测在一阶段方法中使用网格单元,在两阶段方法中使用选择性搜索。虽然它们的关注点不同,但分割和检测任务都需要从输入图像中提取初始特征。因此,它们有可能共享一个公共主干。与使用单独模型为每个任务相比,将三个不同的颈部和头部集成到具有共享主干的统一模型中,可以显著节省计算资源并减少推理时间。
最近,已经为自动驾驶系统(ADS)提出了几种多任务模型,如YOLOP [15]、多任务学习模型 [16]、Sparse U-PDP [17] 和HybridNet [18]。所有这些方法都选择了三项任务来构建全景自动驾驶系统:目标检测、可行驶区域分割和车道线分割,这些任务均来自公开的Berkeley Deep Drive(BDD100K)数据集。每种方法都取得了出色的结果。通常,它们的模型由两个组件组成:一个编码器和一个解码器。然而,仍有一些挑战需要解决。首先,它们的颈部或头部组件具有复杂的结构,这可能会进一步影响推理时间。例如,HybridNet [18] 由于使用了基于锚点的检测头而在检测任务中取得了出色的性能。这种检测头比无锚点检测头表现更好,但往往会增加推理时间。其次,它们在设计损失函数或颈部结构时往往专注于特定任务。例如,YOLOP [15] 和[16]为每个分割任务设计了单独的损失函数,这可能会损害模型的通用性,并花费大量时间设计、调整和测试损失函数及其参数。因此,开发一个快速、健壮且普遍适用的模型至关重要。
在这项工作中,我们提出了一种专为多任务设计的自适应模型,名为A-YOLOM。值得注意的是,A-YOLOM能够使用一个参数开销合理的单一模型高效地处理多任务。这种效率得益于我们为分割任务设计的轻量级头部,该头部仅由一系列卷积层构成。此外,通过在同一任务类型中采用一致的损失函数,我们保持了一种统一的方法。重要的是,我们为分割网络的颈部区域引入了一个自适应模块。这主要通过一个可学习的参数实现,该参数经过训练以决定是否合并特征,从而消除了对不同场景任务进行独特设计的需要。总结来说,我们研究的主要贡献如下:
- 我们开发了一个轻量级模型,能够将三个任务集成到一个单一的统一模型中。这对于需要实时处理的多任务特别有益。
- 我们为分割架构的颈部区域设计了一种新颖的自适应合并模块。该模块可以自适应地合并特征,无需手动设计,并且能够达到与精心设计相似的或更好的性能,进一步增强了模型的通用性。
- 我们设计了一个轻量级、简单且通用的分割头部。我们为相同类型的任务头部采用了统一的损失函数,这意味着我们不需要为特定任务进行定制设计。分割头部仅由一系列卷积层构建而成。
- 基于公开可用的自动驾驶数据集进行了广泛的实验,这些实验表明我们的模型在推理时间和可视化方面均优于现有工作。此外,我们还使用真实道路数据集进行了进一步的实验,这些实验也表明我们的模型显著优于最先进的方法。
二、相关工作
在本节中,我们将回顾自动驾驶任务中检测、分割和多任务模型的现有工作。我们主要关注基于深度学习的方法。
A. 检测
在过去的十年中,计算机视觉领域的快速进展极大地推动了自动驾驶的发展。具体来说,这些任务可以分为两大部分:检测和分割。检测任务包括对象检测,如识别车辆、行人、交通标志等实体。目前的对象检测方法可以分为两类[19]:两阶段方法和一阶段方法。
两阶段方法首先使用区域提议网络(RPN)生成感兴趣区域(RoI)。随后,第二阶段使用深度学习网络对这些RoI进行分类。这一阶段还微调边界框的尺寸和位置,从而提高对象定位的准确性。两阶段对象检测方法的著名例子包括带有CNN特征的区域(R-CNN)[20]、Fast R-CNN[5]和Faster R-CNN[21]。
相比之下,一阶段检测方法提供了一种端到端的策略。它在一个前向传递中同时预测边界框并分类对象。这种方法可以部署在移动设备上以实现实时操作,并且易于实现。一阶段方法的例子包括You Only Look Once(YOLO)系列[6]-[9]、SingleShot Multibox Detector(SSD)[22]和RetinaNet[23]。
虽然一阶段方法在检测性能方面通常落后于两阶段方法,但它们的实时能力使它们在对象检测任务中越来越受欢迎。
B. 分割
分割任务,包括语义分割和实例分割,与检测任务不同,因为它通常在像素级别上进行操作。自动驾驶中的常见分割任务包括可行驶区域分割和车道线分割。然而,这些任务之间存在显著差异。可行驶区域通常覆盖图像的大部分区域,但区域数量不频繁,如图中所示,仅有三个可行驶区域。车道线则相反:它们在一张图像中数量众多,但每条线都小而细长。
在2015年,深度学习模型Fully Convolutional Networks(FCN)[10]被引入用于语义分割任务。由于其端到端的训练能力,它在Pascal VOC 2012数据集上比传统方法提高了20%的性能。然而,由于FCN主要关注局部信息,全局细节可能会丢失,导致产生粗糙的分割结果。为了解决这个问题,提出了编码器-解码器架构模型。Badrinarayanan等人[12]提出了SegNet,它通过保留最大池化索引来确保在上采样过程中更准确地恢复细节。然而,编码器-解码器架构也有其缺点。在编码过程中,高分辨率细节往往会丢失,减少了精细的信息,这对于车道线分割等任务来说并不理想。Pan等人[24]提出了SCNN,它采用空间卷积来捕获图像在水平和垂直方向上的连续性和结构信息。由于其能够捕获图像中的空间相关性,它非常适合检测细长的物体,如车道线。然而,这种卷积操作在计算上是密集且耗时的。
鉴于车辆中边缘设备的限制,将多任务整合到单个模型中至关重要。这不仅节省了计算资源,还满足了实时性能的要求。
C. 多任务模型
近年来,多任务模型因其高效率而在研究界受到广泛关注。这在自动驾驶领域尤为重要,因为自动驾驶包含多种子任务,并且经常在边缘设备上有限的计算资源约束下运行。MultiNet[25]引入了一种高效、统一的深度架构,能够同时处理分类、检测和语义分割任务。YOLOP[15]通过引入两个额外的分割颈部和头部来同时执行分割和检测任务,从而扩展了YOLOv5模型。他们为每个分割任务分别设计了结构和损失函数,这可能会损害模型的通用性。Sparse U-PDP[17]提出了一个统一的解码框架,将三个任务集成到一个模型中。值得注意的是,他们通过“动态卷积核”创建了一个简化的多任务表示,并通过动态交互模块进行了增强,该模块为每个任务唯一地调整特征采样。由于其复杂的解码器,很难满足实时要求。
Shokhrukh等人[16]介绍了一种内存高效的端到端框架,该框架利用定制损失函数的组合,包括所有任务的加权平均总和,以提高性能。然而,定制和特定的加权将限制模型对新任务的适应性。此外,他们的方法涉及复杂的训练范式,这可能导致过拟合和现实世界中的次优性能。
因此,开发一个通用且实时的多任务模型的挑战仍然很大。在我们的工作中,我们引入了一个自适应拼接模块。我们为同类型的任务使用相同的损失函数,进一步增强了模型的通用性。为了降低参数数量,我们采用了一个轻量级的骨干网络和一个简单但有效的分割头部,确保模型在有限的计算资源下满足实时要求。
III. 提出的方法论
在本节中,我们将详细介绍我们的模型,包括三个主要组成部分:骨干网络、颈部和头部。此外,还包含了损失函数。如图2所示,A-YOLOM模型是一个具有简单编码器-解码器架构的单阶段网络。编码器由骨干网络和颈部组成,而解码器由头部组成。值得注意的是,我们总共有三个颈部:一个用于目标检测的颈部,以及两个分割颈部,一个用于可行驶区域分割,另一个用于车道线分割。我们的模型具有自适应、简单且高效的结构,这不仅扩大了其应用范围,还确保了实时推理。
A. 编码器
在我们的工作中,我们采用了一个共享的骨干网络,并为三个不同的任务使用了三个颈部网络。
-
骨干网络:骨干网络由一系列卷积层组成,专门用于从输入数据中提取特征。鉴于YOLOv8在检测任务中的出色性能,我们的骨干网络遵循YOLOv8的设计。具体来说,他们对CSP-Darknet53[26]进行了改进,后者是YOLOv5的骨干网络。与CSP-Darknet53相比,这个骨干网络的主要差异在于使用c2f层替代了c3模块。c2f模块将高级特征与上下文信息相结合,进一步提高了性能。还有一些细微的差异,例如使用3×3卷积替代了初始的6×6卷积,并移除了第10和第14个卷积层。这些改进使得该骨干网络在YOLO系列中比其前身更有效。
-
颈部:颈部负责融合从骨干网络中提取的特征。在骨干网络之后,我们使用空间金字塔池化融合(Spatial Pyramid Pooling Fusion, SPPF)模块来增加感受野并减少与空间金字塔池化(SPP)相比的计算需求。这些特征随后被导向到各个颈部。
在我们的模型中,我们使用了三个颈部:一个用于目标检测任务,另外两个用于分割任务,特别是用于可行驶区域和车道线。值得注意的是,在图2中,由于我们有两个分割任务,左边分割颈部的 ( N ) (\mathrm{N}) (N) 值等于2。这意味着我们为不同的分割任务使用了两个相同的分割颈部。来自不同颈部底层的天蓝色和棕色线条分别导向单独的分割头部。
对于检测颈部,我们采用了路径聚合网络(Path Aggregation Network, PAN)[27]结构,它包括自顶向下和自底向上两个特征金字塔网络(Feature Pyramid Networks, FPN)[28]。这种结构将低级的细节与高级的语义特征相结合,丰富了整体的特征表示。这对于目标检测至关重要,因为小物体依赖于低级特征,而较大的实体则受益于高级特征提供的更广泛的上下文。在检测任务中,通常存在不同尺度的物体。这种物体大小的多样性是我们为检测颈部选择PAN结构的主要原因。
对于分割颈部,我们采用了特征金字塔网络(FPN)结构,该结构以其对多尺度对象的有效处理而闻名。此外,我们在颈部和骨干网络之间引入了一个自适应拼接模块。如图示算法1所示,该模块在每个相同的分辨率级别上工作,自适应地确定是否应将特征进行拼接。这一改进增强了模型的通用性,使其适用于各种分割任务。
B. 解码器
解码器处理来自颈部的特征图,为每个任务做出预测。这包括预测对象类别、它们对应的边界框以及特定分割对象的掩码。在我们的工作中,我们使用了两个不同的头部:检测头部和分割头部。
检测头部采用了一种与YOLOv8检测头部相似的解耦方法,使用卷积层将高维特征转换为类别预测和边界框,而不使用目标性分支。这是一个无锚点检测器。请注意,检测头部的输出在训练、验证和预测模式之间有所不同。在验证和预测模式下,处理遵循图2的右侧部分。使用三种不同分辨率作为输入,并输出一个张量,该张量同时包含类别预测和它们各自的边界框。在训练模式下,检测头部对每个输入应用卷积层,总共输出三个张量。每个张量包含特定于其分辨率的类别预测和边界框。随后,这些结果用于计算损失函数。
我们的分割头部在不同分割任务之间是相同的。具体来说,它包含一系列卷积层,用于提取上下文信息,以及一个反卷积层,用于将分辨率恢复到原始图像大小。最终,我们获得一个与原始图像大小匹配的像素级二值掩码。0代表背景,1代表对象。算法2说明了分割头部的处理过程。此外,分割头部精简的架构,仅包含7,940个参数,显著增强了模型的可部署性。
C. 损失函数
我们采用了一个具有多任务损失函数的端到端训练方法。具体来说,我们的损失函数包含三个组件:一个用于目标检测,两个用于分割。公式如下所示:
L = L det + L segda + L segll \mathcal{L} = \mathcal{L}_{\text{det}} + \mathcal{L}_{\text{segda}} + \mathcal{L}_{\text{segll}} L=Ldet+Lsegda+Lsegll
其中, L det \mathcal{L}_{\text{det}} Ldet 用于目标检测任务, L segda \mathcal{L}_{\text{segda}} Lsegda 用于可行驶区域分割任务,而 L segll \mathcal{L}_{\text{segll}} Lsegll 用于车道线分割任务。
对于检测任务,损失函数被分为两个主要分支:分类分支和边界框分支。分类分支包括二元交叉熵损失,表示为 L BCE \mathcal{L}_{\text{BCE}} LBCE。边界框分支包括分布焦点损失(DFL)[29],表示为 L DFL \mathcal{L}_{\text{DFL}} LDFL,以及完全IoU(CIoU)损失[30],表示为 L CIoU \mathcal{L}_{\text{CIoU}} LCIoU。因此,检测损失 L det \mathcal{L}_{\text{det}} Ldet 可以表示为:
L det = λ BCE L BCE + λ DFL L DFL + λ CIoU L CIoU \mathcal{L}_{\text{det}} = \lambda_{\text{BCE}} \mathcal{L}_{\text{BCE}} + \lambda_{\text{DFL}} \mathcal{L}_{\text{DFL}} + \lambda_{\text{CIoU}} \mathcal{L}_{\text{CIoU}} Ldet=λBCELBCE+λDFLLDFL+λCIoULCIoU
其中, λ BCE \lambda_{\text{BCE}} λBCE、 λ DFL \lambda_{\text{DFL}} λDFL 和 λ CIoU \lambda_{\text{CIoU}} λCIoU 是相应的系数。
L B C E = − [ y n log x n + ( 1 − y n ) log ( 1 − x n ) ] \mathcal{L}_{\mathrm{BCE}}=-\left[y_{n} \log x_{n}+\left(1-y_{n}\right) \log \left(1-x_{n}\right)\right] LBCE=−[ynlogxn+(1−yn)log(1−xn)]
其中, x n x_{n} xn 是每个对象的预测分类。 y n y_{n} yn 是每个对象的真实标签。 L B C E \mathcal{L}_{\mathrm{BCE}} LBCE 衡量预测值和真实标签之间的分类误差。
L D F L ( S i , S i + 1 ) = − ( ( y i + 1 − y ) log ( S i ) + ( y − y i ) log ( S i + 1 ) ) S i = y i + 1 − y y i + 1 − y i , S i + 1 = y i − y y i − y i + 1 \begin{aligned} \mathcal{L}_{\mathrm{DFL}}\left(\mathcal{S}_{i}, \mathcal{S}_{i+1}\right) &= -\left(\left(y_{i+1}-y\right) \log \left(\mathcal{S}_{i}\right)+\left(y-y_{i}\right) \log \left(\mathcal{S}_{i+1}\right)\right) \\ S_{i} &= \frac{y_{i+1}-y}{y_{i+1}-y_{i}}, \quad S_{i+1}=\frac{y_{i}-y}{y_{i}-y_{i+1}} \end{aligned} LDFL(Si,Si+1)Si=−((yi+1−y)log(Si)+(y−yi)log(Si+1))=yi+1−yiyi+1−y,Si+1=yi−yi+1yi−y
在这里, y y y 是边界框坐标的真实标签,它是一个十进制数。 y i + 1 y_{i+1} yi+1 是真实标签 y y y 的上取整。 y i y_{i} yi 是真实标签 y y y 的下取整。 L D F L \mathcal{L}_{\mathrm{DFL}} LDFL 衡量预测和真实特征位置之间的位移,以使预测的边界框接近实际的边界框。
L C l o U = 1 − C IoU C I o U = IoU − ρ 2 ( b , b g t ) c 2 − α v v = 4 π 2 ( arctan w g t h g t − arctan w h ) 2 α = v ( 1 − IoU ) + v \begin{array}{c} \mathcal{L}_{\mathrm{CloU}}=1-C \text{ IoU } \\ C I o U=\text{IoU}-\frac{\rho^{2}\left(b, b^{g t}\right)}{c^{2}}-\alpha v \\ v=\frac{4}{\pi^{2}}\left(\arctan \frac{w^{g t}}{h^{g t}}-\arctan \frac{w}{h}\right)^{2} \\ \alpha=\frac{v}{(1-\text{IoU})+v} \end{array} LCloU=1−C IoU CIoU=IoU−c2ρ2(b,bgt)−αvv=π24(arctanhgtwgt−arctanhw)2α=(1−IoU)+vv
其中, b b b 是预测框的中心点, b g t b^{g t} bgt 是真实框的中心点。 ρ \rho ρ 是预测点和真实点之间的欧氏距离。 c c c 是两个框的最小外接矩形的对角线长度。 v v v 和 α \alpha α 是用来控制比例的系数。 h h h 是预测框的宽和高, w g t w^{g t} wgt 和 h g t h^{g t} hgt 是真实框的宽和高。 L C l o U \mathcal{L}_{\mathrm{CloU}} LCloU 结合了重叠、距离和长宽比一致性等方面,来衡量预测和真实边界框之间的差异。因此,它使模型能够更精确地定位对象的形状、大小和方向。
对于分割任务,我们采用了相同的损失函数。这意味着 L segda \mathcal{L}_{\text{segda}} Lsegda与 L segll \mathcal{L}_{\text{segll}} Lsegll的公式是相同的。然而,它们在反向传播时是分别进行的。我们将它们统称为 L seg \mathcal{L}_{\text{seg}} Lseg。其公式如下:
L seg = λ FL L FL + λ TL L TL \mathcal{L}_{\text{seg}} = \lambda_{\text{FL}} \mathcal{L}_{\text{FL}} + \lambda_{\text{TL}} \mathcal{L}_{\text{TL}} Lseg=λFLLFL+λTLLTL
其中, L FL \mathcal{L}_{\text{FL}} LFL和 L TL \mathcal{L}_{\text{TL}} LTL分别是焦点损失[23]和Tversky损失[31]。这两种损失函数在分割任务中都被广泛使用。 λ FL \lambda_{\text{FL}} λFL和 λ TL \lambda_{\text{TL}} λTL是对应的系数。
L FL = − α t ( 1 − p t ) γ log ( p t ) \mathcal{L}_{\text{FL}} = -\alpha_{t}(1-p_{t})^{\gamma} \log(p_{t}) LFL=−αt(1−pt)γlog(pt)
其中, p t p_{t} pt是模型预测为正类的概率。 y y y是每个像素的真实标签。 α t \alpha_{t} αt是一个权重因子,用于平衡正/负样本的重要性。 γ \gamma γ是一个聚焦参数,用于调节每个样本对损失的贡献。焦点损失为处理不平衡样本提供了一个鲁棒的解决方案,确保模型不会过于偏向占主导地位的、易于学习的类别。相反,它更加强调具有挑战性和代表性不足的领域。
L TL = 1 − T P T P + α F N + β F P \mathcal{L}_{\text{TL}} = 1 - \frac{TP}{TP + \alpha FN + \beta FP} LTL=1−TP+αFN+βFPTP
Tversky损失是Dice损失的扩展,通过引入两个额外的参数( α \alpha α和 β \beta β)来为假阳性和假阴性分配不同的权重,从而增强了其处理不平衡任务的能力。
D. 训练范式
我们的训练方法与在全景自动驾驶任务中常见的经典多任务学习方法有所不同。我们采用了一种端到端的训练模式,每个批次仅执行一次反向传播。这意味着整个网络是集体优化的,无需冻结特定层或交替优化,从而减少了训练时间。算法3展示了逐步的训练过程。
IV. 实验与结果
在本节中,我们将在BDD100K数据集上评估我们模型的性能和推理时间,并将其与在自动驾驶全景感知任务中使用的经典方法进行比较。此外,我们还进行了广泛的消融研究,并对实验结果进行了分析。
A. 实验细节
-
数据集:BDD100K数据集是研究自动驾驶的一个显著资源,包含100k个样本和多任务标注。除了数量庞大之外,该数据集的重要性还体现在其多方面的特性上,包括多样的地理位置、环境背景和天气条件。这些优势确保了在BDD 100K上训练的模型能够达到鲁棒性和多功能性,使其成为我们研究工作的理想选择。数据集被分为三个部分:一个包含70k张图像的训练集,一个包含10k张图像的验证集,以及一个包含20k张图像的测试集。由于测试集的标签没有公开,我们在验证集上评估了我们的模型。与YOLOP类似,我们的检测任务专注于“车辆”检测,包括汽车、公交车、卡车和火车等类别。
-
评估指标:对于目标检测任务,我们采用召回率和mAP50作为评估指标。这两个指标在检测任务中都被广泛认可和接受。召回率表示模型准确检测指定类别中所有对象实例的能力。mAP50是在IoU阈值为0.5时,对所有类别的平均精度取平均值得到的。值得注意的是,平均精度量化了精度-召回率曲线下的面积。对于分割任务,类似于YOLOP[15],我们使用mIoU来评估可行驶区域分割任务。对于车道线分割任务,我们同时采用准确率和IoU作为评估指标。然而,由于车道线分割中背景和前景之间像素数量的不平衡,我们采用一个更有意义的平衡准确率指标进行评估。传统的准确率会因为偏向于样本数量更大的类别而扭曲结果。相比之下,平衡准确率通过考虑每个类别的准确率提供了一个更公平的度量。其公式如下:
Line Accuracy = Sensitivity + Specificity 2 \text{Line Accuracy} = \frac{\text{Sensitivity} + \text{Specificity}}{2} Line Accuracy=2Sensitivity+Specificity
其中,Sensitivity = (\frac{TP}{TP+FN}) 且 Specificity = (\frac{TN}{TN+FP})。
我们还比较了我们的模型与其他方法的FPS(每秒帧数)。所有评估实验都在GTX 1080 Ti GPU上进行。
- 实验设置与实现:我们将我们的模型与多个显著的多任务模型进行比较。由于多任务模型的稀缺性,我们也将一些优秀的单任务或双任务模型纳入比较范围。YOLOP和HybridNet代表了全景自动驾驶领域的最新技术,并且是BDD100K数据集上的开源多任务模型。Faster R-CNN和YOLOv8分别是两阶段和一阶段目标检测网络的代表。MultiNet和DLT-Net都能处理多个全景驾驶感知任务,并在BDD100k数据集上的目标检测和可行驶区域分割任务中展示了良好的性能。PSPNet [32] 由于其无与伦比的全局信息聚合能力,在语义分割任务中表现出色。鉴于BDD100K数据集上缺乏处理车道线分割的适当多任务网络,我们将我们的模型与Enet [33]、SCNN和Enet-SAD [34]这三种领先的车道检测网络进行比较。
为了提升性能,我们采用了几种数据增强技术。具体来说,我们使用了mosaic增强,这有助于防止过拟合并增强训练数据。此外,为了处理光度失真,我们修改了图像的色调、饱和度和值参数。我们还结合了基本的数据增强技术来处理几何失真,如随机平移、缩放和水平翻转。
我们使用SGD优化器训练我们的模型,学习率( l r l r lr)设置为0.01,动量设置为0.937,权重衰减为0.0005。在训练初期,我们的模型会经历3个epoch的预热训练。在预热阶段,SGD优化器的动量设置为0.8,而偏置学习率( b i a s 1 r bias\ 1\ r bias 1 r)为0.1。在我们的训练过程中,我们采用了线性学习率衰减策略。这种策略有助于确保模型在训练早期快速学习,并在后期更稳定地收敛。此外,我们将原始图像的尺寸从 1280 × 720 1280 \times 720 1280×720调整为 640 × 640 640 \times 640 640×640。对于损失函数系数,我们设置 λ F L = 24.0 \lambda_{\mathrm{FL}}=24.0 λFL=24.0, λ T L = 8.0 \lambda_{\mathrm{TL}}=8.0 λTL=8.0, λ D F L = 1.5 \lambda_{\mathrm{DFL}}=1.5 λDFL=1.5, λ I o U = 7.5 \lambda_{\mathrm{IoU}}=7.5 λIoU=7.5,和 λ B C E = 0.5 \lambda_{\mathrm{BCE}}=0.5 λBCE=0.5。在 L T L \mathcal{L}_{\mathrm{TL}} LTL中,我们采用 α = 0.7 \alpha=0.7 α=0.7和 β = 0.3 \beta=0.3 β=0.3;在 L F L \mathcal{L}_{\mathrm{FL}} LFL中,我们设置 α t = 0.25 \alpha_{t}=0.25 αt=0.25和 γ = 2 \gamma=2 γ=2。最后,我们在三块RTX 4090上以批大小为120训练了300个epoch。
在评估时,我们将置信度阈值设置为0.001,NMS(非极大值抑制)阈值设置为0.6。对于预测,置信度阈值设置为0.25,NMS阈值设置为0.45。我们遵循YOLOP的置信度阈值和NMS设置。因此,可视化结果可能与定量结果略有不同。
B. 实验结果
在本小节中,我们端到端地训练了我们的模型,并将其性能与其他优秀方法进行了比较。
- 推理时间:深度学习应用中一个主要的挑战是推理时间。特别是在自动驾驶任务中,需要在边缘设备上部署模型,而这些设备通常具有有限的计算资源。因此,确保模型既轻量又具备实时性变得至关重要。在表(此处省略了具体的表格)中,我们复现并测试了YOLOP、 H y b r i d N e t Y 2 HybridNet Y ^{2} HybridNetY2、YOLOv8以及我们模型的推理时间,所有测试都是在GTX 1080 Ti GPU上以1和32的批大小进行的。FPS(每秒帧数)的计算方法遵循HybridNet。此外,我们还提供了每个模型的参数数量作为评估结果之一。
A-YOLOM(n)和A-YOLOM(s)之间的主要区别在于骨干网络的复杂度。A-YOLOM(n)是我们设计的轻量级骨干网络,具有较低的复杂度,非常适合在边缘设备上部署。A-YOLOM(s)则具有更复杂的骨干网络,提供了更强大的性能,但时间开销也随之增加,尤其是在批量大小(bs)为32的场景中。与其他领先的全景自动驾驶多任务模型和单任务模型相比,A-YOLOM(n)以其更轻量化和更高的效率脱颖而出。具体而言,与YOLOP相比,A-YOLOM(n)具有显著更少的参数和更高的FPS。在bs=1时,它实现了1.53倍的加速,在bs=32时实现了1.28倍的加速,这表明我们的模型更加高效。与HybridNet相比,A-YOLOM(n)在参数和速度上都有显著优势。尽管A-YOLOM(s)的参数比HybridNet多,但它的速度更快。HybridNet在bs=1和bs=32时都不满足实时性能要求。我们认为较长的推理时间是由于在检测中使用了锚框(anchor box)。生成大量的锚框会增加计算开销,从而降低整体推理速度。在这种情况下,我们不会在后续部分中将其性能与我们的模型进行比较。
YOLOv8是一个单任务模型,意味着它只能在单个模型内执行一个任务。因此,我们列出了两个版本:一个是YOLOv8(det),另一个是YOLOv8(seg)。虽然它们都比其他模型快,包括我们的模型,但它们需要在边缘设备上部署三个单独的模型,即一个检测模型与两个分割模型组合在一起,总共包含9.68M参数。这比A-YOLOM(n)多出了2.18倍,给边缘设备带来了很大压力。此外,YOLOv8在三个任务上的性能远不如我们的模型,我们将在接下来的部分中讨论这一点。
- 多任务结果:这部分展示了包括目标检测、可行驶区域分割和车道线分割在内的多任务实验的结果。
在检测任务中,我们遵循YOLOP的设置,将汽车、巴士、卡车和火车合并为一个“车辆”分类。对比结果如表所示(由于这里未提供具体的表格编号,我将其标记为“Table \square”)。根据定量结果,我们可以看到我们模型的两个版本在mAP50方面都取得了最佳性能。这表明我们的模型在预测检测目标方面具有很高的准确性。特别是与MultiNet和Faster R-CNN相比时。此外,A-YOLOM(n)的骨干网络、检测颈部和头部的复杂度与YOLOv8n(det)相当。然而,A-YOLOM(n)在召回率和mAP50方面均显著优于YOLOv8n(det)。这表明在多任务学习中,各种任务可以相互辅助并进一步提高单个任务的性能。
另一方面,YOLOv8n(det)的性能优于YOLOv5s,因为“s”规模模型通常具有更复杂的骨干网络以增强性能。我们模型的一个问题是召回率不太令人满意。YOLOP和DLT-Net的召回率优于我们的模型。我们认为这是由于检测损失函数\mathcal{L}_{\text{det}}中边界框损失的权重较高。这意味着我们的模型更加保守,以牺牲召回率性能为代价来追求更高的mAP。然而,我们认为mAP50更好地反映了检测任务的综合性能。此外,根据表所示(Table \square),当批量大小设置为1时,我们的模型达到了实时性能,而YOLOP则不能。
对于可行驶区域分割任务,表IIII提供了定量结果。我们的模型在mIoU方面取得了第二和第三的最佳性能。YOLOP在分割任务上定制了损失函数,因此其性能优于我们的模型。在mIoU方面,A-YOLOM(n)和A-YOLOM(s)分别比YOLOP低1%和0.5%。我们认为这个结果是可接受的。虽然我们的模型可能在性能上略有损失,但它更加灵活且速度更快。此外,我们的模型性能远优于其他模型,如YOLOv8n(seg)、MultiNet和PSPNet。值得注意的是,虽然YOLOv8n(seg)比我们的模型快,但其部署成本更高,且性能明显不如我们。
对于车道线分割任务,表(\mathbb{I D})提供了定量结果。A-YOLOM(s)在准确率和IoU方面都取得了最佳性能。具体而言,它在准确率方面表现强劲,并且IoU比YOLOP高出2.3%。值得注意的是,我们的模型在所有分割任务中都保持了相同的结构和损失函数,因此遇到新的分割任务时无需进行调整。此外,YOLOv8(seg)的性能略逊于我们。根据表【II)和表[(\nabla)]的结果,我们认为我们提出的颈部和头部结构更适合于分割任务,相比YOLOv8(seg)而言。由于我们使用平衡准确率进行评估,Enet、SCNN和ENet-SAD采用了不同的准确率计算方法,因此我们不能直接与它们进行准确率比较。然而,我们在IoU指标上的结果显著优于它们,这足以证明我们的模型在性能上优于它们。
- 可视化结果:本节将展示YOLOP和我们的模型之间的视觉对比。我们不仅评估了有利天气条件下的性能,还评估了不利条件下的性能,包括强烈的阳光、夜间、雨天和雪天。我们将依次分析每个场景。
图3展示了晴天下的结果。我们知道,强烈的阳光会影响驾驶员的视线。同样地,它也会影响模型的性能。这对可行驶区域和车道线分割的性能构成了挑战。在这个具有挑战性的场景中,我们的模型超越了YOLOP。具体来说,在强烈的阳光下(如左图和右图所示),我们的模型提供了准确的车道线预测,并给出了更平滑的可行驶区域指示。此外,我们的模型在检测更小、更远的车辆时展现出更高的准确性。如中间和右图所示,我们的模型成功检测到了远处道路上的车辆,包括相对方向的行驶车辆和靠近房屋的车辆。根据可视化结果,我们认为在这个场景中,我们的模型表现优于YOLOP。
图7展示了夜间场景的结果。在夜间场景中,由于光线不足和对面车辆的反光,图像质量下降,这对模型做出准确预测构成了挑战。在这种挑战下,我们的模型在车道线和可行驶区域的预测上始终表现出更准确、更平滑的结果。A-YOLOM(s)不仅在分割任务上表现出色,在检测任务上也展现出了卓越的性能。具体来说,即使在反光的情况下,它也能准确检测到对向行驶的车辆,并且在与YOLOP的对比中表现出色。
从右侧图像的检测结果来看,YOLOP在夜间检测远处车辆方面略优于我们的模型。然而,我们的模型在分割结果上显著优于YOLOP。特别是在中间图像中,YOLOP错误地将对向车道预测为可行驶区域,这种误判对自动驾驶任务来说是极其危险的。
图5展示了雨天条件下的结果。雨水会增加路面反射,从而影响驾驶员的判断。这一问题在深度学习模型中也有所体现。此外,由于挡风玻璃上的雨滴具有折射和散射效应,它们会使整个图像变得模糊,给模型的预测带来相当大的挑战。从左侧图像的结果中,我们可以看到YOLOP由于路面反射而无法准确分割可行驶区域。类似的情况在中间场景中也很明显。YOLOP甚至难以区分汽车引擎盖和路面。然而,在这种场景下,我们的模型仍然表现出色。特别是A-YOLOM(s),它受路面反射的影响较小。与YOLOP相比,我们的模型在车道线检测方面也表现出色,如右侧图像所示。然而,在这个场景中,YOLOP在检测任务上超过了我们。如左侧图像所示,YOLOP能够检测到更远处更多的车辆。
图6展示了雪天条件下的结果。在雪天里,积雪可能会遮挡道路或车道,给模型带来额外的挑战。一些积雪被清理到路边形成雪堆,这对模型的车辆预测构成了挑战。例如,在中间图像的左侧,YOLOP错误地将一个雪堆检测为车辆。如果路上有一个小雪堆,车辆通常可以驶过它。将这样的小雪堆误识别为静止的车辆可能是危险的。因此,更高的召回率并不总是更好的。在召回率和精度之间找到平衡至关重要。
在展示的三个结果中,我们的模型在分割任务上显著优于YOLOP,特别是A-YOLOM(s)表现尤为突出。然而,根据右侧图像的结果,我们的模型在检测远处车辆方面落后于YOLOP,尤其是在使用A-YOLOM(n)时。
在各种天气条件下,我们的模型始终提供更准确、更平滑的分割结果。然而,在不利天气条件下,我们的模型在检测远处和小目标方面的能力略逊于YOLOP。
C. 消融研究
在本小节中,我们展示了两个消融研究,以阐明我们提出的自适应连接的效果,以及分割颈部和头部对整体模型的影响。
-
自适应连接模块:为了评估我们提出的自适应连接模块的影响,我们比较了有无此模块的性能。具体来说,YOLOM(n) 和 YOLOM(s) 作为基线,代表具有不同骨干的两个不同的实验组。我们为它们精心设计了分割颈部结构,以满足特定分割任务的需求。然而,A-YOLOM(n) 和 A-YOLOM(s) 都包含自适应连接模块。它们的分割颈部结构完全相同,且没有经过精心设计。结果如表 \square 所示。在比较 A-YOLOM(n) 与 YOLOM(n) 时,我们发现检测性能和可行驶区域分割性能相当。然而,车道线准确率和 IoU 均显示出显著提升。同样,在比较 A-YOLOM(s) 与 YOLOM(s) 时,我们也观察到了同样的改进趋势。这些结果表明,我们的自适应连接模块可以自适应地连接特征,而无需手动设计,并可以获得与精心设计的分割头部相似或更好的性能,从而进一步提高了模型的通用性。
-
多任务模型和分割结构:为了评估多任务方法对每个单独任务的影响,以及我们提出的分割颈部和头部结构的性能,我们在分割任务领域内比较了YOLOv8(segda)、YOLOv8(segll)、YOLOv8(multi)和YOLOM(n)的性能和头部参数。YOLOM(n)与YOLOv8具有相似的骨干网络,使得这种比较公平且有意义。结果如表VI所示。YOLOv8(segda)和YOLOv8(segll)分别实现了可行驶区域和车道线分割任务。YOLOv8(multi)是一个集成的多任务学习模型,它将YOLOv8(segda)、YOLOv8(segll)和YOLOv8(det)的颈部和头部结构结合到一个共享的骨干网络中。我们观察到性能有显著提高。这表明多任务学习可以相互促进各个任务的性能。
与YOLOv8(multi)相比,YOLOM(n)具有我们为分割任务精心设计的颈部结构。此外,它还拥有一个明显更轻量级的头部结构,其复杂度仅为前者的0.008。这一显著改进源于我们独特的头部设计,它仅依靠一系列卷积层,直接输出掩码,而无需额外的protos信息。YOLOM(n)在可行驶区域和车道线任务的mIoU和IoU方面都取得了令人印象深刻的结果。此外,我们在车道线任务中提供了具有竞争力的准确性。这些结果证明了我们提出的颈部和头部创新以最小的参数和性能开销取得了值得称道的结果。
D. 真实道路实验
本节主要讨论在真实道路数据集上进行的实验。具体来说,我们使用行车记录仪捕获了多个视频,并将它们逐帧转换为图像,以便使用我们的模型和YOLOP进行预测。每个转换后的图像数据集包含1428张分辨率为1280x720的图像。这些图像涵盖了三种场景:高速公路、夜间和白天。图[7]展示了真实道路数据集的结果。然而,我们的模型始终保持相对稳定的性能,特别是A-YOLOM(s)。在所有任务中,A-YOLOM(s)的性能均优于YOLOP。同时,A-YOLOM(n)在检测任务上略逊于YOLOP,但在其他任务上表现良好。自动驾驶系统必须能够在不熟悉的场景中平稳运行,这一点至关重要。真实道路上的实验结果表明,我们的模型能够满足自动驾驶汽车在真实道路上的实际需求。
V. 结论
在本研究中,我们主要介绍了一种为实时自动驾驶应用设计的端到端轻量级多任务模型。多任务模型的优点在于其各个任务能够相互受益并相互促进,最终实现整体性能的提升。为了进一步增强模型的能力,我们集成了自适应拼接模块,并针对每种类型的任务提出了统一的损失函数,从而提高了我们模型的灵活性。
在BDD100k数据集上与其他先进的实时多任务方法相比,我们的模型不仅展示了卓越的视觉结果,还显示出了更高的每秒帧数(FPS)。较高的FPS归因于我们精简的分割头部设计,它优化了参数数量和推理时间。此外,真实道路数据集的评估结果强调了我们的模型在新环境中的鲁棒性,使其在众多竞争者中脱颖而出。
未来,我们计划将更多的自动驾驶任务整合到我们的模型中,并优化它以适应边缘设备的部署。