YOLOv4-5D:一种高效的自动驾驶物体检测器

1. 文章信息

本次介绍的文章是2021年3月份发表在IEEE Transactions on Instrumentation and Measurement的关于自动驾驶场景下的目标检测文章,文章题目为《YOLOv4-5D: An Effective and Efficient Object Detector for Autonomous Driving》

2. 摘要

自动驾驶汽车中,使用目标检测算法变得极为重要。高精度的目标检测和快速的推理速度是保证自动驾驶安全的关键。因此,必须考虑目标检测器的有效性和效率之间的平衡。文章提出了一种one-stage的目标检测框架,以提高检测精度,同时支持基于YOLOv4的真实实时操作。该框架中的骨干网是CSPDarknet53_dcn(P)。用变形卷积代替CSPDarknet53的最后一个输出层,以提高检测精度。为了进行特征融合,设计了一种新的特征融合模块pan++,并采用5个尺度检测层来提高小目标的检测精度。此外,文章还提出了一种优化的网络剪枝算法,以解决车载计算平台计算资源有限,无法满足算法实时性的问题。利用稀疏尺度因子的方法对现有的通道剪枝算法进行了改进。与YOLOv4相比,YOLOv4 - 5d在BDD数据集上平均精度提高了4.23%,在KITTI数据集上平均精度提高了1.68%。最后,通过对模型进行裁剪,在检测精度基本不变的情况下,yolov - 5d的推理速度提高了31.3%,内存仅为98.1 MB。然而,该算法能够以超过66帧/s (fps)的速度进行实时检测,并且在相同的帧数下比之前的算法具有更高的准确率。

3. 简介

近年来,深度学习已被广泛应用于各个领域,包括计算机视觉和自动驾驶。传感器和GPU计算单元的快速发展显著加快了深度学习算法的迭代速度。

自动驾驶汽车的主要功能是实时准确识别车辆周围的物体,以确保安全、正确的控制决策。一般来说,自动驾驶汽车使用各种传感器,如摄像头、激光雷达等,用于检测车辆、行人、交通灯、交通标志等物体。与其他传感器相比,现在的摄像机在探测物体方面更加精确,成本效益也更高。

基于深度学习的目标检测和语义分割算法在自动驾驶领域中已经变得非常重要。基于深度学习的算法可以在使用较少计算资源的前提下实现较高的检测精度,因此成为自动驾驶系统中必不可少的方法。针对自动驾驶汽车的目标检测算法需要满足以下两个条件。一是对道路目标的检测精度高。其次,实时检测速度对于车辆控制器的快速响应和减少延迟至关重要。基于CNN的目标检测算法可以分为两类。第一类是基于生成region proposal的两阶段检测算法,如Faster R-CNN和cascade R-CNN。两阶段探测器对目标的检测精度较高,但检测速度较慢。第二类是一阶段探测器,如SSD和YOLO,可以同时进行物体分类和边界盒回归,不需要生成region proposal,直接生成类对象的位置坐标。因此,一阶段探测器的检测速度能够满足实时性要求,但检测精度低于两级检测器。

以往的方法不能满足608 × 608及以上分辨率作为输入时对实时检测速度的要求,而608 × 608及以上分辨率作为输入是为了达到较高的精度不可或缺的。自动驾驶计算平台的计算资源有限,需要同时处理检测、跟踪、决策等多种传感和计算任务。因此,检测算法需要具有较小的内存占用率和计算资源占用率。自动驾驶应用的一个先决条件是使用超过30帧/秒。这表明,平衡检测精度和速度仍然是一个主要问题。此外,大多数传统的目标检测算法最关键的问题之一是大小目标的检测精度不能很好地平衡。通常,大的物体容易被检测到,而小的物体往往被检测器忽略。在自动驾驶的情况下,忽略小物体(交通灯、行人等)的检测是非常危险的,因为它会引起过度的反应,如意外刹车,从而降低驾驶的稳定性和效率,导致致命的事故。YOLOv4-5D中的特征融合模块是PAN++,它是在原PAN的基础上改进的,更适合于小目标的检测。然而,在上述算法中,YOLOv4并没有针对自动驾驶数据集进行优化。YOLOv4可以用一个推理来检测多个对象,呈现出非常快的检测速度。然而与两阶段方法相比,YOLOv4对小目标的准确度普遍较低。因此,在保持实时目标检测能力的同时,提高精度至关重要。为此,本文提出通过变形卷积的backbone建模和对YOLOv4检测模块的重新设计提高检测精度。同时,提出了一种优化的通道剪枝方法,可在车载计算平台上实时运行。

4. 相关工作

YOLOv4是对YOLO系列算法的进一步改进。YOLOv4的网络架构如下图所示。

YOLOv4-5D:一种高效的自动驾驶物体检测器_第1张图片

