摘要

全景驾驶感知系统是自动驾驶的重要组成部分。高精度、实时的感知系统可以辅助车辆在行驶中做出合理的决策。我们提出了一个全景驾驶感知网络(YOLOP)来同时执行交通目标检测、可行驶区域分割和车道检测。它由一个用于特征提取的编码器和三个用于处理特定任务的解码器组成。我们的模型在具有挑战性的 BDD100K 数据集上表现非常出色,在准确性和速度方面在所有三个任务上都达到了最先进的水平。此外,我们通过消融研究验证了我们的多任务学习模型对联合训练的有效性。据我们所知,这是第一个可以在嵌入式设备 Jetson TX2(23 FPS)上实时同时处理这三个视觉感知任务并保持出色精度的工作。

为便于进一步研究,源代码和预训练模型分享在:https://github.com/hustvl/YOLOP

关键字:深度学习、多任务学习、交通目标检测、可行驶区域分割、车道检测

一、引言

最近,对自动驾驶的广泛研究揭示了全景驾驶感知系统的重要性。它在自动驾驶中发挥着重要作用,因为它可以从摄像头拍摄的图像中提取视觉信息,并协助决策系统控制车辆的动作。为了限制车辆的机动,视觉感知系统应该能够理解场景,然后为决策系统提供信息,包括:障碍物的位置、道路是否可行驶的判断、车道的位置等。全景驾驶感知系统中通常会涉及物体检测,以帮助车辆避开障碍物并遵守交通规则。还需要可行驶区域分割和车道检测,因为它们对于规划车辆的行驶路线至关重要。

许多方法分别处理这些任务。例如,Faster R-CNN [1] 和 YOLOv4 [2] 处理对象检测;提出了 UNet [3] 和 PSPNet [4] 来执行语义分割。 SCNN [5] 和 SAD-ENet [6] 用于检测车道。尽管这些方法取得了出色的性能,但一个接一个地处理这些任务比一次处理所有任务需要更长的时间。在自动驾驶汽车常用的嵌入式设备上部署全景驾驶感知系统时,应考虑有限的计算资源和延迟。另外,交通场景理解中的不同任务往往有很多相关的信息,比如上面提到的三个任务。如图 1 所示,车道往往是可行驶区域的边界,可行驶区域通常紧密围绕着交通目标。多任务网络更适合这种情况,因为(1)它可以通过一次处理多个任务而不是一个接一个地处理来加速图像分析过程(2)它可以在多个任务之间共享信息,这可以提高性能作为多任务网络的每个任务通常共享相同的特征提取主干。因此,探索自动驾驶中的多任务方法至关重要。

在这里插入图片描述
MultiNet [7] 使用编码器-解码器结构,该结构具有一个共享编码器和三个独立解码器,用于分类,对象检测和语义分割。它在这些任务上表现良好,并在 KITTI 可行驶区域分割任务上达到了最先进的水平。然而,分类任务在控制车辆方面不如车道检测那么重要。 DLT-Net [8] 将交通目标检测、可行驶区域分割和车道检测结合在一起,并提出上下文张量来融合解码器之间的特征图,以共享互信息。虽然具有竞争力的性能,但它并没有达到实时性。因此,我们为全景驾驶感知系统构建了一个高效的多任务网络,包括目标检测、可行驶区域分割和车道检测任务,并且可以在部署 TensorRT 的嵌入式设备 Jetson TX2 上实现实时。通过同时处理自动驾驶中的这三个关键任务,我们减少了全景驾驶感知系统的推理时间,将计算成本限制在一个合理的范围内,并提高了每个任务的性能。

为了获得高精度和快速的速度,我们设计了一个简单高效的网络架构。我们使用轻量级 CNN [9] 作为编码器从图像中提取特征。然后将这些特征图馈送到三个解码器以完成各自的任务。我们的检测解码器基于当前性能最佳的单级检测网络 [2],主要有两个原因:(1)单级检测网络比两级检测网络更快。 (2) 单级检测器的基于网格的预测机制与其他两个语义分割任务相关,而实例分割通常与基于区域的检测器相结合[10]。编码器输出的特征图融合了不同级别和尺度的语义特征,我们的分割分支可以利用这些特征图出色地完成像素级语义预测。

