本文作者:吴东昱,北京钢铁侠科技深度学习算法工程师,主要研究深度学习、无人驾驶等。上边显示的是本文所讲的最终效果,下边来看看怎么实现,以及过程中的一些相关技术要点。我在观察历届智能车竞赛以及教学实验中发现,采用传统视觉算法的视觉智能车只能在特定赛道中行驶,一旦赛道环境改变,必须修改大量的代码才能运行。算法适应性差是制约智能车场景化适配的重要因素。而“AI智能车”借助深度学习算法,通过真实数据采集到模型新训练恰恰能够解决这一问题。基于飞桨平台,我们快速研制出了“无人驾驶智能车”,已经实现了道路检测以及交通标识识别(红绿灯/限速牌/人行道/停车位)等功能。在本文中,我将为大家揭秘“基于飞桨的无人驾驶智能车”的具体实现过程和效果。第一步:如图1所示,在智能车硬件配置上,高性能处理器是实现深度学习算法运行的必备条件,目前通用流行的高性能处理器如:intel CPU、NVDIA GPU、百度Edgeboard系列、NXP i.MX8系列,在这里我们选择了基于百度Edgeboard系列的高性能板卡作为智能车的主处理器。
图1.智能车硬件框架第二步:在解决了处理器的问题之后,要实现智能车对道路和交通标识的识别就要面临深度学习框架和深度学习算法的选择。目前通用流行的深度学习框架有Tensorflow、飞桨(PaddlePaddle)、Caffe、PyTorch等。我们选择了飞桨,飞桨作为国产化的深度学习框架,配合一站式开发平台AI Studio,为用户提供了优质的开发服务。进一步借助飞桨平台发布的官方支持的工业级模型以及高性能推理引擎Paddle Lite,可以快速实现自然语言处理、计算机视觉、推荐引擎等多个领域应用的开发和部署。在车道线识别上,我们采用的是卷积神经网络CNN。CNN在图像领域有重要的应用价值,结合实际测试经验,我们的智能车采用了5个卷积层加2个全连接层来构成车道线网络模型,智能车整体工作流程可分为数据集创建、数据处理、模型训练和部署预测四步。
数据采集通过手柄遥控智能车在赛道内按照适当速度运行,记录过程中的每一帧图像及对应的转弯角度。采集的图像如图2所示。
图2 采集的图像集
代码解析:运行的程序包括三个进程分别控制:获取手柄数据、保存图像数据以及保存转弯数据;通过创建一个互斥锁,使得图像数据和角度信息一一对应保存下来;最后将转弯数据转成npy文档,便于下一步的调用。
图3 数据采集代码解析
图像预处理对获取的图像信息进行预处理,提取出图像中的赛道,并保存处理后的图像。处理后的图像如图4所示。
图4 处理后的数据
代码解析:依次读取数据集中的图像,根据颜色阈值限定对每一张图像颜色信息进行二值化处理并另存到特定目录下,如图5所示。
图5 数据处理代码解析
模型训练以卷积神经网络为主体搭建深度学习网络框架,并将图像及转弯角度信息放入模型中进行训练,最终得到训练后的模型,搭建的模型如图6所示。
图6 模型训练本过程通过飞桨框架,在其中定义损失函数、优化方案、层数、卷积核大小等参数。具体代码如图7所示。
图7 模型训练代码解析
部署预测将AI Studio得到的飞桨CNN模型下载到终端,并通过局域网传入智能车的主处理器上,在智能车主处理器上利用Paddle Lite实现模型调用。然后把智能车放置在赛道中,智能车通过调用训练好的模型,根据实时采集的图像信息,输出对应的转弯角度,进而实现自主运行,具体实现代码如图8所示。
图8 预测部署代码解析
最后再看一遍效果:
详情可查看项目地址:
https://github.com/PaddlePaddle/Paddle-Lite/tree/develop/mobile
推荐阅读
“我的名片可以运行 Linux”
2019年C++有哪些发展?
IntelliJ平台2020年路线图
Scala路线图:跳过2.14,明年上Scala 3
GNOME操作系统将出现