在自动驾驶汽车上实施深度学习模型
一、简介
当你走在路上时,你的眼睛会看到你面前的东西,捕捉它们,并将它们发送到你的大脑。您的大脑处理数据,然后向您的腿(致动器)发送信息以相应地移动。如果我们要为这个简单的过程建立一个模型,参数将是:
- 输入:您的眼睛捕捉到的数据(图像)。
- 模型:你的大脑。准确地说,是你大脑中的神经网络。
- 输出:由您的腿(执行器)执行的动作。
现在,想象一下所有这些都是由一台机器完成的——一辆汽车,一辆 自动驾驶汽车。 在这种情况下,
- 输入:预先捕获的道路图像。
- 模型-卷积神经网络模型。
- 输出 - 汽车的执行器。
让我们通过逐步分解这些过程中的每一个来尝试更深入地研究这个简单的想法。
二、模型输入:数据
- 收集数据:
我们需要数以万计的轨迹图像才能让我们的模型遍历。我们用汽车的摄像头(眼睛)捕捉这些图像。确保捕获正确的道路转弯和拐角图像,以有效地训练模型。请记住,好的数据 = 好的模型!
- 处理数据:
i) 拆分数据
在我们进一步之前,我们需要将收集到的数据拆分为训练和验证/测试数据集。
训练数据集——我们将在本文后面讨论它的需求。但是现在,正如名称所暗示的那样,将训练数据集理解为收集数据集的一部分来训练我们的模型。
验证/测试数据集——训练模型后,我们使用验证数据集来检查我们的模型是否训练正确。
ii) **** 扩充数据
增强是一种通过从现有数据生成新数据点来人为增加数据量的技术。
扩充现有数据集的几种方法是:
- 裁剪多余和不太重要的部分后水平翻转图像。
- 为图像添加随机亮度以模仿一天中的不同持续时间。
- 用一层失真和噪声覆盖图像以模拟下雨。
- 添加随机阴影。
现在我们有了所需的数据集,下一步是使用 CNN 构建模型的核心。
该模型
一世。神经网络:
神经网络可以被认为是对我们人类大脑的模仿,其中各种神经元相互连接并将信息从一个传递到另一个以发送最终信号。
在这里,各种神经元被分组在不同的层中,每个神经元都连接到即将到来的层中的神经元,基于 权重 分配给连接它们的线路。
那些是什么 权重 ?权重可以被认为是两层中两个神经元之间连接的优先级或重要性大小。
Representation of a Neural Network
图片来源: https://victorzhou.com/media/nn-series/network.svg
每个神经元都有一个值。但是我们如何获得这个值呢?每个神经元的单个值的总和乘以它作用在激活层上的连接权重(在下一个主题中介绍),得出下一层神经元的值。用非常简单的话来说,
n4= n1w1 + n2w2 + n3*w3
Function Derivation
ii.激活函数
有时,我们从上一步中获得的神经元值可能很大,可以用于进一步的计算。因此,我们使用一个 激活函数。 它只是用来缩小值的范围(因为对于图像识别和分类,从 0 到 1 的值是有用的)并使应用 梯度下降 算法更简单。
iii.梯度下降算法
在计算后续神经元的值时,我们必须采用一些任意权重。由于这是随机的,因此大多数情况下不会遵守正确的值。为了计算它与实际值的偏差,我们使用了一个名为 成本函数 .成本函数说明了迄今为止构建的模型有多“好”。
要应用梯度下降算法,请对该成本函数求导以找到最小误差并更新权重。更新后,适合做出几乎准确预测的最终模型已准备就绪。
现在我们已经了解了神经网络,让我们看看卷积神经网络是如何从中派生出来的。
iv.卷积神经网络
CNN 的架构与多层非常相似,但是,不同的层有固定的角色,大致分为输入层、隐藏层和输出层,它们最常用于图像处理活动。
隐藏层包括
- 卷积层
- 池化层
- 全连接层
- 归一化层。
让我们一一了解这些层。
这 卷积层 是一组神经元(理论上由矩阵表示),用于组合从图像像素获得的输入神经元/输入矩阵。卷积是将矩阵单元值替换为过滤值的过程。我们如何获得这个过滤值?它可以通过重叠输入和卷积矩阵(也称为核)之间的点积来获得。
跨步 用于控制滤波器(卷积矩阵)如何围绕输入区域进行卷积。
例如,步幅为 2 基本上意味着在卷积时跳过两个单元格。 填充 被添加到图像的外框,以便为滤镜覆盖图像留出更多空间。向 CNN 处理的图像添加填充可以更准确地分析图像,尤其是通过保留其边缘。
图片来源: https://indoml.files.wordpress.com/2018/03/stride.png?w=736
这 池化层 再次尝试通过使用某些函数(例如:max、min 函数)来减少/过滤掉输入矩阵,用最大单元值/最小单元值替换从卷积层获得的矩阵区域。
这 全连接层 将由此获得的矩阵展平成一行神经元层,使场景类似于神经网络,从那里开始,过程与我们在 NN 中看到的相同。
正常化 是一种用于标准化数据的预处理技术(即确保它是唯一的并且没有冗余)。这可以逐层或逐批进行。
现在已经解释了 CNN 的基础知识,让我们直接进入用于这个特定问题的 CNN 架构。
三、架构
图片来源: https://arxiv.org/pdf/1604.07316v1.pdf
在这个特定的问题中,卷积层被称为 步幅为 2 并且由此使用的激活函数是 向上 (指数线性单位) 功能 .
ELU函数如下:
ELU Function
由于与 RELU 相比,ELU 可以具有负值,因此它使激活的平均值更接近于零。使平均激活接近于零也会导致更快的学习和收敛。此外,它的平滑/接近最小值比 RELU 更平滑,RELU 的转弯更尖锐。
随后的层使用正常的线性激活函数。使用的池化层是最大池化。我们还将使用 dropouts 来提高准确性。辍学有助于防止过度拟合。 过拟合 是输入数据过多导致绘制过于复杂的函数图的过程,并且还考虑了不必要的值,从而阻碍了实际需要的准确性。 Dropout 通过将其值设为 0 并将非零神经元乘以 1/1 比率以一定速率从隐藏层中丢弃一些神经元来减少这种情况,这样神经元的最终总和不会改变。
现在我们已经遍历了所有不同的 CNN 层,剩下最后的过程。如所讨论的,成本函数将用于计算偏差/误差。这里使用的成本函数是 MSE(均方误差函数),其公式如下:
Cost Function — MSE
优化 (或最小化)必须应用于成本函数。在这里,我们将使用 亚当优化器 . Adam 是一种用于训练深度学习模型的随机梯度下降的替换优化算法。它使用了使用指数加权平均值进行更新的想法。使用平均值使算法以更快的速度收敛到最小值。这以这样一种方式控制梯度下降的速率,即当它达到全局最小值时有最小的振荡,同时采取足够大的步骤以便一路通过局部最小值障碍。
现在我们也构建了模型,下一步是训练使用我们创建的数据集构建的 CNN 模型。
四。训练模型
训练只是意味着让构建的模型熟悉所创建的数据集。为了使模型表现良好,数据集更通用是很重要的。
为了加快训练过程,我们可以将我们的模型加载到 GPU 上并并行训练数据集以有效利用 GPU。一旦我们的模型经过训练,我们就可以使用验证数据集来检查我们的模型是否完美运行。
瞧!我们已经使用深度学习建立了自己的自动驾驶汽车管道!
五、参考文献
- https://towardsdatascience.com/deep-learning-for-self-driving-cars-7f198ef4cfa2
- https://arxiv.org/pdf/1604.07316v1.pdf
- https://github.com/ManajitPal/DeepLearningForSelfDrivingCars
- https://github.com/hminle/car-behavioral-cloning-with-pytorch/
- https://www.udacity.com/course/deep-learning-pytorch--ud188
谢谢阅读!!!
作者:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
本文链接:https://www.qanswer.top/39110/47042413
标签:卷积,模型,驾驶,https,深度,数据,我们,神经元 From: https://www.cnblogs.com/amboke/p/16725531.html