YOLOv4采用CSPDarknet53结构作为骨干,解决了推送过程中检测算法需要大量计算的问题。最突出的特性是以类似的方式在三个不同的尺度上进行检测,使得YOLOv4可以检测各种大小的对象。由于YOLOv4是一个全卷积网络,仅由YOLOv3那样的1 × 1和3 × 3的小型卷积滤波器组成,所以检测速度与YOLO和YOLOv2相等。YOLOv4的检测速度可以满足自动驾驶系统的实时性要求。然而,YOLOv4的精度,特别是对于小目标,仍然低于两阶段探测器。算法内存和计算资源占用较大,无法满足自动驾驶汽车对感知算法内存比例小、计算资源少的需求。

在真实的道路交通环境中,道路场景目标检测具有大量不同大小的小目标。一个典型的真实道路检测场景如下图所示。

YOLOv4-5D:一种高效的自动驾驶物体检测器_第2张图片

由于摄影测量中的透视畸变的存在,使得远处的物体变得更小,而探测小的物体是一个已知的难点问题。从上图中可以看出,场前的物体与右上方的交通标志大小相差约90倍。并且bbox大小的明显差异不仅发生在不同类型的对象之间,而且也发生在相同类的对象之间。在上图中,当车辆位于远视图时,交叉口对面的灰色车辆,与场景前方车辆的bbox区域存在显著差异。BDD数据集中对象检测bbox的大小分布如从下图所示。可以清楚地看到,大多数分布是由小物体组成的。

YOLOv4-5D:一种高效的自动驾驶物体检测器_第3张图片

上图揭示了研究自动驾驶场景下小目标高精度检测算法的意义。现有的检测网络由于道路检测场景中近远目标的bbox区域差异较大,无法满足对行车交通目标检测精度的要求。因此,需要一种道路检测模型,可以较好的处理大的和小的对象。

5. 方法

基于anchor的一阶段检测器通常由backbone、neck和用于物体分类和定位的head组成。文章对YOLOv4的详细结构进行了修改,并提出了一个用CSPDarknet53_dcn取代backbone的修改版本。这个修改后的版本在文章中被用作baseline。文章还对YOLOv4的特征融合模块进行了重新设计,设计了5种尺度的检测模块。改进后的检测算法被称为YOLOV4-5D,一种自动驾驶道路场景的多尺度实时检测算法。

A. Backbone

在YOLOv4中,首先使用CSPDarkNet-53提取不同尺度的feature map。CSPDarknet53可以解决大部分检测场景的特征提取任务。为了提高backbone在复杂流量环境下的特征提取能力,利用DCN (deformableconvolutional network)对骨干网进行优化。如下图所示,DCN使用一个可学习的偏移量来描述目标的特征方向,使得网络的接受域不局限于固定的范围,更能灵活地适应目标几何形状的变化。DCN有利于对复杂场景进行充分的检测。

YOLOv4-5D:一种高效的自动驾驶物体检测器_第4张图片

虽然DCN本身并没有显著增加模型中的参数数量和FLOPs,但DCN的有效性在许多检测模型中得到了验证。在实际应用中,多个DCN层增加了推理时间。因此,为了平衡效率和有效性,文章只在最后阶段用DCN替换3 × 3卷积层。这个修改后的主干被标记为CSPDarkNet53_dcn,DCN层在下图YOLOv4-5D框架图中用一个黑色三角形标记。

YOLOv4-5D:一种高效的自动驾驶物体检测器_第5张图片

B. Detection Neck

在YOLOv4中用SPP和PAN来增加网络的感受野,并建立一个特征图之间横向连接的特征金字塔。为了提高小目标的检测精度,设计了pan++作为特征融合模块。对于pan++,针对两个点实现了两个特征融合模块。其中一个模块充分利用了主干网的低层物理信息和高层语义信息;第二个模块用于适应新检测层引起的所需特征图的比例变化。在YOLOv4中,最大检测规模为79 × 79。在79 × 79的小尺度下,检测算法都不利于对小目标进行最终的位置信息回归。因此,文章提出的YOLOV4-5D中使用的最大比例尺特征图变为304 × 304,为小目标检测提供了重要的特征。如上面YOLOV4-5D的框架图,YOLOV4-5D网络结构输出五尺度检测图像,经过pan++。YOLOv4-5d与YOLOv4相比增加了152 × 152和304 × 304两个大型小目标探测器。

C. Detection Head

YOLOV4-5D的检测头非常简单。它由一个3 × 3卷积层和一个1 × 1卷积层组成,通过卷积层得到最终的预测结果。每个最终预测的输出通道为3(K + 5),其中K为类数。最终预测的每个位置都与三个不同的anchor相关联。在YOLOv4的三尺度检测头的基础上,根据上述相关设计增加了两大尺度检测层进行特征增强,即颈部检测。这两个大规模的检测层都用于小目标的检测。改进后的网络平衡了远距离小目标和大型目标的检测性能。

D. 网络剪枝

