Keras组件

这些组件封装了使用Keras高级API定义的模型。它们旨在与Tensorflow后端一起使用。这些组件旨在使用训练过的人工神经网络,根据相机所见的图像来重现转向和油门。它们是使用train命令创建的。

Keras Categorical

此模型类型是使用--type=categorical创建的。

KerasCategorical驾驶器将转向和油门决策分为离散的角度,然后使用分类交叉熵来训练网络,使其激活每个转向和油门选择的单个神经元。这很有趣,因为我们可以获得作为所有选择的分布的置信度值。 这使用dk.utils.linear_bindk.utils.linear_unbin将连续的实数转换为一系列离散值,用于训练和运行时。 因此,输入和输出是有界的,并且必须明智地选择以匹配数据。 默认范围适用于默认设置。但是,速度更快的车辆可能希望启用更高的油门范围。具有更大转向角度的车辆可能需要更多的离散值。

这个模型是Donkey创建时的原始模型,在一些修改的基础上。

优点

  • 通过makemovie命令以分布形式显示置信度的一些优点。
  • 表现非常稳健。
  • 在某些情况下,该模型在学习油门控制方面比其他模型表现更好。
  • 在像树莓派3这样的有限计算环境中表现良好。

缺点

  • 受到所选类别数量限制和油门上限的一些任意限制的影响。

模型概述

输入:图像

网络:5个卷积层,接着两个全连接层,然后输出

输出:两个全连接层,具有16和20个分类输出

Keras Linear

此模型类型是使用--type=linear创建的。

KerasLinear驾驶器使用一个神经元通过Keras Dense层和线性激活函数输出连续值,一个用于转向,一个用于油门。输出没有界限。

优点

  • 转向平稳。
  • 表现非常稳健。
  • 在像树莓派3这样的有限计算环境中表现良好。
  • 没有对转向或油门的任意限制。

缺点

  • 有时可能无法很好地学习油门控制。

模型概述

输入:图像

网络:5个卷积层,接着两个全连接层,然后输出

输出:两个具有线性激活函数的全连接层,每个输出一个标量,用于转向和油门。

Keras IMU

此模型类型是使用--type=imu创建的。

KerasIMU驾驶器与KerasLinear模型非常相似,只是在学习驾驶时,它除了图像之外还使用惯性测量数据。这使得我们的无状态模型对车辆的运动有了额外的信息。

这可以作为将更多数据纳入模型的起点示例。

优点

  • 转向非常平稳。
  • 在像树莓派3这样的有限计算环境中表现良好。
  • 没有对转向或油门的任意限制。
  • 为模型提供了额外的状态,这可能有助于在停车标志处停车。

缺点

  • 如果使用嘈杂的惯性测量单元,驾驶质量会受到影响。

模型概述

输入:图像,线性和角加速度向量

网络:5个卷积层,接着两个全连接层,然后输出,向量数据后面跟着3个全连接层,然后在conv2d层之后进行连接,再接着是2个全连接控制层。

输出:两个具有线性激活函数的全连接层,每个输出一个标量,用于转向和油门。

Keras Latent

此模型类型是使用--type=latent创建的。

KerasLatent驾驶器试图强迫模型学习一个潜在向量,除了驾驶之外。这个潜在向量是CNN中的一个瓶颈,然后尝试重现给定的输入图像并生成驾驶命令。这两个任务可以产生一个学习将驾驶场景提炼并更好地抽象到新赛道的模型。

优点

  • 转向平稳。
  • 在像树莓派3这样的有限计算环境中表现良好。
  • 没有对转向或油门的任意限制。
  • 图像输出是模型认为在场景中重要的度量。

缺点

  • 需要更多的测试来证明理论。

模型概述

输入:图像

网络:5个卷积层,收缩到一个10x1x1向量,然后是6个Conv2dTranspose层,最后输出图像和3个全连接层以及驾驶控制。

输出:两个具有线性激活函数的全连接层,每个输出一个标量,用于转向和油门。输出一个图像。

Keras RNN

此模型类型是使用--type=rnn创建的。

KerasRNN驾驶器使用一系列图像来控制驾驶,而不仅仅是单个帧。使用的图像数量由myconfig.py中的SEQUENCE_LENGTH值控制。

优点

  • 转向非常平稳。
  • 可以训练到更低的损失值。

缺点

  • 在像树莓派3这样的有限计算环境中表现较差。
  • 训练时间较长。

模型概述

输入:图像

网络:4个时间分布的卷积层,接着2个LSTM层,3个全连接层和驾驶控制。

输出:一个具有两个标量输出的全连接层,用于转向和油门。

Keras 3D

此模型类型是使用--type=3d创建的。

Keras3D_CNN驾驶器使用一系列图像来控制驾驶,而不仅仅是单个帧。使用的图像数量由myconfig.py中的SEQUENCE_LENGTH值控制。与大多数其他模型使用的2D卷积不同,这里使用跨层的3D卷积。

优点

  • 转向非常平稳。
  • 可以训练到更低的损失值。

缺点

  • 在像树莓派3这样的有限计算环境中表现较差。
  • 训练时间较长。

模型概述

输入:图像

网络:4个3D卷积层,每个后面跟随最大池化,然后是2个全连接层和驾驶控制。

输出:一个具有两个标量输出的全连接层,用于转向和油门。

Keras Behavior

此模型类型是使用--type=behavior创建的。

KerasBehavioral驾驶器接受图像和向量作为输入。该向量是一个独热激活的命令向量。这个向量可能有两个状态,一个用于左车道驾驶,一个用于右车道驾驶。然后在训练期间,激活向量的一个元素,同时演示所需的行为。该向量在myconfig.py的BEHAVIOR_LIST中定义。BEHAVIOR_LED_COLORS必须与相同长度匹配,并且在显示当前状态时可能有用。TRAIN_BEHAVIORS必须设置为True。

优点

  • 可以创建可以执行多个任务的模型。

缺点

  • 训练需要更多的工作量。

模型概述

输入:图像、行为向量

网络:5个卷积层,接着2个全连接层和驾驶控制。

输出:类别转向、油门输出,类似于Keras分类模型。

Keras Localizer

此模型类型需要进行一些代码修改才能创建。

KerasLocalizer驾驶器与Keras Linear模型非常相似,只是它学习将其位置输出为一个类别。这个类别是任意的,但只在测试为赛道的0-9范围段时进行了测试。这要求驾驶数据用位置的类别标签进行标记。这可以为驾驶策略、圈数计数或其他方面提供一些更高级的逻辑。

优点

  • 转向平稳。
  • 在像树莓派3这样的有限计算环境中表现良好。
  • 对转向或油门没有任意限制。
  • 位置提供一些更高级的逻辑。

缺点

  • 有时可能无法很好地学习油门控制。

模型概述

输入:图像

网络:5个卷积层,接着两个全连接层,然后输出两个具有线性激活函数的标量输出,用于转向和油门,以及一个用于位置的分类输出。

输出:两个具有线性激活函数的全连接层,每个输出一个标量,用于转向和油门。一个用于位置的分类输出。