除了端到端的训练策略外,我们还尝试了一些交替优化范式,逐步训练我们的模型。一方面,我们可以将不相关的任务放在不同的训练步骤中,以防止相互限制。另一方面,首先训练的任务可以指导其他任务。所以这种范式有时虽然繁琐但效果很好。然而,实验表明我们的模型没有必要,因为端到端训练的一个可以表现得足够好。结果,我们的全景驾驶感知系统在单个 NVIDIA TITAN XP 上达到了 41 FPS,在 Jetson TX2 上达到了 23 FPS;同时,它在 BDD100K 数据集 [11] 的三个任务上达到了最先进的水平。

总之,我们的主要贡献是:(1)我们提出了一个高效的多任务网络,可以共同处理自动驾驶中的三个关键任务:物体检测、可行驶区域分割和车道检测,以节省计算成本,减少推理时间以提高每项任务的性能。我们的工作是第一个在嵌入式设备上实现实时性,同时在 BDD100K 数据集上保持最先进水平性能的工作。 (2) 我们设计了消融实验来验证我们的多任务处理方案的有效性。事实证明,这三个任务可以联合学习,无需繁琐的交替优化。

二、相关工作

在本节中,我们分别回顾了上述三个任务的解决方案,然后介绍了一些相关的多任务学习工作。我们只专注于基于深度学习的解决方案。

A. 交通目标检测

近年来,随着深度学习的飞速发展,涌现出许多突出的目标检测算法。目前主流的物体检测算法可以分为两阶段方法和一阶段方法。

两阶段方法分两步完成检测任务。首先获得区域提议,然后利用区域提议中的特征对对象进行定位和分类。区域提案的生成经历了几个发展阶段。 R-CNN [12] 创造性地尝试使用选择性搜索而不是滑动窗口来提取原始图像上的区域建议,而 Fast R-CNN [13] 则直接在特征图上执行此操作。 Faster-RCNN [1]中提出的RPN网络大大减少了时间消耗并获得了更高的准确率。在前者的基础上,R-FCN [14] 提出了一个全卷积网络,用卷积层代替全连接层,进一步加快检测速度。

SDD 系列 [15] 和 YOLO 系列算法是单阶段方法中的里程碑。这种算法同时进行边界框回归和对象分类。 YOLO [16] 将图片划分为 S×S 网格,而不是用 RPN 网络提取区域建议,显着加快了检测速度。 YOLO9000 [17] 引入了锚机制来提高检测的召回率。 YOLOv3 [18] 使用特征金字塔网络结构实现多尺度检测。 YOLOv4 [2] 通过细化网络结构、激活函数、损失函数和应用丰富的数据增强,进一步提高了检测性能。

B. 可行驶区域分割

由于深度学习的巨大成功,基于 CNN 的方法最近被广泛用于语义分割。 FCN [19] 首先将全卷积网络引入语义分割。它保留了 CNN 分类器的主干,并用 1×1 卷积层和上采样层替换了最终的全连接层。尽管跳过连接细化,其性能仍然受到低分辨率输出的限制。为了获得更高分辨率的输出,Unet[3] 构建了编码器-解码器架构。 DeepLab [20] 使用 CRF(条件随机场)来提高输出的质量,并提出了 atrous 算法来扩展感受野,同时保持相似的计算成本。 PSPNet [4] 提出了金字塔池模块来提取各种尺度的特征以提高其性能。

C. 车道检测

在车道检测方面,有很多基于深度学习的创新研究。 [21] 构建了一个双分支网络来对图像执行语义分割和像素嵌入。它进一步聚类双分支特征以实现车道实例分割。 SCNN [5] 提出了slice-by-slice 卷积,它使消息能够在一个层中跨行和列的像素之间传递,但是这种卷积非常耗时。 Enet-SAD [6] 使用自注意力蒸馏方法,使低级特征图能够从高级特征图学习。这种方法在保持模型轻量级的同时提高了模型的性能。 [22] 将车道检测定义为在图像的某些行中查找车道线位置集合的任务,这种基于行的分类使用全局特征。

D. 多任务方法

