Abstract
Introduction
近年来,对自动驾驶的广泛研究揭示了全景驾驶员感知系统的重要性。它在自动驾驶中起着重要的作用,因为它可以从摄像头拍摄的图像中提取视觉信息,并帮助决策系统控制车辆的动作。为了限制车辆的机动性,视觉感知系统应该能够理解场景,然后向决策系统提供诸如:障碍物的位置、道路是否可驾驶的判断、车道的位置等信息。我们选择了三个任务:目标检测、可驾驶区域分割和车道检测,来构建我们的感知系统。目标检测是车辆避开障碍物和遵守交通规则的必要条件。可驾驶区域分割和车道检测也被需要,因为它们是规划车辆驾驶路线的关键。
对于这种全景驾驶感知系统,高精度和实时性是其中最关键的两个要求,这与自动驾驶汽车是否能够做出准确、及时的决策,以确保安全有关。然而,对于实际的自动驾驶系统,特别是先进的驾驶员辅助系统(ADAS),计算资源往往是边缘的和有限的。因此,在现实场景中同时考虑这两个需求是非常具有挑战性的。
许多方法都可以分别处理这些任务。例如,Faster R-CNN[1]和YOLOv4[2]处理目标检测;提出了ENet[3]和PSPNet[4]来进行语义分割。SCNN[5]和SAD-ENet[6]用于检测车道。尽管这些方法取得了出色的性能,但逐个处理这些任务比一次性处理它们需要更长的时间。当在自动驾驶汽车中常用的嵌入式设备上部署全视驾驶感知系统时,应考虑到有限的计算资源和延迟。此外,在交通场景理解中的不同任务往往有很多相关的信息。如图1所示,车道通常是可行驶区域的边界,而可行驶区域通常紧密地围绕着交通物体。多任务网络(multi-task network)更适合于这种情况,因为它可以通过同时处理多个任务而不是按顺序来加速图像分析过程。此外,由于多任务网络通常共享相同的特征提取主干,因此它可以在多个任务之间共享信息。因此,在自动驾驶中探索多任务方法至关重要。实际上,DLT-Net是第一个能够同时处理这三个任务,但没有达到所需速度的多任务网络。我们的工作旨在提出一种新的网络,可以实时解决这三个任务,并实现更有希望的精度。
为了解决全视驾驶感知的多任务问题,即交通目标检测、可驾驶区域分割和车道检测,在获得高精度、快速的同时,设计了一种简单高效的网络架构。我们使用一个轻量级的卷积神经网络(CNN)[7]作为编码器,从图像中提取特征。然后将这些特征映射提供给三个解码器,以完成它们各自的任务。我们的检测解码器是基于目前性能最好的单阶段检测网络[2],主要有两个原因: 1)单阶段检测网络比两阶段检测网络快;2)单级检测器基于网格的预测机制与其他两个语义分割任务的关系更密切,而实例分割通常与基于区域的检测器[8]相结合。此外,我们还在实验部分中验证了这两种观点。编码器输出的特征图结合了不同层次和尺度的语义特征,我们的分割分支可以利用这些特征图很好地完成像素级语义预测。
除了端到端训练策略之外,我们还尝试了一些交替的优化范式来逐步训练我们的模型。一方面,我们可以将不相关的任务放于不同的训练步骤,以防止相互限制。另一方面,首先被训练的任务可以指导其他任务。所以,这种范式有时很有效,但很麻烦。然而,实验表明,我们的模型没有必要使用,因为一端到一端训练可以表现得足够好。我们的全视驾驶感知系统在一个NVIDIA TITAN XP上达到41 FPS,在Jetson TX2上达到23 FPS;同时,它在BDD100K数据集[9]的三个任务上取得了最先进的水平。
综上所述,我们的主要贡献是: 1)我们提出了一种高效的多任务网络,它可以联合处理自动驾驶中的三个关键任务:目标检测、可驾驶区域分割和车道检测,以节省计算成本和减少推理时间。我们的工作是第一次在嵌入式设备上实现实时传输,同时在BDD100K数据集上保持最先进水平的实时性能。2)我们设计了消融实验来验证我们的多任务处理方案的有效性。证明了这三个任务可以共同学习,而不需要进行繁琐的交替优化。3)我们设计了消融实验,证明了基于网格的检测任务的预测机制与语义分割任务的预测机制更相关,为其他相关的多任务学习研究工作提供了参考。
Related work
在本节中,我们将分别回顾上述三个任务的解决方案,然后介绍一些相关的多任务学习工作。我们只关注基于深度学习的解决方案。
Traffic object detection
近年来,随着深度学习的快速发展,出现了许多突出的目标检测算法。目前主流的目标检测算法可分为两阶段方法和单阶段预测方法。
这两阶段的方法分两个步骤完成检测任务。首先得到区域建议(regional proposals ),然后利用区域建议的特征对目标进行定位和分类。区域提案的产生已经经历了几个发展阶段[1,10-12]。
ssd系列[13]和yolo系列算法是单阶段方法中的里程碑。该算法可同时进行边界盒回归(the bounding box regression)和目标分类(object classification )。YOLO[14]将图片划分为S×S网格,而不是使用RPN网络提取区域提案,这大大加快了检测速度。YOLO9000[15]引入了锚定机制来提高检测的召回率。YOLOv3[16]利用特征金字塔网络结构来实现多尺度检测。YOLOv4[2]通过细化网络结构、激活函数、损失函数和应用丰富的数据增强,进一步提高了检测性能。
Drivable area segmentation
由于深度学习的快速发展,许多基于cnn的方法在语义分割领域取得了很大的成功,可以应用于可驾驶区域分割任务,提供像素级的结果。FCN[17]首先引入了一个完全卷积的网络来进行语义分割。尽管进行了跳过连接的改进,但它的性能仍然受到低分辨率输出的限制。PSPNet[4]提出了金字塔池模块来提取不同规模的特征,以提高其性能。除了准确性之外,速度也是评估这项任务的一个关键因素。为了达到实时推理速度,ENet[3]减小了特征图的大小。近年来,多任务学习被引入来处理这一任务,EdgeNet[18]将边缘检测与可驾驶区域分割任务相结合,在不影响推理速度的情况下获得更准确的分割结果。
Lane detection
在车道检测方面,有大量基于深度学习[19]的创新研究,构建双分支网络对图像进行语义分割和像素嵌入。它进一步对双分支特征进行了聚类,实现了车道实例的分割。SCNN[5]提出了逐片卷积,它使消息能够在图层中跨行和列的像素之间传递,但这种卷积非常耗时。ENet-SAD[6]使用自注意蒸馏方法,使低级特征图能够从高级特征图中学习。该方法在保持模型较轻的同时,提高了模型的性能。
与那些特定于任务的网络相比,我们的多任务网络更有效。在保持兼容性能的同时,它比逐个执行这些任务需要更少的推理时间。
Multi-task approaches
多任务学习的目标是通过多个任务之间的共享信息来学习更好的表示。特别是基于cnn的多任务学习方法也可以实现网络结构的卷积共享。Mask R-CNN[8]扩展了Faster R-CNN,增加了一个预测目标掩码的分支,它有效地结合了实例分割和目标检测任务,这两个任务可以促进彼此的性能。LSNet[20]将目标检测、实例分割和姿态估计总结为位置敏感的视觉识别,并使用一个统一的解决方案来处理这些任务。MultiNet[21]通过一个共享的编码器和三个独立的解码器,同时完成场景分类、目标检测和驾驶区域分割的三个场景感知任务。DLT-Net[22]继承了编码器-解码器的结构,并在子任务解码器之间构造上下文张量,从而在任务之间共享指定的信息。Zhang等人提出了车道区域分割与车道边界检测之间相互关联的子结构。同时,提出了一种新的损失函数,将车道线约束在车道区域的外轮廓上,使它们发生几何重叠。然而,这个先前的假设也限制了它的应用,因为它只在车道线紧密包裹车道区域的情况下有效。此外,多任务模型的训练范式也值得思考。Kang等人[24]指出,只有当所有这些任务都能完成时,联合训练才是适当和有益的。否则,就需要采用交替优化的方法。因此,FasterR-CNN[1]采用了一种实用的4步训练算法来学习共享特征。这种模式有时可能很有用,但大多数情况下都是乏味的。
我们为我们的多任务网络选择了三个重要的和相关的任务。我们使用共享编码器构建这个网络,并使用端到端训练方案对其进行训练。此外,我们的网络在BDD100K数据集上取得了非凡的性能。
Method
我们提出了一种简单、高效的前馈网络,可以同时完成交通目标检测、可驾驶区域分割和车道检测任务。如图2所示,我们的全视驱动感知单镜头网络,称为你只看一次全视驱动(YOLOP),包含一个共享的编码器和三个后续的解码器来解决特定的任务。在不同的解码器之间没有复杂和冗余的共享块,这减少了计算消耗,并允许我们的网络易于端到端训练。我们在第4.3.4节中阐述了我们的方法的各种设计选择
Encoder
我们的网络共享一个编码器,它由一个主干网络和一个颈部网络组成。
Backbone
利用主干网络提取输入图像的特征。通常,一些经典的图像分类网络作为骨干。由于YOLOv4[2]在目标检测中杰出的性能,我们选择CSPDarknet[7]作为骨干,解决了优化[25]过程中的梯度复制问题。它支持特性传播和特性重用,从而减少了参数和计算的数量。因此,它有利于保证网络的实时性能。
Neck
颈部被用来融合由主干产生的特征。我们的颈部主要由空间金字塔池(SPP)模块[26]和特征金字塔网络(FPN)模块[27]组成。SPP生成并融合不同尺度的特征,FPN融合不同语义级别的特征,使生成的特征包含多个尺度和多个语义级信息。我们在工作中采用了串联的方法来融合特征。
Decoders
我们网络中的三个头是这三个任务的特定解码器。
Detection head
与YOLOv4类似,我们采用了一种基于锚定的多尺度检测方案。首先,我们使用一种称为路径聚合网络path aggregation network (PAN)的结构,一个自下而上的特征金字塔网络[28]。FPN自上而下传输语义特性,PAN自下而上传输位置特性。我们将它们结合起来,获得更好的特征融合效果,然后直接利用PAN中的多尺度融合特征图进行检测。然后,多尺度特征图的每个网格将分配三个之前锚不同的纵横比,和检测头将预测位置的偏移和缩放的高度和宽度,以及每个类别的概率和相应的置信度预测。
Drivable area segment head & lane line segment head
可驾驶区域段头部和车道分割头部采用相同的网络结构。我们将FPN的底层提供给分割分支,大小为。经过三次上采样过程后,我们将输出特征映射恢复到的大小,它表示输入图像中每个像素的可驱动区域/车道线和背景的概率。由于颈部网络中共享SPP,我们不像其他网络通常做[4]那样添加额外的SPP模块来分割分支,这并没有提高我们网络的网络性能。此外,我们在上采样层中使用最近邻插值方法来降低计算成本,而不是进行反卷积。因此,我们的段解码器不仅获得了较高的精度输出,而且在推理过程中也非常快。
Loss function
由于在我们的网络中有三个解码器,我们的多任务损失包含三个部分。对于检测损失,是分类损失、目标损失和边界框(bounding box )损失的加权和,如式(1)所示:
其中和为焦点损失[29],用于减少分类良好的样本的损失,从而迫使网络集中于困难的样本。用于惩罚分类和用于一个预测的置信度。是[30],它考虑了预测框与地面真值(ground truth)之间的距离、重叠率、尺度相似度和纵横比。
可驾驶区域分割和车道线分割的损失都包含了对数交叉熵损失,旨在最小化网络输出像素与目标之间的分类误差。值得一提的是,在添加了交并比(IoU):,因为它对车道线的稀疏类别的预测特别有效。和分别定义为(2)和(3)。
总之,我们的最终损失是这三个部分的加权和,如(4)所示。
其中、、、、、可以调整平衡总损失的所有部分。
Training paradigm
Experiments
Setting
Dataset setting
BDD100K数据集[9]支持自主驾驶领域的多任务学习的研究。它拥有100K帧的图片和10个任务的注释,是最大的驾驶视频数据集。此外,由于数据集具有地理、环境和天气的多样性,在BDD100K数据集上训练的算法足够鲁棒,可以迁移到新的环境。因此,我们选择了BDD100K数据集来训练和评估我们的网络。BDD100K数据集有三个部分,一个包含70K图像的训练集,一个包含10K图像的验证集,和一个包含20K图像的测试集。由于测试集的标签不是公开的,所以我们在验证集中评估我们的网络。
Implementation details
为了提高我们的模型的性能,我们根据经验采用了一些实际的数据增强技术和方法。
为了使我们的检测器能够获得交通场景中物体的更多的先验知识,我们使用k-means聚类算法从数据集的所有检测帧中获得先验锚点。我们使用Adam作为优化器来训练我们的模型,初始学习率、和分别设置为0.001、0.937和0.999。在训练过程中,使用Warm-up 预热和cosine annealing 余弦退火来调整学习速率,使模型收敛得更快、更好[31]。
我们使用数据增强来增加图像的可变性,从而使我们的模型在不同的环境中具有鲁棒性。此外,在我们的训练方案中还考虑了光度畸变和几何畸变。对于光度畸变,我们会调整图像的色调、饱和度和值。我们使用随机旋转、缩放、平移、剪切和左右翻转来处理图像来处理几何畸变。
Experimental setting
Experimental results
Traffic object detection results
Drivable area segmentation results
PSPNet与YOLOP的结果比较如图6所示。PSPNet和YOLOP在这项任务中都表现良好。但YOLOP在分割车辆或车道线附近的边缘区域方面明显更好。我们认为这主要是因为其他两个任务为这个任务提供了边缘信息。同时,YOLOP犯的意外错误较少,如将对面车道区域错误判断为可驾驶区域。
图8为ENet-SAD与YOLOP的车道线检测结果的比较。YOLOP的分割结果比ENet-SAD更准确和连续。有了其他两个任务共享的信息,YOLOP不会将一些车辆所在或可驾驶的区域误认为车道线,但ENet-SAD总是这样做。
Ablation studies
我们设计了以下三个烧蚀实验,以进一步说明我们的方案的有效性。本节中的所有评估指标都与上述指标一致。
End-to-end versus step-by-step
Multi-task versus single-task
Region-based versus grid-based
验证了基于网格的预测机制比基于区域的预测机制与两个语义分割任务更相关的观点。我们扩展了Faster-RCNN,通过添加两个语义段头,以像我们的模型一样并行执行三个任务,我们称这个新的模型为R-CNNP。我们训练YOLOP和R-CNNP 1)分别执行一个检测任务和两个分割任务,2)同时执行三个任务。在上述两个实验中,这两个分割任务都是联合训练的,因为不需要考虑它们之间的交互作用。所有实验设置均相同,结果见表6所示。在RCNNP框架中,多任务训练的性能比单独训练检测任务和语义分割任务要差得多。显然,在RCNNP框架中结合了两种任务冲突。但是,在我们的YOLOP框架中没有这样的问题;多任务训练的性能与只关注检测或语义分割任务相同。因此,我们认为这是由于YOLOP的检测头和其他两个语义分割头一样,直接对编码器输出的整个特征图执行全局分类或回归任务,因此它们在预测机制方面是相似和相关的。然而,R-CNNP的检测头需要首先选择区域建议(region proposals ),然后对每个提案的特征图进行预测,这与语义分割的全局预测机制有很大的不同。此外,R-CNNP在推理速度方面远远落后于YOLOP。因此,我们的框架是联合训练检测和分割任务的一个更好的选择。
The ablations of YOLOP in different experimental settings
我们取消了关于网络架构和数据增强方法的各种设计选择。我们在表7中报告了所有的消融结果。然后,我们分别比较了使用Resnet50[32]和CSPDarknet作为网络骨干的性能。包括FPN、PAN、SPP模块和CSPDarknet骨干,我们的网络取得了轻微更好的性能和更快的速度。此外,我们发现目标检测任务从数据增强中获益良多。显然,FPN模块是至关重要的,这为所有三个任务带来了巨大的改进。此外,通过向检测分支中添加一个PAN模块,提高了目标检测任务的性能。最后,当在网络颈部添加共享模块时,这三个任务的性能都稳步提高。但是,向两个段分支中添加两个额外的SPP模块并不能像预期的那样提高性能,而且很耗时。因此,我们的模型最终采用了倒数第二行的设置。
The results of YOLOP in different photometric scenes
所有的光度测量环境都是自动驾驶的重要组成部分。因此,我们报告了我们的YOLOP模型在不同光度场景中的定量结果。如表8所示,我们的YOLOP模型在不同的光度场景中的性能是稳健的。此外,即使在极具挑战性的场景中,比如在晚上,我们的YOLOP模型仍然保持着相对稳定的性能。