[ADAS预研笔记]基于深度学习的自动驾驶视觉感知算法研究

摄像头感知基本原理

摄像头感知的基本原理即从输入图像中获取特征,并将这些特征用于感知任务,其模型训练步骤可结合现代深度学习算法结构归纳如下:

  • 输入层输入

  • backbone进行特征提取

  • (neck进行特征的融合与增强)

  • head进行针对性地结果输出并计算损失loss

  • 根据loss反向传播计算修正模型并进行下一轮的前向传播计算:backbone+(neck)+head

  • 若loss达到设定阈值则结束学习

以YOLOv5的结构为例,其中:

backbone由许多卷积模块组成,卷积模块是各个算法的区别所在,如ResNet的残差模块,YOLOv5的C3模块、CBS模块等,卷积模块中可能包含的操作有:

  • 卷积层(Convolutional Layer):由n个卷积核对前一层输入做卷积运算,获得特征图像(feature maps),不同的卷积核可以得到不同的特征图像;
  • 激活函数(Activation Function):增加神经网络模型的非线性因素,以表示输入输出之间非线性的复杂映射,常用的有Sigmoid、Tanh、ReLU、SiLU等;
  • 池化层(Pooling Layer):对前一层的输入进行降维与抽象,减少计算量,并增强鲁棒性;
  • 批标准化层(Batch Normalization):使输入保持相同分布。

neck对backbone中得到的特征图(feature maps)进行融合与增强:

  • 早期的算法直接使用backbone最后一层得到的特征图,但不同深度得到的特征图包含着不同级别的信息,因此提出了多尺寸预测的概念,在neck结构中对特征图进行进一步处理。

head负责利用特征图执行具体的功能,如分类、目标识别、语义分割、实例分割等:

  • 分类任务中,head常由全连接层+softmax组成;
  • 目标识别任务中,head需要负责执行分类任务+预测框回归任务;
  • 分割任务中,head需要执行解码器及结果优化的任务,因为卷积模块会将图片尺寸缩小,需要将小尺寸中的预测结果映射到原始图片上,并优化结果如边缘细节等;
  • 多任务环境感知算法中,backbone和neck为共享部分,输出给多个head后,在head中还会对特征图做进一步处理后再执行上述操作。

视觉感知常用算法

自动驾驶视觉感知的算法最终都可以落到分类、检测、分割这几个范畴,根据具体的使用场景选用合适的算法;

  • 分类算法:分类算法只能输出图像的 分类结果 ,在自动驾驶领域一般不单独使用,更多的作为检测和分割的backbone使用;
  • 检测算法:检测算法可以得到图像中存在的对象的 位置和类别 ,在车辆/行人检测和交通标志检测中都有应用。
  • 分割算法:分割算法可以得到 像素级 的对象识别,不仅可以得到位置和分类信息,还可以得到外形轮廓信息,在车道线检测中有应用。

自动驾驶视觉感知的应用场景一般可归纳为:

  • 行车算法中的车辆/行人检测、车道线检测(Lane Detection)、交通标志检测(traffic sign recognition,TSR);
  • 泊车算法中的车位检测、障碍物检测等。

 常用算法列表

检测常用算法:

  • YOLO,应用于车辆/行人检测、交通标志检测
  • SSD
  • SVM
  • MobileNet+SSDLite

分割常用算法:

  • LaneNet(ENet),应用于车道线检测
  • SCNN,应用于车道线检测(Apollo)

输入输出格式

视觉感知AI算法的输入为C*H*W的形式,高宽一般相等(H=W),深度/通道数一般为3(C=3)。

具体的格式需结合具体代码与框架,一般的输入格式为RGB三通道,在感知算法之前有前处理模块将YUV进行格式转换。

根据算法的分类,输出形式如下:

  • 分类:输出为类别的编号、置信度;
  • 目标检测:输出为 1)边界框位置(形式有:xywh、xyxy、cxcywh);2)该边界框内对象的类别;3)置信度;
  • 分割:输出为每个像素的分类编号、置信度。

根据使用场景:(输出给后处理)(都带有时间戳输出,用于后续的融合算法)

  • 目标检测:边界框位置(bbox)、类别、置信度;
  • 车道线检测:实例分割结果、二值分割结果;(后续拟合车道线)
  • 交通标志检测:有无标志、标志类别+位置+置信度;(后处理还需加入距离信息)
  • 车位线检测:角点位置、入口位置;

具体的格式需结合具体代码与框架。

你可能感兴趣的:(ADAS预研笔记,人工智能,算法,笔记)