多任务学习的目标是通过多个任务之间的共享信息来学习更好的表示。尤其是基于CNN的多任务学习方法还可以实现网络结构的卷积共享。 Mask R-CNN [10] 扩展了 Faster R-CNN,增加了一个预测对象掩码的分支,有效地结合了实例分割和对象检测任务,这两个任务可以相互提升性能。 MultiNet[7]共享一个编码器和三个独立的解码器,同时完成场景分类、目标检测和驾驶区域分割三个场景感知任务。 DLT-Net [8] 继承了编码器-解码器结构,并在子任务解码器之间构建了上下文张量,以在任务之间共享指定信息。 [23]提出了车道区域分割和车道边界检测之间相互关联的子结构。同时,它提出了一种新的损失函数来将车道线限制在车道区域的外轮廓上,以便它们在几何上重叠。然而,这个先前的假设也限制了它的应用,因为它只适用于车道线紧紧包裹车道区域的场景。更重要的是,多任务模型的训练范式也值得思考。 [24] 指出只有当所有这些任务确实相关时,联合训练才是合适和有益的;否则需要采用交替优化。所以 Faster R-CNN [1] 采用实用的 4 步训练算法来学习共享特征。这种范式有时可能会有所帮助,但它是如此乏味。

三、方法

我们提出了一个简单高效的前馈网络,可以共同完成交通目标检测、可行驶区域分割和车道检测任务。如图 2 所示,我们的全景驾驶感知单次网络,称为 YOLOP,包含一个共享编码器和三个后续解码器来解决特定任务。不同解码器之间没有复杂和冗余的共享块,这减少了计算消耗并使我们的网络能够轻松地进行端到端的训练。
在这里插入图片描述

A. 编码器

我们的网络共享一个编码器,它由骨干网络和颈部网络组成。

1)Backbone:骨干网络用于提取输入图像的特征。通常,一些经典的图像分类网络作为主干。由于YOLOv4[2]在物体检测上的优异性能,我们选择CSPDarknet[9]作为主干,解决了优化[25]时梯度重复的问题。它支持特征传播和特征重用,减少了参数和计算量。因此,有利于保证网络的实时性。

2) Neck:Neck 用于融合 backbone 产生的特征。我们的 Neck 主要由空间金字塔池(SPP)模块[26]和特征金字塔网络(FPN)模块[27]组成。 SPP生成并融合不同尺度的特征,FPN融合不同语义层次的特征,使得生成的特征包含多尺度、多语义层次的信息。我们采用串联的方法来融合我们工作中的特征。

B. 解码器

我们网络中的三个头是三个任务的特定解码器。

1)Detect Head:与YOLOv4类似,我们采用基于anchor的多尺度检测方案。首先,我们使用一种称为路径聚合网络(PAN)的结构,一种自下而上的特征金字塔网络 [28]。 FPN自顶向下传递语义特征,PAN自底向上传递定位特征。我们将它们结合起来以获得更好的特征融合效果,然后直接使用PAN中的多尺度融合特征图进行检测。然后,多尺度特征图的每个网格将被分配三个不同长宽比的先验anchor,检测头将预测位置的偏移量和高度和宽度的缩放比例,以及每个类别的对应概率以及预测的置信度。

2) 可行驶区域分割&车道线分割:可行驶区域分割和车道线分割采用相同的网络结构。我们将 FPN 的底层馈送到分割分支,大小为 (W/8, H/8,256)。我们的细分分支非常简单。经过三个上采样过程,我们将输出特征图恢复到(W, H, 2)的大小,它代表了输入图像中每个像素对于可行驶区域/车道线和背景的概率。由于颈部网络中共享SPP,我们没有像其他人通常所做的那样添加额外的SPP模块来分割分支[4],这不会对我们的网络性能带来任何改善。此外,我们在上采样层中使用最邻近插值方法来降低计算成本而不是反卷积。因此,我们的分割解码器不仅获得了高精度的输出,而且在推理过程中也非常快。

C. 损失函数

