我用飞桨做了一个AI智能小车

坚强是说给别人听的谎言 提交于 2019-12-16 17:08:33

【飞桨开发者说】吴东昱,北京钢铁侠科技深度学习算法工程师,主要研究深度学习、无人驾驶等。

 

我在观察历届智能车竞赛以及教学实验中发现,采用传统视觉算法的视觉智能车只能在特定赛道中行驶,一旦赛道环境改变,必须修改大量的代码才能运行。算法适应性差是制约智能车场景化适配的重要因素。而“AI智能车”借助深度学习算法,通过真实数据采集到模型新训练恰恰能够解决这一问题。基于飞桨平台,我们快速研制出了“无人驾驶智能车”,已经实现了道路检测以及交通标识识别(红绿灯/限速牌/人行道/停车位)等功能。在本文中,我将为大家揭秘“基于飞桨的无人驾驶智能车”的具体实现过程和效果。

 

第一步:如图1所示,在智能车硬件配置上,高性能处理器是实现深度学习算法运行的必备条件,目前通用流行的高性能处理器如:intel CPU、NVDIA GPU、百度Edgeboard系列、NXP i.MX8系列,在这里我们选择了基于百度Edgeboard系列的高性能板卡作为智能车的主处理器。

图1.智能车硬件框架

第二步:在解决了处理器的问题之后,要实现智能车对道路和交通标识的识别就要面临深度学习框架和深度学习算法的选择。目前通用流行的深度学习框架有Tensorflow、飞桨(PaddlePaddle)、Caffe、PyTorch等。我们选择了飞桨,飞桨作为国产化的深度学习框架,配合一站式开发平台AI Studio,为用户提供了优质的开发服务。进一步借助飞桨平台发布的官方支持的工业级模型以及高性能推理引擎Paddle Lite,可以快速实现自然语言处理、计算机视觉、推荐引擎等多个领域应用的开发和部署。

 

在车道线识别上,我们采用的是卷积神经网络CNN。CNN在图像领域有重要的应用价值,结合实际测试经验,我们的智能车采用了5个卷积层加2个全连接层来构成车道线网络模型,智能车整体工作流程可分为数据集创建、数据处理、模型训练和部署预测四步。

01

数据采集

通过手柄遥控智能车在赛道内按照适当速度运行,记录过程中的每一帧图像及对应的转弯角度。采集的图像如图2所示。

图2 采集的图像集

代码解析:

  

运行的程序包括三个进程分别控制:获取手柄数据、保存图像数据以及保存转弯数据;通过创建一个互斥锁,使得图像数据和角度信息一一对应保存下来;最后将转弯数据转成npy文档,便于下一步的调用。

图3 数据采集代码解析

02

图像预处理

对获取的图像信息进行预处理,提取出图像中的赛道,并保存处理后的图像。处理后的图像如图4所示。

图4 处理后的数据

代码解析:

 

依次读取数据集中的图像,根据颜色阈值限定对每一张图像颜色信息进行二值化处理并另存到特定目录下,如图5所示。

图5 数据处理代码解析

03

模型训练

以卷积神经网络为主体搭建深度学习网络框架,并将图像及转弯角度信息放入模型中进行训练,最终得到训练后的模型,搭建的模型如图6所示。

图6 模型训练

本过程通过飞桨框架,在其中定义损失函数、优化方案、层数、卷积核大小等参数。具体代码如图7所示。

 

图7 模型训练代码解析

04

部署预测

 

将AI Studio得到的飞桨CNN模型下载到终端,并通过局域网传入智能车的主处理器上,在智能车主处理器上利用Paddle Lite实现模型调用。

 

然后把智能车放置在赛道中,智能车通过调用训练好的模型,根据实时采集的图像信息,输出对应的转弯角度,进而实现自主运行,具体实现代码如图8所示。

图8 预测部署代码解析

运行的视频如下:

详情可查看GitHub项目地址:

https://github.com/PaddlePaddle/Paddle-Lite/tree/develop/mobile

如果使用过程中遇到任何问题,大家可通过Paddle Lite官方QQ群与开发人员进行技术交流及问题反馈,群号:696965088。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!