谈谈自动驾驶的2D和3D视觉感知算法;height:384px;"data-type="inline">2Dvisualperception在这一节中,我们从自动驾驶中广泛使用的几个任务开始介绍2D视觉感知算法,包括基于图像或视频的2D目标检测和跟踪,以及二维场景的语义分割,近年来深度学习已经渗透到视觉感知的各个领域,并取得了不错的效果,因此,我们整理了一些经典的深度学习算法。1.目标检测1.1两阶段检测Two-stage是指实现检测有两个过程,一个是提取物体区域;另一个是对该区域进行CNN分类识别;因此,“两阶段”也称为基于候选区域的目标检测(Regionproposal).代表算法有R-CNN系列(R-CNN,FastR-CNN,FasterR-CNN)等.FasterR-CNN是第一个端到端的检测网络.第一阶段利用一个区域候选网络(RPN)based在特征图上面生成候选框,使用ROIPooling对齐候选特征的大小;第二阶段,全连接层用于细化分类和回归。这里提出Anchor的思想,降低计算难度,提高速度。featuremap的每个位置都会生成一个不同大小和纵横比的Anchor作为objectframeregression的参考。Anchor的引入使得回归任务只需要处理比较小的变化,网络的学习会更加容易。下图是FasterR-CNN的网络结构图。CascadeRCNN的第一阶段与FasterR-CNN完全相同,第二阶段使用多个RoiHead层进行级联。后续的一些工作多是围绕上述网络的一些改进或前人工作的混合,很少有突破。.1.2单阶段检测与两阶段算法相比,单阶段算法只需提取一次特征即可实现目标检测,其算法速度较快,总体准确率略低。这类算法的先驱是YOLO,其次是SSD,Retinanet依次对其进行改进,而提出YOLO的团队将这些有助于提高性能的tricks融入到YOLO算法中,进而提出了四个改进版本YOLOv2~YOLOv5。虽然预测精度不如两阶段目标检测算法,但由于运行速度更快,YOLO成为了业界的主流。下图是YOLOv3的网络结构图。1.3Anchor-freedetection(无锚点检测)此类方法一般将物体表示为一些关键点,利用CNN返回这些关键点的位置。关键点可以是物体框的中心点(CenterNet)、角点(CornerNet)或代表点(RepPoints)。CenterNet将目标检测问题转化为中心点预测问题,即用目标的中心点表示目标,通过预测目标中心点的偏移量和宽度得到目标的矩形框。Heatmap代表分类信息,每个类别都会生成一个单独的Heatmap图。对于每个Heatmap,当某个坐标包含目标的中心点时,就会在目标处生成一个关键点。我们使用高斯圆来表示整个关键点。具体细节如下图所示。RepPoints提出将一个物体表示为一个代表点集,通过可变形卷积来适应物体的形状变化。点集最终被转换为对象框,用于计算与手动注释的差异。1.4Transformerdetection无论是单阶段还是两阶段目标检测,是否使用Anchor,都没有很好地利用attention机制。针对这种情况,RelationNet和DETR利用Transformer将注意力机制引入目标检测领域。RelationNet利用Transformer对不同目标之间的关系进行建模,将关系信息融入到特征中,实现特征增强。DETR提出了一种新的基于Transformer的目标检测架构,开启了目标检测的新纪元。下图是DETR的算法流程。首先使用CNN提取图像特征,然后使用Transformer对全局空间关系进行建模。最后,将得到的输出通过二分图匹配算法与人工标注进行匹配。下表中的准确率以MSCOCO数据库上的mAP为指标,而速度则以FPS衡量。与上述算法相比,在网络结构设计上有很多不同的选择(例如不同的输入大小,不同的Backbone网络等),每个算法的实现硬件平台也不同,所以准确率和速度上并不完全可比性,这里只是一个粗略的结果,供大家参考。2.目标跟踪在自动驾驶的应用中,输入的是视频数据,需要关注的目标有很多,比如车辆、行人、自行车等等。因此,这是一个典型的多目标跟踪任务(MOT)。对于MOT任务,目前最流行的框架是Tracking-by-Detection,其过程如下:①目标检测器在单帧图像上得到目标帧输出;②提取每个检测到的目标的特征,通常包括视觉特征和运动特征;③根据特征计算来自相邻帧的目标检测之间的相似度,以确定它们来自同一目标的概率;④匹配相邻帧中的目标检测并将它们分配给来自相同目标相同ID的对象。以上四步都应用了深度学习,但前两步是主要的。在步骤1中,深度学习的应用主要是提供高质量的目标检测器,因此一般会选择准确率较高的方法。SORT是一种基于FasterR-CNN的目标检测方法,采用卡尔曼滤波算法+匈牙利算法,大大提高了多目标跟踪的速度,同时达到了SOTA的精度。在实际应用中也是应用广泛的一种。算法。在步骤2中,深度学习的应用主要在于利用CNN提取物体的视觉特征。DeepSORT最大的特点是加入了外观信息,借用ReID模块提取深度学习特征,减少ID切换次数。整体流程图如下:另外,还有一个框架SimultaneousDetectionandTracking。比如具有代表性的CenterTrack,它起源于之前介绍过的单阶段Anchor-free检测算法CenterNet。与CenterNet相比,CenterTrack增加了前一帧的RGB图像和物体中心的Heatmap作为附加输入,并为前后帧的Association增加了一个Offset分支。与Tracking-by-Detection的多阶段相比,CenterTrack用网络实现了检测和匹配阶段,提高了MOT的速度。3.语义分割语义分割用于自动驾驶的车道线检测和可行驶区域检测任务。代表性算法有FCN、U-Net、DeepLab系列等。DeepLab使用dilatedconvolution和ASPP??(AtrousSpatialPyramidPooling)结构来处理多尺度输入图像。最后,利用传统语义分割方法中常用的条件随机场(CRF)对分割结果进行优化。下图是DeepLabv3+的网络结构。近年来,STDC算法采用了类似于FCN算??法的结构,去除了U-Net算法复杂的decoder结构。但同时,在网络下采样的过程中,利用ARM模块不断融合来自不同层特征图的信息,因此也避免了FCN算法只考虑单个像素关系的缺点。可以说,STDC算法在速度和精度之间取得了很好的平衡,能够满足自动驾驶系统的实时性要求。算法流程如下图所示。3D视觉感知在本节中,我们将介绍自动驾驶中必不可少的3D场景感知。因为深度信息、目标的三维尺寸等在2D感知中是无法获取的,而这些信息是自动驾驶系统正确判断周围环境的关键。获取3D信息最直接的方式就是使用LiDAR。但激光雷达也有其缺点,如成本高、车规级产品难以量产、受天气影响较大等。因此,单纯基于相机的3D感知仍然是一个非常有意义和有价值的研究方向。接下来我们整理一些基于单目和双目的3D感知算法。1.单目3D感知基于单个相机图像感知3D环境是一个病态问题,但可以通过几何假设(例如地面上的像素)、先验知识或一些附加信息(例如深度)来辅助估计)。本次,我们将从自动驾驶的两个基本任务(3D目标检测和深度估计)出发介绍相关算法。1.13D目标检测表示转换(伪激光雷达):视觉传感器在检测周围其他车辆时,通常会遇到遮挡、无法测距等问题。透视图可以转换为鸟瞰图表示。这里介绍两种转换方法。一种是逆透视映射(IPM),它假设所有像素都在地面上并且相机的外部参数是准确的。这时可以利用Homography变换将图像转化为BEV,然后利用基于YOLO网络的方法检测目标的groundingframe。.第二种是OrthogonalFeatureTransform(OFT),它使用ResNet-18提取透视图像特征。然后,通过在投影的体素区域上累积基于图像的特征来生成基于体素的特征。然后垂直折叠体素特征以产生正交地平面特征。最后,另一个类似于ResNet的自顶向下网络用于3D对象检测。这些方法只适用于靠近地面的物体,如车辆和行人。对于交通标志、红绿灯等非地面目标,可以通过深度估计生成伪点云进行3D检测。伪激光雷达首先利用深度估计的结果生成点云,然后直接应用基于激光雷达的3D目标检测器生成3D目标框。算法流程如下图所示,关键点和3D模型:待检测目标如车辆、行人由于其大小和形状相对固定且已知,这些可以作为先验知识估计物体的3D信息目标。DeepMANTA是这方面的开创性作品之一。首先,利用FasterRNN等一些目标检测算法得到2D目标框,同时检测目标的关键点。然后,将这些2D物体框和关键点与数据库中的各种3D车辆CAD模型进行匹配,选择相似度最高的模型作为3D物体检测的输出。MonoGRNet提出将单目3D目标检测分为四个步骤:2D目标检测、实例级深度估计、投影3D中心估计和局部角点回归。算法流程如下图所示。这些方法都假设目标有一个相对固定的形状模型,这对车辆来说通常是令人满意的,但对行人来说则相对困难。2D/3D几何约束:对3D中心和粗略实例深度的投影进行回归,并使用两者来估计粗略的3D位置。开创性工作是Deep3DBox,它首先使用2D对象框内的图像特征来估计对象大小和方向。然后,通过2D/3D几何约束求解中心点的3D位置。该约束是3D目标框在图像上的投影被2D目标框紧紧包围,即在2D目标框的每一侧至少可以找到3D目标框的一个角点。中心点的3D位置可以通过将先前预测的大小和方向与相机的校准参数相结合来获得。2D和3D对象框之间的几何约束如下图所示。ShiftR-CNN在Deep3DBox的基础上,结合之前得到的2D目标框、3D目标框和相机参数作为输入,使用全连接网络预测更准确的3D位置。直接生成3DBox:这类方法从稠密的3D目标候选框开始,通过2D图像上的特征对所有候选框进行打分,得分最高的候选框作为最终输出。有些类似于目标检测中的传统滑动窗口方法。有代表性的Mono3D算法首先根据物体的先验位置(z坐标在地面上)和大小生成密集的3D候选框。这些3D候选框投影到图像坐标后,通过融合2D图像上的特征进行打分,再由CNN进行两轮打分得到最终的3D目标框。M3D-RPN是一种基于Anchor的方法,它定义了2D和3DAnchor。2DAnchor是通过对图像进行密集采样得到的,3DAnchor是由训练集数据的先验知识(比如目标实际大小的均值)决定的。M3D-RPN也同时使用标准卷积和深度感知卷积。前者具有空间不变性,后者将图像行(Y坐标)分成多个组,每个组对应不同的场景深度,由不同的卷积核处理。上述密集采样方法的计算量非常大。SS3D使用更高效的单阶段检测,包括用于输出图像中每个相关对象的冗余表示和相应的不确定性估计的CNN,以及3D边界框优化器。FCOS3D也是一种单阶段检测方法。回归目标增加了一个额外的2.5D中心(X,Y,Depth),通过将3D目标框的中心投影到2D图像上得到。1.2深度估计无论是上述的3D目标检测,还是自动驾驶感知的另一个重要任务——语义分割,从2D到3D,或多或少都应用于稀疏或密集的深度信息。单目深度估计的重要性不言而喻。它的输入是一幅图像,输出是由每个像素对应的场景深度值组成的一张同样大小的图像。输入也可以是视频序列,利用相机或物体运动带来的附加信息来提高深度估计的准确性。与监督学习相比,单目深度估计的无监督方法不需要构建极具挑战性的实值数据集,实现难度也更低。单目深度估计的无监督方法可分为基于单目视频序列和基于同步立体图像对两种类型。前者建立在移动相机和静止场景的假设之上。在后一种方法中,Garg等人。首次尝试同时使用立体校正后的双目图像对进行图像重建。通过双目定位得到左右视图的位姿关系,得到了比较理想的效果。在此基础上,戈达尔等人。使用左右一致性约束进一步提高准确性。但是,在逐层提取高级特征增加感受野的同时,特征分辨率也在降低,粒度不断丢失,影响提供深度细节处理和边缘清晰度。为了缓解这个问题,Godard等人。引入了全分辨率多尺度损失,有效减少了低纹理区域黑洞和纹理复制造成的伪影。然而,这种准确性的提高仍然有限。最近一些基于Transformer的模型相继出现,旨在获得全阶段的全局感受野,这也非常适合密集的深度估计任务。在有监督的DPT中,提出使用Transformer和多尺度结构来同时保证预测的局部精度和全局一致性。下图是网络结构图。2.双目3D感知双目视觉可以解决透视变换带来的模糊性,所以理论上可以提高3D感知的准确性。但是双目系统对硬件和软件的要求比较高。在硬件方面,需要两个精确配准的摄像头,需要保证车辆在行驶过程中始终配准正确。在软件方面,该算法需要同时处理两个摄像头的数据,计算复杂度高,算法的实时性难以保证。与单眼相比,双眼工作相对少见。接下来也将从3D目标检测和深度估计两个方面做简单介绍。2.13D物体检测3DOP是一种两阶段检测方法,是FastR-CNN方法在3D领域的扩展。首先利用双目图像生成深度图,然后将深度图转化为点云再量化为网格数据结构,作为输入生成3D目标的候选框。类似于之前介绍的Pseudo-LiDAR,将密集的深度图(从单目、双目甚至是低线LiDAR)转化为点云,然后将算法应用于点云目标检测领域。DSGN使用立体匹配构建平面扫描体并将其转换为3D几何体,以便对3D几何体和语义信息进行编码。它是一个端到端的框架,可以提取用于立体匹配的像素级特征和用于对象识别的高级特征。特征,并且可以同时估计场景深度和检测3D对象。StereoR-CNN扩展了用于立体输入的FasterR-CNN,以同时检测和关联左右视图中的对象。在RPN之后添加额外的分支来预测稀疏关键点、视点和对象尺寸,并结合左右视图中的2D边界框来计算粗略的3D对象边界框。然后,通过使用左右感兴趣区域的基于区域的光度对齐来恢复准确的3D边界框。下图是它的网络结构。2.2深度估计双目深度估计的原理很简单,就是根据左右视图上同一3D点之间的像素距离d(假设两台相机保持相同的高度,所以只需要距离在左右视图上)考虑水平方向),即视差,相机的焦距f,和两个相机之间的距离B(基线长度)来估计3D点的深度,公式如下,深度可以通过估计视差来计算。因此,所有需要做的就是为每个像素在另一幅图像上找到一个匹配点。对于每一个可能的d,可以计算出每个像素点的匹配误差,从而得到三维误差数据CostVolume。通过CostVolume,我们很容易得到每个像素点的视差(对应最小匹配误差的d),从而得到深度值。MC-CNN使用卷积神经网络来预测两个图像块的匹配度,并用它来计算立体匹配成本。通过基于交集的成本聚合和半全局匹配来细化成本,然后进行左右一致性检查以消除遮挡区域中的错误。PSMNet提出了一种不需要任何后处理的立体匹配端到端学习框架,引入了金字塔池化模块,将全局上下文信息纳入图像特征,并提供堆叠沙漏3DCNN进一步加强全局信息。下图是它的网络结构。
