5

基于神经网络的自动驾驶遥控小车

 3 years ago
source link: https://panchuang.net/2021/06/20/%e5%9f%ba%e4%ba%8e%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c%e7%9a%84%e8%87%aa%e5%8a%a8%e9%a9%be%e9%a9%b6%e9%81%a5%e6%8e%a7%e5%b0%8f%e8%bd%a6/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

激励项目:

多年来,汽车已经成为人类非常重要的交通工具。能够拥有一辆自动驾驶汽车提供了激励该项目的众多好处中的两个:

2.作为司机,在乘车过程中有时间从事其他活动;有效利用时间。在全自动车辆中,所有乘客都可以安全地从事更具生产力或娱乐性的活动,比如回复电子邮件或看电影。

本博客分为两个部分:1。了解项目2。神经网络的工作原理和体系结构

第一部分:对项目的理解

一辆装有头顶摄像头的遥控汽车将能够“看到”道路,该程序将帮助预测任何设计的轨道上的移动方向。机器学习程序将控制RC汽车的移动(向前、向后、向左和向右),其中输入将是从汽车到人工神经网络(ANN)的实时图像,ANN(人工神经网络)给出作为控制信号的向前、向后、向左或向右预测。

硬件高级图:

RC汽车包含一个接收器,遥控器包含一个发射器,它们将是我们的汽车和方向盘,我们可以通过它们来控制和训练汽车。

为了保存这些控制指令,我们需要在车顶安装一个摄像头,用于将图像流式传输到笔记本电脑,这是由Raspberry Pi及其摄像头完成的,这将有助于数据收集。笔记本电脑将获取图像,并将其与说明一起保存到硬盘中,作为.npz文件。

Arduino板用作笔记本电脑和变送器之间的接口,通过电压指令(1-ON,0-OFF)控制汽车(遥控器)。PyGame库,用于通过python程序进行控制。

但是我们要收集什么样的图像数据呢?以什么分辨率?

由于计算、存储和流式传输带宽有限,将图像尺寸和灰度图像限制为320 x 240将有助于减少每秒流式传输30帧的计算时间和延迟。

仔细观察相机所看到的,图像将被分为两个部分,下半部分和上半部分,我们将仅使用下半部分进行短视预测;由于图像分辨率较低,上半部分可能会产生误导和不清晰。

我们为汽车设置了一条轨道,以帮助区分道路和人行道,不这样做将不会有任何类型的轨道对齐。我们用白色的A4大小的床单在两侧创建了一条人行道。

请注意,安装的摄像头必须与地面成大约15度角,才能捕捉到汽车位置和前方的轨迹;这样可以清晰地看到汽车在那个特定时间所在的道路。如果相机没有向下倾斜,那么汽车只能看到前方的道路,而看不到所在的位置。

Arduino-变送器接口

这对于使用PC/笔记本电脑控制RC汽车至关重要。发射器使用Arduino板供电,数据引脚放置晶体管作为开关,如下面的电路图所示。

图像通过COM3端口无线传输,通过串行Python库,通过PC/笔记本电脑无线IP地址传输,这允许我们在不依赖任何互联网的情况下进行流媒体传输。

最初,汽车是用前进、倒车、左转和右转信号来采集图像的。这些收集的数据然后用于训练神经网络,然后神经网络将为我们提供实时预测。

第二部分:神经网络的工作原理和体系结构

在OpenCV中使用一个简单的人工神经网络,具有38,400个输入和4个输出。黑白图像将是我们对ANN模型的输入,黑白图像仅包含1个通道,值在0到255(像素范围)之间,来自通过摄像机的流式输入图像。

让我们了解一下ANN是由什么组成的:

输入层、隐藏层和输出层;其中每一层都有神经元,这些神经元基本上是计算单元。作为图像A的输入是320×240维=76,800/2(下半图像)=38,400值平坦化阵列(具有1个通道)。

神经元利用提供来自每个神经元的非线性输出的激活函数来计算神经网络的参数(即权重矩阵和偏差)的线性组合。神经元被定义为一个函数:

其中z是l层单个神经元内部的函数,W是权重矩阵,a是激活函数的输出,b是偏差值,g(Z)是非线性函数。

这种非线性有助于构建与网络的复杂表示。最后一个隐层连接到输出层,因为在这种情况下,一个4类分类问题将有4个神经元,每个神经元产生一个具有最终激活函数的概率,这里的输出将是具有最大概率“激活”的神经元。

隐藏层神经元可以被认为是来自输入图像的特征,如果图像中存在特定特征,则神经元被激活/激发以提供对最终输出的进一步影响。例如:一张可能显示右转的图像会在某种程度上激活输出层中那些迎合右侧的特定神经元。这大致解释了隐藏层如何有助于整体预测。

通过有助于训练的损失函数来帮助模型区分好的预测和坏的预测,该损失函数是如下所示的4个类别的预测概率和基本事实之间的差值的平方和的平均值(对于所有训练示例)。

这是通过寻找损失函数的全局最小值来改进的,该损失函数的全局最小值将导致使用随机梯度下降的搜索算法所使用的数据集的最小误差。stochastic gradient descent

随机梯度下降:是一种优化搜索算法,通过改变函数(损失)的参数(权重和偏差)来帮助寻找函数(损失)的最小值;其思想是该函数的梯度给出最陡峭的上升方向,因此采用负梯度将给出最陡下降的方向,如图所示。

我在下面创建了这张挡路图表,希望能以一种简单的方式帮助理解神经网络培训。因此,网络按照这条计算路径来学习如何做事,在我们的情况下,学习在路上自动驾驶!

这是我编辑的一个快速视频,用来展示RC汽车的实时工作方式。感谢您的阅读和收看!

领英:https://www.linkedin.com/in/iamsal/Github:https://github.com/M-Salman1337/Self-driving-RC-carhttps://www.linkedin.com/in/iamsal/ https://github.com/M-Salman1337/Self-driving-RC-car

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/06/20/%e5%9f%ba%e4%ba%8e%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c%e7%9a%84%e8%87%aa%e5%8a%a8%e9%a9%be%e9%a9%b6%e9%81%a5%e6%8e%a7%e5%b0%8f%e8%bd%a6/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK