训练深度神经网络的最大挑战之一在于为训练而收集的数据的质量和数量。在之前的文章中,我们重点介绍了如何从微型自动驾驶汽车中收集数据,以及如何使用Cloudera DataFlow(CDF)和Cloudera Edge Manager(CEM)从源将数据传输到HDFS。当收集到足够数量的数据时,可以训练一个“克隆”人的驾驶行为的模型。该模型大致基于实现行为克隆的NVIDIA自动驾驶汽车模型架构。在本文中,我们将回顾行为克隆的构建方式以及如何将其部署到我们的汽车中。我们还将重点介绍Cloudera的工具如何使我们能够充分利用我们的数据和模型。
1. Cloudera数据科学工作台
ClouderaData Science Workbench(CDSW)是一个安全的企业数据科学平台,通过允许数据科学家使用Python,R和Scala等已经存在的技能和工具来运行,从而使数据科学家能够加快其工作流程(从数据探索到模型部署) Hadoop集群上的计算。在我们的项目中,CDSW用于从Hadoop分布式文件系统(HDFS)检索数据,使用Keras训练行为克隆神经网络模型,并将模型保存回HDFS。CDSW拥有许多现有的库并可以直接访问HDFS中的数据,因此是训练模型的理想选择。
工作台上的CDSW代码
1.1. 数据扩充以进行模型训练
由于跑道很小,并且收集的数据稀疏,因此数据预处理对于增强它很有用。在ML应用程序上下文中,数据扩充是指更改原始数据的过程,即我们通过稍微更改可用数据来“创建”新数据。在此项目中,我们通过执行一系列转换(包括镜像图像和反转转向角),使用增强将数据增加了两倍。因此,当收集到沿顺时针方向行驶的汽车的数据时,我们可以推断出沿逆时针方向行驶的转向角。左右摄像机图像的转向角通过正负0.2弧度的偏移进行调整,因此,当车辆离轨道的左侧或右侧太近时,车辆将能够转向中心。数据预处理大大提高了模型的准确性。
1.2. 收集更好数据的策略
拥有大量数据并不能总是确保所收集数据的质量对训练模型有好处。为了收集训练数据,我们在逆时针方向上将赛车开了三圈,在反方向上又开了三圈,最后一圈的重点是在轨道的每个转弯处平稳转弯。应用了这些驾驶策略后,该模型得到了显着改善:赛车从无法在赛道上完成一圈变成了无助驾驶几圈。
2. 行为克隆神经网络架构
卷积神经网络(CNN)架构
神经网络架构由一个归一化层,一个裁剪层,五个卷积层和四个完全连接的层组成。该模型的输入是三幅图像:左,中和右摄像机图像。归一化层会适当调整图像的大小以训练模型。裁剪层用于去除图像中不必要的特征,例如树木和汽车引擎盖,以提高训练过程中模型的准确性。五个卷积层由用于提取图像特征的过滤器组成,例如识别黑色道路和白色车道边界。根据NVIDIA的出版物,每个卷积层的过滤器编号是通过反复试验确定的。完全连接的层用于减少每一层的输出数量,最终达到一个输出。
用于实现行为克隆模型的深度学习框架是Keras,后端是TensorFlow。第一层由用于获取图像形状的lambda 层组成。第二层是Cropping2D 层,用于删除图像顶部和底部的像素,以提高训练过程中模型的准确性。接下来的五层是Conv2D 层,用于处理图像处理以对图像进行特征提取。最后四层是密集的全连接层,以减少每一层的输出数量,最终为转向预测提供一个输出。使用拟合训练顺序神经网络模型 包含超过20%的验证分割和7个历元的图像和导向标签,因为这样产生的均方误差较低,可用于训练和验证。
模型架构代码
3. 使用CEM将CNN模型部署到边缘
一旦您克服了在边缘上收集数据的挑战并使用在边缘上收集的数据训练了ML模型,下一步的逻辑步骤就是将新资产部署回边缘。CEM可帮助您以快速,可靠的方式部署模型。一旦我们对模型进行了培训和测试,我们就可以将其部署回Jetson TX2上,并使用它进行预测,以使汽车能够自动驾驶。
我们可以在简单的流程中添加GetHDFS 处理器,以选择模型并使用指向CEM和MiNiFi代理的输出端口。
将NiFi中的数据排队到输出端口后,MiNiFi流将使用远程进程组将其提取。该远程进程组配置有NiFi的URL和输出端口的标识。最后,MiNiFi将存储model.h5 使用本地磁盘上PUTFILE 处理器。最后一步是通过使用ExecuteProcess 处理器启动加载模型的ROS 流程,使汽车能够自动驾驶。h5 基于流的相机图像执行转向角的预测。并且一旦ROS auto_mode.launch 进程运行,开发人员就可以通过按Y键激活自主模式。游戏控制器上的按钮(并通过按B 按钮将其禁用)。激活此模式后,汽车立即基于模型的转向角预测以5 mph的恒定速度行驶并向右或向左转向。
EFM UI最终工作流程
4. 结论
我们首先从边缘收集数据,然后使用Cloudera DataFlow和CEM将其移至数据湖,然后在CDSW中训练模型,最后将其部署到汽车以进行自动模式驾驶,从而开始了AI之旅。只需进行少量修改,就可以扩展此体系结构,以从一组车队收集数据,使用所有数据训练模型,并将其轻松部署回所有车队。要将边缘复制到本系列文章中展示的AI周期,请遵循Edge2AI自动驾驶汽车教程。
来源:https://blog.cloudera.com/edge2ai-autonomous-car-train-and-deploy-a-model-to-the-edge-3-of-3/