由于我们的网络中有三个解码器,我们的多任务损失包含三个部分。至于检测损失 L d e t L_{det} Ldet,它是分类损失、目标损失和边界框损失的加权和,如公式(1)所示:
在这里插入图片描述
其中 L c l a s s L_{class} Lclass L o b j L_{obj} Lobj 采用的是 Focal Loss 损失 [29] ,用于减少分类良好的样本的损失,从而迫使网络专注于困难的样本。 L c l a s s L_{class} Lclass 用于惩罚分类, L o b j L_{obj} Lobj 用于惩罚一个预测的置信度。 L b o x L_{box} Lbox 采用的是 CIoU[30],它考虑了预测框和 ground truth 之间的距离、重叠率、尺度和纵横比的相似性。

可行驶区域分割的损失 L d a − s e g L_{da-seg} Ldaseg 和车道线分割 L l l − s e g L_{ll-seg} Lllseg 都包含具有 Logits L c e L_{ce} Lce 的交叉熵损失,旨在最小化网络输出像素和目标之间的分类误差。值得一提的是,IoU loss: L I o U = T N / ( T N + F P + F N ) L_{IoU}=TN/(TN+FP+FN) LIoU=TN/(TN+FP+FN) 添加到 L l l − s e g L_{ll-seg} Lllseg 它对于车道线稀疏类别的预测特别有效。 L d a L_{da} Lda L l l − s e g L_{ll-seg} Lllseg 分别定义为等式(2)、(3):
在这里插入图片描述
总之,我们的最终损失是三个部分的加权总和,如等式 (4) 所示。
在这里插入图片描述
其中 α1, α2, α3, γ1, γ2, γ3 可以调整以平衡总损失的所有部分。

D. 训练范式

我们尝试不同的范式来训练我们的模型。最简单的一种是端到端的训练,然后可以联合学习三个任务。当所有任务确实相关时,这种训练范式很有用。此外,还尝试了一些交替优化算法,逐步训练我们的模型。在每一步中,模型都可以专注于一个或多个相关的任务,而不管那些不相关的任务。即使不是所有的任务都是相关的,我们的模型仍然可以通过这种范式对每个任务进行充分的学习。算法 1 说明了一种逐步训练方法的过程。
在这里插入图片描述

四、实验

A. 设置

1)数据集设置:BDD100K 数据集[11]支持自动驾驶领域多任务学习的研究。拥有 10 万帧图片和 10 个任务的注释,它是最大的驾驶视频数据集。由于数据集具有地理、环境和天气的多样性,在 BDD100k 数据集上训练的算法足够健壮,可以迁移到新环境。因此,我们选择 BDD100k 数据集来训练和评估我们的网络。 BDD100K 数据集分为三部分,70K 图像的训练集,10K 图像的验证集,20K 图像的测试集。由于测试集的标签不是公开的,我们在验证集上评估我们的网络。

2)实现细节:为了提高我们模型的性能,我们根据经验采用了一些实用的数据增强技术和方法。

为了使我们的检测器能够获得更多交通场景中物体的先验知识,我们使用 k means 聚类算法从数据集的所有检测帧中获取先验锚点。我们使用 Adam 作为优化器来训练我们的模型,初始学习率 β1 和 β2 分别设置为 0.001、0.937 和 0.999。在训练过程中使用预热和余弦退火来调整学习率,旨在引导模型更快更好地收敛[31]。

我们使用数据增强来增加图像的可变性,从而使我们的模型在不同环境中具有鲁棒性。在我们的训练方案中考虑了光度畸变和几何畸变。对于光度失真,我们调整图像的色调、饱和度和值。我们使用随机旋转、缩放、平移、剪切和左右翻转来处理图像以处理几何失真。

3)实验设置:我们选择一些优秀的多任务网络和专注于单个任务的网络与我们的网络进行比较。 MultiNet 和 DLT-Net 都处理多个全景驾驶感知任务,并且在 BDD100k 数据集上的目标检测和可行驶区域分割任务中取得了很好的性能。 Faster-RCNN 是两阶段目标检测网络的杰出代表。 YOLOv5 是在 COCO 数据集上实现最先进性能的单级网络。PSPNet凭借其超强的聚合全局信息能力在语义分割任务上取得了出色的表现。我们在 BDD100k 数据集上重新训练上述网络,并将它们与我们在目标检测和可行驶区域分割任务上的网络进行比较。由于在 BDD100K 数据集上没有合适的现有多任务网络处理车道检测任务,我们将我们的网络与 Enet [32]、SCNN 和 Enet-SAD 这三个先进的车道检测网络进行了比较。此外,将联合训练范式的性能与多种交替训练范式进行了比较。此外,我们将经过训练以处理多项任务的多任务模型的准确性和速度与经过训练以执行特定任务的模型进行了比较。按照 [6],我们将 BDD100k 数据集中的图像从 1280×720×3 调整为 640×384×3。所有对照实验都遵循相同的实验设置和评估指标,所有实验均在 NVIDIA GTX TITAN XP 上运行。

