算法 自动采集列表( 【干货】自动驾驶中的视觉感知模块(一))
优采云 发布时间: 2022-04-15 10:18算法 自动采集列表(
【干货】自动驾驶中的视觉感知模块(一))
1 简介
自动驾驶中的视觉感知模块通过图像或视频数据了解车辆周围环境,具体任务包括物体检测与跟踪(2D或3D物体)、语义分割(2D或3D场景)、深度估计、光流估计, ETC。
在这个文章中,我们首先介绍基于图像或视频的2D对象检测和跟踪,以及2D场景的语义分割。这些任务在自动驾驶中被广泛使用,已经有很多各种各样的评论文章,所以这里我只选择介绍一些经典算法,重点介绍上下文和方向。
自从2012年深度学习在图像分类任务上取得突破,迅速占领了图像感知的各个领域,所以下面的介绍也是基于深度学习算法。
2 目标检测2.1 两阶段检测
传统的图像目标检测算法大多是滑动窗口、特征提取和分类器的结合,如Haar特征+AdaBoost分类器、HOG特征+SVM分类器。这种方法的一个主要问题是需要为不同的目标检测任务手动设计不同的特征。因此,在深度学习兴起之前,特征设计是目标检测领域的主要增长点。
R-CNN[1]作为深度学习在目标检测领域的开创性工作,仍然有很多传统方法的影子。首先,Selective Search 替代了滑动窗口以减少窗口数量。第二个也是最重要的变化是使用卷积神经网络 (CNN) 来提取每个窗口的图像特征,而不是手工制作的特征设计。这里的CNN是在ImageNet上预训练的,对于一般图像特征的提取非常有效。最后利用SVM对每个窗口的特征进行分类,完成目标检测任务。
R-CNN的主要问题之一是选择性搜索得到的窗口数量重叠过多,导致特征提取部分有大量冗余操作,严重影响算法的运行效率(约2000个候选图片中的框,在 GPU 上运行时间也超过 10 秒)。
卷积神经网络
为了复用不同位置的特征,Fast R-CNN[2]提出先通过CNN提取图像特征,然后对选择性搜索得到的候选帧进行ROI Pooling,得到相同长度的特征向量。最后,使用全连接网络进行候选框分类和边界框回归。这样就避免了重叠候选框的冗余操作,大大提高了特征提取的效率。
与 R-CNN 相比,Fast R-CNN 在 VOC07 数据集上的 mAP 从 58.5% 提高到 70.0%,检测速度提高了约 200 倍。但是,Fast R-CNN 仍然使用选择性搜索来获取候选区域。这个过程还是比较慢的。处理一张图片大约需要2秒左右,对于实时性要求高的应用来说,这远远不够。
快速 R-CNN
既然选择性搜索是算法速度的瓶颈,那么自然而然会想到用神经网络来完成这一步是可能的吗?这个问题的答案是 Faster R-CNN [3]。它利用区域候选网络(RPN)根据特征图生成候选框。接下来的步骤和 Fast R-CNN 类似,都是 ROI Pooling 生成候选框的特征,然后使用全连接层进行分类和回归。
Faster RCNN中出现了一个重要的概念,即Anchor。特征图的每个位置都会生成不同大小和不同纵横比的anchors,作为object frame回归的参考。Anchor 的引入使得回归任务只需要处理相对较小的变化,因此网络的学习会更容易。
Faster RCNN是第一个端到端的物体检测网络,VOC07上的mAP达到73.2%,速度也达到了17FPS,接近实时。
更快的 R-CNN
随后的FPN[4](Feature Pyramid Network)在特征提取阶段进行了优化,使用类似于U-Shape网络的特征金字塔结构来提取多尺度信息,以适应不同大小的物体检测。
FPN2.2 单级检测
两阶段检测器需要处理大量的物体候选框,每个候选框通过ROI Pooling生成长度一致的特征。这个过程比较耗时,从而影响算法的整体速度。单级检测器的主要思想是使用全卷积网络在特征图的每个位置进行物体分类和边界框回归。这实际上相当于在每个位置生成一个候选框,但是由于省略了耗时的 ROI Pooling,只使用了标准的卷积操作,提高了算法的运行速度。
SSD[5]采用上述全卷积网络的思想,对多种分辨率的特征图进行物体检测,提高对物体尺度变化的适应能力。同时在特征图的每个位置使用不同尺度和纵横比的anchors进行边界回归。
在特征图的每个位置执行密集对象检测。虽然省略了ROI Pooling,但是会带来一个新的问题,就是正负样本的不平衡。密集采样导致负样本(非对象)的数量远大于正样本(对象)的数量。在训练中,大量易于分类的负样本产生的Loss占主导地位,而获得真正有价值的难分类样本。不如好好学习。
固态硬盘
为了解决这个问题,RetinaNet[6]提出了Focal Loss,它根据Loss的大小自动调整权重,而不是标准的Cross Entropy,让训练过程更加关注困难样本。在特征提取方面,RetinaNet也采用了FPN的结构。
焦点损失与交叉熵
最后不得不说一下YOLO[7]系列的检测器,这也是业界使用最广泛的算法,甚至是其中之一。YOLOv1采用卷积和Pooling相结合的方式提取特征,最终的特征图空间大小为7*7。与 SSD 和 RetinaNet 不同的是,YOLOv1 使用全连接层直接输出每个 7*7 位置的物体类别和帧,无需 Anchor 的辅助。在每个位置输出两个对象,并选择一个更有信心的对象。当场景中有很多小物体时,可能会丢失位置相似的物体,这也是YOLOv1的一大问题。
之后,YOLO 推出了四个改进版本(v2-v5),增强了特征提取网络,采用了多尺度特征图,使用 Anchor 和 IOU Loss 辅助帧回归,以及许多其他的 Tricks物体检测)。,大大提高了检测的准确率,在运行速度和部署灵活性方面依然保持了YOLO的一贯优势。
YOLO2.3 无 Anchor 检测
之前介绍的大部分方法都是使用Anchor来辅助对象框的回归。Anchor的参数需要手动设计。通常需要根据不同的检测任务设计不同的Anchor,影响算法的通用性。另外,为了覆盖任务中的所有对象,Anchor的数量会比较大,这也会对算法的速度产生一定的影响。
因此,如何避免使用 Anchor 或让网络自动学习 Anchor 参数受到越来越多的关注。此类方法一般将物体表示为一些关键点,CNN用于回归这些关键点的位置。关键点可以是对象框的中心点(CenterNet)、角点(CornerNet)或代表点(RepPoints)。
CenterNet [8] 使用多层卷积神经网络对输入图像进行处理,并将其转换为物体类别的 Heatmap,其上的 Peak 位置对应于物体的中心。中心点的特征用于边界框回归。整个网络可以完全通过卷积操作来实现,非常简洁。
作为中心点的对象
仅使用对象中心点的特征返回对象框有一定的局限性,因为中心点的特征有时不能很好地描述对象,尤其是当对象比较大的时候。CornerNet[9]通过卷积神经网络和Corner Pooling操作预测物体框的左上角和右下角,输出每个角点的特征向量,用于匹配属于同一物体的角点。
角网
无论是中心点还是角点,对象都表示为矩形框。这种表示方式虽然有利于计算,但没有考虑到物体的形状变化,而且矩形框还收录很多来自背景的特征,影响了物体识别的准确性。RepPoints [10] 提出将物体表示为一个代表点集,并通过可变形卷积适应物体的形状变化。点集最终转化为对象框,用于计算与人工标注的差异。
最后,目标检测领域的最新趋势是采用在自然语言处理(NLP)中取得巨大成功的Transformer结构。Transformer 是一个完全基于自注意力机制的深度学习网络,在大数据和预训练模型的帮助下,其性能超过了经典的递归神经网络方法。从 2020 年开始,Transformer 已应用于各种视觉任务,并取得了不错的效果。Transformer 可以提取 NLP 任务中单词的长期依赖关系(或上下文信息),这对应于图像中提取的像素的长期依赖关系(或扩展的感受野)。
DETR[11]是Transformer在目标检测领域的代表作。上面介绍的所有目标检测网络,无论是两阶段还是单段,无论是否使用 Anchor,都在图像空间进行密集检测。另一方面,DETR 将目标检测视为一个集合预测问题,直接输出稀疏目标检测结果。具体过程是先用CNN提取图像特征,再用Transformer对全局空间关系进行建模。最终输出通过二分图匹配算法与人工标注相匹配。DETR 通常需要更长的训练收敛时间。由于感受野的扩大,对大物体的检测效果更好,而对小物体的检测效果相对较差。
DETR2.4 性能对比
让我们比较一下上面描述的一些算法。准确率是通过 MS COCO 数据库上的 mAP 来衡量的,速度是通过 FPS 来衡量的。从下表的对比可以看出,YOLOv4无论是准确率还是速度都表现不错,是目前业界使用最广泛的模型。最新的DETR模型也有很好的准确率,未来应该会有更多的改进工作。这里需要说的是,由于在网络的结构设计上有很多不同的选择(比如不同的输入大小,不同的Backbone网络等),所以每种算法实现的硬件平台也不同,所以精度和速度不完全可比。,这里只列出一个粗略的结果供大家参考。
3 对象跟踪
在自动驾驶应用中,输入是视频数据,需要注意的物体很多,比如车辆、行人、自行车等。因此,这是一个典型的多目标跟踪任务(MOT)。对于MOT任务,目前最流行的框架是Tracking-by-Detection,其流程如下:
对象检测器在单帧图像上获得对象帧输出。
提取每个检测到的对象的特征,通常包括视觉特征和运动特征。
根据特征计算来自相邻帧的目标检测之间的相似度,以判断它们来自同一目标的概率。
来自相邻帧的对象检测被匹配,来自同一目标的对象被分配相同的 ID。
Tracking-by-Detection方法流程[12]
深度学习应用于上述所有四个步骤,但前两个步骤占主导地位。
第一步,深度学习的应用主要在于提供高质量的物体检测器。理论上,所有的物体检测器都可以用来提供检测框,但是由于检测的质量对于Tracking-by-Detection方法来说非常重要,所以一般会选择精度更高的方法,比如Faster R-CNN。SORT[13] 是这个方向的早期作品之一。作者使用 Faster R-CNN 代替 ACF 目标检测器,在 MOT15 数据库上将目标跟踪准确率指标(MOTA)的绝对值提高了 18.9%。SORT使用卡尔曼滤波来预测物体的运动(得到运动特征),使用匈牙利算法计算物体匹配。
第二步,深度学习的应用主要在于使用CNN提取物体的视觉特征。SORT 算法随后使用 CNN 进行特征提取,这种扩展算法称为 DeepSORT [14]。
DeepSORT 中的视觉特征提取网络
深度学习在第 3 步和第 4 步中使用较少。比较典型的方法之一是 Milan 等人提出的端到端对象跟踪算法。[15]。该算法采用RNN网络模拟贝叶斯滤波器完成主要检测工作,包括运动预测模块、状态更新模块和轨迹管理模块。状态更新模块可以完成对象匹配(Association)的工作,关联向量由一个LSTM提供。这种方法的跟踪效果不是很好,但是由于特征简单,速度可以达到165FPS(不包括物体检测模块)。
Milan等人提出的端到端目标跟踪网络。
除了Tracking-by-Detection,还有一个框架叫做Simultaneous Detection and Tracking,就是同时检测和跟踪。CenterTrack [16] 是该方向的代表性方法之一。CenterTrack 源自前面介绍的单段 Anchor-free 目标检测算法 CenterNet。与CenterNet相比,CenterTrack增加了前一帧的RGB图像和物体中心Heatmap作为附加输入,并为前一帧的Association增加了一个Offset分支。与之前介绍的多阶段 Tracking-by-Detection 策略相比,CenterTrack 以单个网络实现检测和匹配阶段,提高了 MOT 系统的速度。
CenterTrack4 语义分割
深度学习最早在语义分割中的应用比较简单,即对固定大小的图像块进行语义分类。这里对图像块进行分类的网络实际上是一些全连接层,所以块的大小需要固定。显然,这种简单粗暴的方式并不是最优的,尤其是不能有效利用空间上下文信息,这对于语义分割非常重要。
为了更好地提取上下文信息,神经网络需要更大的感受野。全卷积网络(FCN)[17]通过堆叠多个卷积层和下采样层不断扩展感受野并提取高层空间上下文特征,最终的特征图在反卷积上采样后恢复到原创图像每个位置的分辨率对应位置的语义分类。虽然下采样操作有利于上下文特征提取,减少计算量,但也存在一个问题,即空间细节信息的丢失,会影响最终语义分割结果在位置上的分辨率和正确性.
FCN
U-Net [18] 采用了类似的编码器-*敏*感*词*结构,但在相同分辨率的特征图之间增加了 Skip 连接。这样做的好处是可以同时保留高级上下文特征和低级详细特征,让网络通过学习自动平衡上下文和详细信息的权重。
网络
在语义分割中,上下文信息和细节信息都很重要。FCN 只关注上下文信息,而 U-Net 通过层间的 Skip 连接保留了这两种信息。语义分割领域的大部分后续工作都致力于更好地保留这两种信息。
Dilated/Atrous Convolution 修改标准卷积操作的卷积核以覆盖更大的空间位置。Atrous 卷积可以用来代替下采样。一方面可以保持空间分辨率,另一方面可以在不增加计算量的情况下扩大感受野,从而更好地提取空间上下文信息。
扩张卷积
DeepLab [18] 系列方法使用扩张卷积和 ASPP(Atrous Spatial Pyramid Pooling)结构对输入图像进行多尺度缩放。最后,利用传统语义分割方法中常用的条件随机场(CRF)对分割结果进行优化。CRF 作为后处理步骤单独训练。
深度实验室
最后介绍的方法是使用大卷积核。这是增加感受野的一种自然方式,如果步幅不变,卷积结果的空间分辨率不会受到影响。但是,大的卷积核会显着增加计算量,这就是为什么要使用 atrous 卷积。Large Kernel Matters[19] 这个文章提出将二维大卷积核(KxK)分解成两个一维卷积核(1xK和Kx1),二维卷积核的结果被建模为两个 1D 卷积结果的总和。这样做将计算量从 O(KxK) 减少到 O(K)。
一个 2D 卷积被分解为两个 1D 卷积
参考文献 [1] Girshick et al., Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation, 2014.
[2] Girshick,快速 R-CNN,2015.
[3] Ren 等人,Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks,2016.
[4] Lin 等人,用于对象检测的特征金字塔网络,2017.
[5] Liu 等人,SSD:Single Shot MultiBox Detector,2015.
[6] Lin et al., Focal Loss for Dense Object Detection, 2017.
[7] Redmon 等人,你只看一次:统一的实时对象检测,2015.
[8] Zhou et al., Objects as Points, 2019.
[9] Law 和 Deng,CornerNet:将对象检测为配对关键点,2019.
[10] Yang et al., RepPoints: Point Set Representation for Object Detection, 2019.
[11] Carion et al., End-to-End Object Detection with Transformers, 2020.
[12] Ciaparrone 等人,视频多对象跟踪中的深度学习:调查,2019.
[13] Bewley 等人,简单的在线和实时跟踪,2016.
[14] Wojke et al., Simple Online and Realtime Tracking with A Deep Association Metric, 2017.
[15] Milan et al., Online Multi-Target Tracking using Recurrent Neural Networks, 2017.
[16] Zhou et al., Tracking Objects as Points, 2020.
[17] Long 等人,用于语义分割的全卷积网络,2014.
[18] Chen et al., DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, andfully Connected CRFs, 2017.
[19] Peng et al.,Large Kernel Matters ——通过全局卷积网络改进语义分割,2017.