资源行业动态使用深度学习完成自动驾驶

使用深度学习完成自动驾驶

2019-12-20 | |  62 |   0

原标题:使用深度学习完成自动驾驶

来源:AI 研习社       链接:https://www.yanxishe.com/TextTranslation/1056


原标题:Self-driving cars using Deep Learning 毫无疑问,自动驾驶汽车将成为未来的标准运输方式。从优步和谷歌到丰田和General Motors的大公司都愿意花费数百万美元来实现这一目标,因为预计未来市场将达到数万亿美元。在过去的几年里,我们看到该领域发生了巨大的变化,优步,特斯拉,Waymo的汽车在他们的记录中总共有800万英里。


当然,由于硬件和软件方面许多不同技术的进步,自动驾驶汽车现在已成为现实。激光雷达传感器,摄像机,GPS,超声波传感器正在协同工作,以便从各种可能的来源接收数据。使用高级算法实时分析这些数据,使自动驾驶仪功能成为可能。

1576819837764633.png

按以下顺序形成自动驾驶pipeline有5个基本步骤:

1. 定位

2. 感知

3. 预测

4. 规划

5. 控制


定位是自动驾驶汽车如何确切知道它在世界上的位置的基本要素。在这一步中,他们从上述所有传感器(传感器融合)获取数据,并使用称为卡尔曼滤波器的技术以尽可能高的精度找到它们的位置。卡尔曼滤波器是一种概率方法,它使用随时间的测量值来估计物体位置的状态。另一种广泛使用的技术是粒子滤波器。


感知是汽车如何感知和理解环境。这是计算机视觉和神经网络发挥作用的地方。稍后会有更多介绍。


在预测步骤中,汽车预测周围环境中每个目标(车辆或人)的行为。他们将如何移动,朝哪个方向移动,以何种速度移动,他们将遵循什么样的轨迹。这里使用的最常见模式之一是递归神经网络,因为它可以从过去的行为中学习并预测未来。


路径规划是可自我解释的。这是汽车计划遵循的路线或换句话说产生的轨迹。这是通过搜索算法(如A*),Lattice规划和强化学习来完成的。


最后,控制工程师从这里开始。他们根据前一步骤中生成的轨迹来相应地改变汽车的转向,加速和刹车。最常见的方法是PID控制,但还有一些其他方法,如线性二次调节器(LQR)和模型预测控制(MPC)。


顺便说一句,如果你想了解更多,请查看Udacity免费提供的两个很棒的课程:


好的,我认为现在是我们自己制造自动驾驶汽车的时候了。好吧,不是全部。但我们能做的是使用驾驶模拟器并记录相机看到的内容。然后我们可以将这些帧提供给神经网络,并希望汽车可以自己学习如何驾驶。让我们来看看…


我们将使用Udacity的开源自动驾驶汽车模拟器。要使用它,您需要安装Unity游戏引擎。现在有趣的部分:

1576819883987245.png


不言而喻,我花了大约一个小时记录帧。我是认真的,不是在鬼混。

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)

结果如下:

333.png

不错。一点也不差。


我们确实做到了。我认为Udacity的模拟器是让人开始学习自动驾驶车辆的最简单方法。


总而言之,自动驾驶汽车已经开始成为主流,毫无疑问,它们比我们大多数人想象的要早得多。构建一个是非常复杂的,因为它需要从传感器到软件的许多不同组件。但在这里,我们只做了非常小的第一步。


重要的是未来就在这里。令人兴奋......

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:状态估计:卡尔曼滤波器

下一篇:用 TensorFlow 拯救雨林

用户评价
全部评价

热门资源

  • 国内人才报告:机...

    近日,BOSS 直聘职业科学实验室 &BOSS 直聘研究院...

  • AI使物联网更智能...

    看到微软对物联网和人工智能的结合感兴趣是一个明...

  • 推荐一批学习自然...

    这里推荐一批学习自然语言处理相关的书籍,当然,...

  • 安防智能化大势下...

    大部分传统安防设备不仅拍摄视野有限,而且无法事...

  • 20亿创业基金、10...

    近日,杭州举办了建设国家新一代人工智能创新发展...