基于双目立体测距和YOLO模型训练的主动刹车的实现——以华汽电动车队原型车为例

(整期优先)网络出版时间:2022-11-02
/ 2

基于双目立体测距和YOLO模型训练的主动刹车的实现

——以华汽电动车队原型车为例

洪琳彬 江得权 陈佳伟

广州城市理工学院

摘要

基于现在华汽电动车队无人驾驶领域的发展需要以及视觉组不断的技术创新,也为了更好地将无人驾驶,自动驾驶等方面的新技术在华汽电动车队2022赛季的原型车上的应用,我们通过长时间的技术钻研和技术上不断的调研和测试,发现我们可以初步利用较为成熟的双目立体测距和YOLO模型训练,实现目前为止从未实现过的在原型车上加入主动刹车的功能。

双目测距是通过对两幅图像视差的计算,直接对前方景物进行距离测量,能根据距离信息的变化,进行必要的预警或制动。在此基础上通过目前最成熟的YOLO5模型训练技术,训练出更精准的物体识别。我们通过3D打印的原型车模型,训练出能够360°识别原型车的训练集,在实际赛道上能够实时精准识别到各个原型车

本文以华汽电动车队2022赛季原型车为研究对象,参考学习现在最先进的无人驾驶技术,就双目测距与YOLO 模型训练做出了重大研究实践成果,打破了“做不出实物,只能仿真”的技术壁垒。

关键词:原型车 主动刹车 双目立体测距 YOLO模型训练

正文

YOLOv1的技术简述如下:一个经典的物体探测one stage技术,YOLO算法的核心思想就是把物体探测问题解决为回归问题,利用一个卷积神经网络系统就可以从输入图像直接判断bounding box和类别概率,用回归的方式去做目标检测,而且运行速度快,可以实现非常高效的目标检测,其背后的原理和思想也非常简单。并且one stage算法有优势和劣势,优势为速度非常快,适合做实时检测任务,劣势为效果不会太好,识别准确率不高。

YOLO模型训练的基本流程是采用一个单独的CNN模型实现端到端的目标检测,首先将输入图片的大小重置缩小到448x448,然后送入CNN模型工具里,最后处理网络模型算法的运算结果得到检测的目标。其速度会变得更快,而且Yolo的训练过程也是端到端的。每个单元格会预测几个边界框以及边界框的置信度。其次,所谓置信度其实包含两个方面,一是这个框中目标存在的可能性大小,二是这个边界框的位置准确度。第一个我们把它记做Pr,如果框中没有目标物,则Pr=0,若含有目标物则Pr=1 。我们使用了一种叫做IOU交并比的方法,言简意赅就是预测的框与你真实的框相交的面积,和预测的框与真实框合并的面积的比例。我们可以记做IOU,那么置信度就可以定义为这两项相乘。

其次,我们还将使用到网络模型,网络方面主要采用GoogLeNet算法,它的卷积层主要用来提取图像内的共同特征,全连接层主要用来预测类别概率和坐标。

图2 网络模型原理示意图

最后,YOLO训练模型算法还使用一种叫损失函数,将识别的失误率降到最低,提高实时识别的效率,损失函数包含三种,一是分类损失函数:classification loss,二是定位损失函数:Iocalization loss,三是置信度损失函数:confident loss。

我们为了得到更准确,更有效的模型训练集,我们收集2022赛季原型车大量的照片,国内外往年原型车车队的照片,并采用3D打印技术,打印出了2022赛季原型车的模型进行视频拍摄,而且在试车时拍摄大量视频,将上述资源作为YOLO 模型训练集,最终我们能得到最符合预期的模型集。

首先我们先在每一张照片里框出我们想要识别的元素,逐一框出,如下图所示,再将这些资源框图使用YOLO模型训练算法,算出这些图片中我们框出的元素共同特征,得出一些各维度相似的因数。

train_batch1

图3YOLO 模型训练原始标记图

labels

图4 YOLO线性规划点状图

results

图5 YOLO线性规划各维度因数图

图6训练集效果识别图

双目立体视觉,本意帮助我们更好的理解人类的双眼是如何进行深度感知,双目测距的基本原理主要是三角测量原理,即通过视差来判定物体的远近。

标定后我们就可以得到左右相机的内外参数、畸变系数、旋转矩阵和平行矩阵等参数,接下来我们就可以将相机的参数储存到一个类中,进行立体匹配和视差图计算,立体匹配的目的是为左图中的每一个像素点在右图中找到其对应点。最后根据下面的公式计算深度图:

def getDepthMapWithConfig(disparityMap : np.ndarray, config : stereoconfig.stereoCamera) -> np.ndarray:

fb = config.cam_matrix_left[0, 0] * (-config.T[0])

doffs = config.doffs

depthMap = np.pide(fb, disparityMap + doffs)

reset_index = np.where(np.logical_or(depthMap < 0.0, depthMap > 65535.0))

depthMap[reset_index] = 0

reset_index2 = np.where(disparityMap < 0.0)

depthMap[reset_index2] = 0

return depthMap.astype(np.float32)

总结

我们华汽电动车队视觉组,通过这次利用YOLO模型训练和双目测距初步实现无人驾驶在原型车上的应用,让我们发现还有人多问题可以不断去优化,我们都还有很大的优化提升空间,希望能在2023赛季上不断优化,具体如下:

  1. 本次采用的是英伟达JsonNano处理器做上位机,它的算力和运算速度还是稍有欠缺,改进可以采用英伟达的TX2替换JsonNano,它的算力和处理速度远远大于JsonNano。

  2. 本次双目测距采用的算法是BM算法,这种算法还存在一定缺陷,我们发现还可以使用SGBM算法去实现双目测距,这种算法是在BM算法的基础上更优化的。