原标题:使用深度学习完成自动驾驶
来源:AI 研习社 链接:https://www.yanxishe.com/TextTranslation/1056
原标题:Self-driving cars using Deep Learning 毫无疑问,自动驾驶汽车将成为未来的标准运输方式。从优步和谷歌到丰田和General Motors的大公司都愿意花费数百万美元来实现这一目标,因为预计未来市场将达到数万亿美元。在过去的几年里,我们看到该领域发生了巨大的变化,优步,特斯拉,Waymo的汽车在他们的记录中总共有800万英里。
当然,由于硬件和软件方面许多不同技术的进步,自动驾驶汽车现在已成为现实。激光雷达传感器,摄像机,GPS,超声波传感器正在协同工作,以便从各种可能的来源接收数据。使用高级算法实时分析这些数据,使自动驾驶仪功能成为可能。
按以下顺序形成自动驾驶pipeline有5个基本步骤:
1. 定位
2. 感知
3. 预测
4. 规划
5. 控制
定位是自动驾驶汽车如何确切知道它在世界上的位置的基本要素。在这一步中,他们从上述所有传感器(传感器融合)获取数据,并使用称为卡尔曼滤波器的技术以尽可能高的精度找到它们的位置。卡尔曼滤波器是一种概率方法,它使用随时间的测量值来估计物体位置的状态。另一种广泛使用的技术是粒子滤波器。
感知是汽车如何感知和理解环境。这是计算机视觉和神经网络发挥作用的地方。稍后会有更多介绍。
在预测步骤中,汽车预测周围环境中每个目标(车辆或人)的行为。他们将如何移动,朝哪个方向移动,以何种速度移动,他们将遵循什么样的轨迹。这里使用的最常见模式之一是递归神经网络,因为它可以从过去的行为中学习并预测未来。
路径规划是可自我解释的。这是汽车计划遵循的路线或换句话说产生的轨迹。这是通过搜索算法(如A*),Lattice规划和强化学习来完成的。
最后,控制工程师从这里开始。他们根据前一步骤中生成的轨迹来相应地改变汽车的转向,加速和刹车。最常见的方法是PID控制,但还有一些其他方法,如线性二次调节器(LQR)和模型预测控制(MPC)。
顺便说一句,如果你想了解更多,请查看Udacity免费提供的两个很棒的课程:
好的,我认为现在是我们自己制造自动驾驶汽车的时候了。好吧,不是全部。但我们能做的是使用驾驶模拟器并记录相机看到的内容。然后我们可以将这些帧提供给神经网络,并希望汽车可以自己学习如何驾驶。让我们来看看…
我们将使用Udacity的开源自动驾驶汽车模拟器。要使用它,您需要安装Unity游戏引擎。现在有趣的部分:
不言而喻,我花了大约一个小时记录帧。我是认真的,不是在鬼混。
def build_model():
model = Sequential()
model.add(Lambda(lambda x: x/127.5-1.0, input_shape=INPUT_SHAPE))
model.add(Conv2D(24, kernel_size=(5, 5),strides=(2,2) ,activation='elu'))
model.add(Conv2D(36, kernel_size=(5, 5),strides=(2,2) ,activation='elu'))
model.add(Conv2D(48, kernel_size=(5, 5),strides=(2,2),activation='elu'))
model.add(Conv2D(64, kernel_size=(3, 3), activation='elu'))
model.add(Conv2D(64, kernel_size=(3, 3), activation='elu'))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(100, activation='elu'))
model.add(Dense(50, activation='elu'))
model.add(Dense(10, activation='elu'))
model.add(Dense(1))
#model.summary() return model
网络将仅输出一个值,转向角度。
def train_model(model, X_train, X_valid, y_train, y_valid): model.compile(loss='mean_squared_error', optimizer=Adam(lr=0.001))
#Fits the model on data generated batch-by-batch by a Python generator. model.fit_generator(batch_generator(data_dir, X_train, y_train, batch_size, True),
steps_per_epoch,
num_epochs,
verbose=1,
validation_data=batch_generator(data_dir, X_valid, y_valid, batch_size, False),
validation_steps=40 )
现在我们有训练的模型。它基本上克隆了我们的驾驶行为。让我们看看我们是如何做到的。为此,我们需要一个简单的服务器(socketio服务器)来实时将模型预测发送到模拟器。我不打算了解有关服务器内容的许多细节。重要的是我们使用模拟器实时生成的帧和日志预测转向角的部分。
steering_angle = float(data["steering_angle"])
throttle = float(data["throttle"])
speed = float(data["speed"])
image = Image.open(BytesIO(base64.b64decode(data["image"])))
image = np.asarray(image)
image = preprocess_data.preprocess(image)
image = np.array([image])
steering_angle = float(model.predict(image, batch_size=1))
throttle = 1.0 - steering_angle ** 2 - (speed / speed_limit) ** 2#send prediction to the simulatorsend_control(steering_angle, throttle)
结果如下:
不错。一点也不差。
我们确实做到了。我认为Udacity的模拟器是让人开始学习自动驾驶车辆的最简单方法。
总而言之,自动驾驶汽车已经开始成为主流,毫无疑问,它们比我们大多数人想象的要早得多。构建一个是非常复杂的,因为它需要从传感器到软件的许多不同组件。但在这里,我们只做了非常小的第一步。
重要的是未来就在这里。令人兴奋......
一THE END一
免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。
合作及投稿邮箱:E-mail:editor@tusaishared.com