树莓派自动驾驶:使用 Keras 与 Tensorflow 构建车道跟踪自动汽车

描述

无人驾驶虽然入门门槛很高,但是还是可以通过一些简化的模型迅速上手。例如比较有名的DonkeyCar,其实就是一个简单低成本的玩具车,基于树莓派和Python,利用Keras深度学习框架实现自动驾驶。即使没有实车,也可以在Donkey Car官网下载模拟器,用程序控制模拟器中的小车。感兴趣的同学可以看看社区和文档

目前还有一些比赛也在使用donkey car帮助大家低门槛地进入自动驾驶领域。例如中国人工智能学会主办的2018模拟驾驶比赛,比赛提供了一些奖金,还为进入决赛的选手免费提供donkeycar实车线下比拼。此外,中国人工智能学会还会颁发证书,所以可以向想要入门自动驾驶,想保研、申请奖学金的同学推荐一下。此外,网上还有不少简单的攻略,例如下面是一篇来自github的自动驾驶相关研究,我对这篇文章进行了编译并在此发布,希望能帮助更多感兴趣的朋友上手自动驾驶。

欢迎大家相互交流,项目地址:https://biendata.com/kernel/detail/427

导入相关库

tensorflow

步骤1:获取驾驶数据

数据集由 ~7900 个图像和手动开车时收集的转向角组成。大约三分之二的图像与线之间的汽车。另外三分之一的车开始偏离航线,并且驶回线路之间。

tensorflow

路径是

tensorflow

数据集由 2 个 pickled 数组组成。X 是图像阵列,Y 是相应转向角度的阵列。

tensorflow

结果:

tensorflow

步骤2:拆分数据

在这里,我们将洗牌(shuffle)我们的数据,并将数据分成三部分。训练数据将用于训练我们的驾驶模型,使用验证数据避免过度拟合模型,测试数据用于测试我们的模型是否学到了什么。

tensorflow

tensorflow

输出:7892

tensorflow

输出:7892

步骤3:增强训练数据

为了加倍我们的训练数据并防止转向偏差,我们翻转每个图像和转向角并将其添加到数据集中。还有其他的方法来增加使用翻译和假阴影驾驶数据,但我没有使用这些自动驾驶仪。

tensorflow

结果:12626

步骤4:建立驾驶模式

这种驾驶模式将是一个端到端的神经网络,接受图像阵列作为输入,并输出-90(左)和90(右)之间的转向角。 要做到这一点,我们将使用一个完全连接图层的3层卷积网络。该模型基于 Otavio 的 Carputer,但不产生油门值输出,不使用过去的转向值作为模型的输入,并且使用较少的卷积层。

tensorflow

使用 TensorFlow 后端

tensorflow

输出:

tensorflow

步骤5:训练模型

我已经学会了很难的方法,即使这一切都是完美的,如果你没有正确地训练,你的自动驾驶仪将无法工作。我遇到的最大的问题是过度适应模型,以至于在很少的情况下都不能正常工作。 这里是 2 个 Keras回调,将节省您的时间。

警告 - 如果仅使用CPU,则需要很长时间(3小时)

我在没有 CUDA 兼容 GPU 的 Dell XPS 笔记本电脑上运行,因此速度非常慢,并且冻结。为了加速训练,您可以使用带有 GPU 的 EC2 实例。Keras 和 Tensorflow 已经加载了几个实例图像。

tensorflow

对于这个笔记本,我只会训练模型 4 个时代(epochs)。

tensorflow

输出:

tensorflow

步骤6:评估性能

我们可以通过绘制预测值和实际值来检查我们的模型预测是否合理。第一个图表显示我们的测试数据中存在一个学习的关系(在训练期间模型没有看到)。

tensorflow

tensorflow

第二张图,使用包含训练数据的非混洗(unshuffled)数据,来显示预测角度紧跟实际转向角度。

输出:

下一步

改善模型,这个模型是纯粹(navie)的,因为它不使用过去的值来帮助预测未来。我们可以通过将过去的转向角度作为模型的输入来进行试验,添加一个递归层,或者只是改变卷积层的结构。

添加更多数据,随着我们添加更多驾驶数据,此模型将会得到改进。 预测油门,输出目前自动驾驶仪只能转向并保持恒定的速度。一个更复杂的模型将加速在直路上,并在路缘之前放缓。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分