深度学习自动驾驶-高级例程

1、采集训练数据数据
在deepcar使用深度学习自动驾驶之前,需要经过两个阶段,第一个阶段是训练模型,第二个阶段是运行训练好的模型。在正式开始训练数据和运行模型之前,需要先调整好摄像头的角度,以摄像头可以看到看到道路的两条边线为准,如图1所示
深度学习小车模拟赛道,调整好摄像头的角度后,就可以收集训练数据了,收集训练数据有两种方式,一种是手动模式,即使用手机APP遥控deepcar在道路上走一圈,然后记录下来小车的图像和对应的APP遥控值,由于小车最后的运行效果取决于训练数据,这种方式的优点是简单方便,缺点是最后小车自动行驶的效果取决操作者的遥控效果,如果操作者可以遥控小车沿着道路中心行驶或者偏离较小,则使用遥控数据训练出来的模型效果也会很好,如果操作的不好,则模型效果会大打折扣。另外一种方式是自动模式,让小车使用传统的道路边界提取然后计算出小车偏离道路的距离,然后使用pid控制输出转弯量,最后记录下小车的图像和对于的pid转弯量做训练数据即可,只要调试好pid参数让小车可以稳定沿着道路中心行驶,则训练出来的结果也会接近于pid控制的效果,且比传统的边界提取更稳定,因为传统的边界提取对现场条件要求较高,图像明亮的变化也会影响到边线提取的效果,而使用卷积神经网络的模型可以在训练的时候做图像增强,例如在训练集图片中随机增减图像的明暗度,则可以比传统的pid控制自动驾驶更加稳定。Deepcar上使用的就是自动收集数据的方法,当然用户如果感兴趣,可以采用第一种方法来对比效果。
为了让小车最后训练出来的模型能自动驾驶的效果较好,在采集训练数据之前,最好是先调试好小车的参数让小车能够使用pid控制也可以较好地完成自动行驶。需要调试的参数主要是canny边沿检测的阈值和pid控制的三个参数,主要在文件collect_training_data_xtion.py中修改这些参数,如图2所示:
人工智能小车后台训练数据
下面详细解释下这些参数的意义:
为了提取道路的左右边沿位置,需要对图像做一些预处理,首先是转成将图像由rgb图转为灰度图,如图2-1所示
深度学习小车灰度图
转为灰度图后,使用canny边沿检测将图像转成黑白的二值化图,二值化图中白色即为图像边缘较为明显的部分,而非物体的边缘则会编程黑色像素,由于道路的边界一般都是较为明显的,所以使用canny边缘检测之后,道路的边沿则会变成两条白边,如图2-2所示
deepcar智能小车黑白二值化图
Deepcar使用Canny边沿检测调用的是opencv的库函数,里面主要有两个参数,一个是高阈值thresholdH,一个是低阈值thresholdL,高阈值thresholdH的大小决定了图像的边缘提取的详细程度,值越小,则图像中的边缘越多,细节也更为明显,低阈值thresholdL则决定了图像的边缘联结程度,thresholdL越小,则图像边沿联结的越多,thresholdL越大,则图像中的边缘线断开的也越多,在本次案例中,thresholdH和thresholdL调节的原则是让图像中的道路边沿越明显且断开越少越好,而与道路边沿无关的其他边缘则是越少越好,下面两张图片对比了选取不同参数的做canny边缘检测的区别.