B. 结果

在本节中,我们只是简单地端到端地训练我们的模型,然后将其与所有三个任务的其他代表性模型进行比较。

1)交通目标检测结果:由于Multinet和DLT-Net只能检测车辆,我们只考虑BDD100K数据集上5个模型的车辆检测结果。如表 I 所示,我们使用 Recall 和 mAP50 作为检测精度的评估指标。我们的模型在检测精度上超过了 Faster RCNN、MultiNet 和 DLT-Net,并且可以与实际上使用比我们更多技巧的 YOLOv5s 相媲美。此外,我们的模型可以实时推断。 YOLOv5s 比我们的快,因为它没有车道线段头和可行驶区域段头。交通目标检测的可视化如图 3 所示。

在这里插入图片描述
在这里插入图片描述
2)可行驶区域分割结果:本文将BDD100K数据集中的“区域/可行驶”和“区域/替代”类都归为“可行驶区域”,没有区别。我们的模型只需要区分图像中的可行驶区域和背景。 mIoU 用于评估不同模型的分割性能。结果示于表II中。可以看出,我们的模型分别优于 MultiNet、DLT-Net 和 PSPNet 19.9%、20.2% 和 1.9%。此外,我们的推理速度比他们快 4 到 5 倍。可行驶区域分割的可视化结果如图 4 所示。

在这里插入图片描述
在这里插入图片描述
3)车道检测结果:BDD100K数据集中的车道线用两条线标注,所以直接使用标注非常棘手。实验设置遵循 [6] 以便方便地进行比较。首先,我们根据两行注释计算中心线。然后,我们将训练集中的车道线宽度设置为8个像素,同时保持测试集的车道线宽度为2个像素。我们使用像素精度和车道的 IoU 作为评估指标。如表 III 所示,我们模型的性能大大超过了其他三个模型。车道检测的可视化结果如图5所示。
在这里插入图片描述
在这里插入图片描述

C. 消融研究

我们设计了以下两个消融实验来进一步说明我们方案的有效性。本节所有评价指标均与上述一致。

1)End-to-end vs Step-by-step:在表 IV 中,我们比较了联合训练范式与多种交替训练范式的性能。显然,我们的模型通过端到端的训练已经表现得非常好,所以不需要进行交替优化。然而,有趣的是,范式训练检测任务首先似乎表现更好。我们认为这主要是因为我们的模型更接近一个完整的检测模型,并且模型在执行检测任务时更难收敛。更重要的是,由三步组成的范式略胜于两步。 类似的交替训练可以运行更多的步骤,但我们观察到的改进可以忽略不计。
在这里插入图片描述
2)多任务 vs 单任务:为了验证我们的多任务学习方案的有效性,我们比较了多任务方案和单任务方案的性能。一方面,我们训练我们的模型同时执行 3 个任务。另一方面,我们训练我们的模型分别执行交通目标检测、可行驶区域分割和车道线分割任务。表 V 显示了这两种方案在每个特定任务上的性能比较。可以看出,我们的模型采用了多任务方案来实现性能接近专注于单个任务的性能。更重要的是,与单独执行每个任务相比,多任务模型可以节省大量时间。

在这里插入图片描述

五、结论

在本文中,我们提出了一个简单高效的网络,它可以同时处理物体检测、可行驶区域分割和车道检测三个驾驶感知任务,并且可以进行端到端的训练。我们的模型在具有挑战性的 BDD100k 数据集上表现异常出色,在所有三个任务上都达到或大大超过了最先进的水平。并且可以在嵌入式设备Jetson TX2上进行实时推理,保证我们的网络可以在真实场景中使用。

Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