深度CNN所依赖的计算量和存储量严重限制了其在资源有限的平台上的部署。基于各种策略的剪枝算法可以降低网络权值的数量、计算复杂度和网络冗余度。然而,不同的数据结构和网络结构对不同的剪枝方法有不同的性能影响,这增加了剪枝方法选择的难度。特别是当某个卷积层中有太多的卷积核时(这通常意味着更多的冗余),网络训练会使卷积层形成特殊的空间几何结构,参数重要度评估方法将无法区分卷积核的重要度。Yolov4中卷积核的数目有很大的不同。最小的修剪层有32个卷积核,大部分有1024个卷积核。文章采用稀疏尺度因子的方法,避免了在冗余度较大的卷积层中,参数重要性评估方法无法有效区分卷积核的重要性的问题。

6. 实验及分析

实验使用KITTI和BDD数据集。KITTI数据集是自动驾驶研究中常用的数据集,BDD数据集是最新发布的自动驾驶数据集。KITTI数据集由7481张用于训练的图像和7518张用于测试的图像组成,其中包括汽车、自行车和行人三类。BDD数据集包括10个类,包括公共汽车、灯光、标识、人、自行车、卡车、摩托车、汽车、火车和骑手。构建多目标道路检测模型的目的是为了准确地检测出自然驾驶场景中的常见目标。因此,从100k图像中选取80k的标签图像,去掉火车的标注,将标签骑手、摩托车和自行车合并到标签骑手中。最后的训练集标签有七个类别:汽车、公共汽车、卡车、人、交通灯、交通标志和骑手。以70k图像作为训练集,10k作为验证集。实验在NVIDIA GTX 2080Ti上进行,环境为CUDA 10.0和cuDNN v10.0。

下表比较了YOLOv4和建议的YOLOv4 - 5d的性能。

YOLOv4-5D:一种高效的自动驾驶物体检测器_第6张图片

下表比较了本文算法与其他方法对BDD测试集的性能。从表中可以看出,提出的YOLOv4 - 5d的 mAP提高了4.23%,可以实现实时检测,与52.3帧/s的YOLOv4相比速度略有差异。

YOLOv4-5D:一种高效的自动驾驶物体检测器_第7张图片

最后采用基于通道的剪枝算法对YOLOV4-5D骨干网进行剪枝,并对简化模型进行微调,恢复模型的准确性。最终实验数据如下表所示。

YOLOv4-5D:一种高效的自动驾驶物体检测器_第8张图片

最后是检测结果的可视化,基线的检测结果和提出的算法在KITTI测试集上的表现如下图所示。

YOLOv4-5D:一种高效的自动驾驶物体检测器_第9张图片

7. 结论

目标检测算法具有较高的检测精度和实时检测速度,对自动驾驶汽车的安全性和实时控制至关重要。然而,目前的研究还没有解决平衡检测精度和检测速度的问题。同时,普遍欠缺对小目标的检测能力。为了解决这些问题,文章提出了一种目标检测算法,该算法在自动驾驶的精度和速度之间达到了最佳的权衡。利用可变形卷积对骨干网络进行优化,提高了骨干网络对几何变对象的特征提取能力。将检测颈设计为PAN++,并引入附加层,融合语义信息和位置信息。扩大了网络检测头的最大检测规模。在原有的三个较小的检测尺度的基础上,增加了两个大规模的检测头用于小目标的检测。文章是在YOLOv4中第一次尝试用可变形的卷积来建模主干,并重新设计检测模块。因此,文章提出的YOLOV4-5D提高了自动驾驶中对小目标的检测。此外,文章还提出了一种优化的网络剪枝算法,以解决由于车载计算平台的计算资源有限,无法满足算法实时性的问题。利用稀疏尺度因子的方法对现有的通道剪枝算法进行了改进。与YOLOv4相比,YOLOv4 - 5d在BDD数据集上的平均AP提高了4.23%,在KITTI数据集上的平均AP提高了1.68%。最后,通过对模型进行裁剪,在几乎不影响检测精度的情况下,yolov - 5d的推理速度提高了31.3%,内存仅为98.1 MB。然而,该算法能够以超过66帧/s的速度进行实时检测度。因此,文章提出的算法最适合于自动驾驶应用。该算法对交通标志、交通灯、车辆、人的检测精度分别提高了5.31%、2.2%、2.13%、1.9%,证明了yolov - 5d在BDD数据集上比KITTI数据集具有更好的小目标检测精度。在不影响大目标检测精度的前提下,在支持实时操作的前提下,大大提高了交通标志、交通灯等小目标的检测精度。所得到的结果和对比分析验证了该算法在精度和检测速度上的权衡,适用于自动驾驶。

8. Attention

如果你和我一样是轨道交通、道路交通、城市规划相关领域的,可以加微信:Dr_JinleiZhang,备注“进群”,加入交通大数据交流群!希望我们共同进步!

你可能感兴趣的:(算法,大数据,编程语言,python,计算机视觉)