0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

由TensorFlow Lite构建无人驾驶微型汽车,可感应车道、读取交通标志

Tensorflowers 来源:TensorFlow 作者:TensorFlow 2020-10-21 10:44 次阅读

文 /Miguel de Andrés-Clavera,产品经理,Google PI

在本文中,我想与大家分享我们用 TensorFlow Lite 为今年 Google I/O 大会构建并展示的演示。很遗憾今年没能够进行现场演示,期待这篇文章能为您带来乐趣与启发!

TensorFlow Lite
https://tensorflow.google.cn/lite

Pixelopolis 概览

Pixelopolis 是一套由 TensorFlow Lite 构建的无人驾驶微型汽车。每辆微型汽车都装配有一部 Pixel 手机,使用手机上的摄像头检测和理解周围的信号。手机使用了Pixel Neural Core 芯片(Edge TPU 支持的端侧机器学习),可感应车道、避免碰撞和读取交通标志。

Pixel Neural Core 芯片
https://blog.google/products/pixel/pixel-4/

Edge TPU
https://cloud.google.com/edge-tpu/

边缘计算是这类项目的理想实现选择。由于延迟问题,不推荐使用基于云来进行视频处理和检测物体。而设备端操作将大幅提升速度。

用户可以通过“站点”(手机端的一个应用)与 Pixelopolis 进行交互,选择车辆的目的地。车辆将自动导航到该目的地,并在应用显示车辆行程的实时视频流,这样用户便可以查看车辆周围及所检测到的物体。

△ 站点应用界面(Pixelopolis 还内置了多语言支持)

△ 车辆应用

工作原理

使用设备端的前置摄像头,我们可以实时保持车道、进行定位和目标检测。不仅如此,示例中的 Pixel 4 还支持通过 USB-C 接口的扩展,如控制电机或其他电子元件,车辆可在检测到其他车辆时停车,或者以正确的交互方式实现转向。

如果您对技术细节感兴趣,下文将继续为您介绍车辆的主要组件以及我们的构建过程。

保持车道

我们探索用于保持车道的多种模型 。作为基线,我们使用卷积神经网络 (CNN) 来检测每帧图像内的交通指示线,并以每帧为一个单位调整方向盘,这种方案效果良好。我们还通过添加了 LSTM 并使用前期拍摄的多个帧改进了方案。经过更多实验后,我们采用了与这篇论文类似的模型架构。

论文
https://images.nvidia.com/content/tegra/automotive/images/2016/solutions/pdf/end-to-end-dl-using-px.pdf

△ CNN 模型的输入和输出

模型架构

net_in = Input(shape = (80, 120, 3)) x = Lambda(lambda x: x/127.5 - 1.0)(net_in) x = Conv2D(24, (5, 5), strides=(2, 2),padding="same", activation='elu')(x) x = Conv2D(36, (5, 5), strides=(2, 2),padding="same", activation='elu')(x) x = Conv2D(48, (5, 5), strides=(2, 2),padding="same", activation='elu')(x) x = Conv2D(64, (3, 3), padding="same",activation='elu')(x) x = Conv2D(64, (3, 3), padding="same",activation='elu')(x) x = Dropout(0.3)(x) x = Flatten()(x) x = Dense(100, activation='elu')(x) x = Dense(50, activation='elu')(x) x = Dense(10, activation='elu')(x) net_out = Dense(1, name='net_out')(x) model = Model(inputs=net_in, outputs=net_out)

数据收集

在使用此模型之前,我们需要为训练车辆收集图像数据。但当时我们并没有汽车或轨道可以使用。因此,我们决定使用模拟器。我们使用 Unity 以及 Udacity 中的模拟器项目来收集车道保持数据。

△ 模拟器中的轨道中上设有多个路径点

通过在轨道上设置多个路径点,微型汽车可以行驶到不同的地点,并从中收集数据。在此模拟器中,我们每 50 毫秒收集一次图像数据和转角数据。

微型汽车
https://assetstore.unity.com/packages/essentials/asset-packs/standard-assets-for-unity-2017-3-32351

图像增强

△ 各种环境下的数据增强

由于所有数据收集工作都是在模拟器内完成,我们需要在场景中创建各种不同的环境,因为我们希望模型能够应对不同的光照、背景环境和其他噪声的影响。

我们将以下变量添加到场景中:随机的 HDRI 球体(具有不同的旋转模式和曝光值)、随机的环境亮度和颜色以及随机出现的车辆。

训练

△ 第一层神经网络的输出

由于我们仅使用模拟器来训练机器学习模型,方案有可能在现实环境中无法奏效,或无法一次尝试就成功。在我们的实验中,车辆在轨道上行驶数秒后便会因各种原因偏离轨道。

△ 早期版本中玩具车偏离了轨道

后来,我们发现这是由于我们大多使用直线轨道训练模型。为解决这种数据不均衡的问题,我们在场景中添加了各种形状的曲线。

△(左)方形轨道与(右)弯曲轨道

修正数据集不均衡的问题后,车辆便开始能够在弯道处正确转向。

△车辆在弯道处成功转弯

使用最终轨道设计进行训练

△ 最终的轨道设计

我们开始为车辆设计更复杂的路况,如:在轨道上添加多个路口,更多可选择的路线,我们希望车辆能够应对这些新路况。但是,我们立即遇到了新的问题:当车辆试图在路口处转弯时,由于看到轨道外的随机出现的物体而转向并撞到了侧方轨道。

△ 在具有多种路线的轨道中训练模型

我们测试了多种解决方案,并选择了最为简单有效的一种。我们仅裁剪图像底部 ¼ 的部分,并将其录入到车道保持模型中,然后将模型输入尺寸调整为 120x40,有效地化解了上述问题。

△ 裁剪图像底部以实现车道保持

目标检测

我们使用目标检测是出于两个目的。一是定位。每辆车都需要通过检测周围环境中的物体来获知其在城市中的位置(在本例中,我们所检测的是城市中的交通标志)。另一个则是检测其他车辆,以免车辆相撞。

选择目标检测器模型时,TensorFlow 目标检测模型库中已提供了许多模型。但针对 Pixel 4 Edge TPU 设备,我们使用了 ssd_mobilenet_edgetpu 模型。

提供
https://github.com/tensorflow/models/tree/master/research/object_detection

Pixel 4 的“Neural Core” Edge TPU 上使用 ssd_mobilenet_edgetpu 模型可实现目前最快的 MobileNet 目标检测。每帧仅用时 6.6 毫秒,该检测速度对于实时应用的要求而言已绰绰有余。

ssd_mobilenet_edgetpu
https://storage.cloud.google.com/mobilenet_edgetpu/checkpoints/ssdlite_mobilenet_edgetpu_coco_quant.tar.gz

△ Pixel 4 Edge TPU 模型性能

数据标注和模拟

我们使用模拟器和真实场景中的图像数据来训练模型。接下来,我们使用 Unreal Engine 4 开发了自己的模拟器。模拟器会生成随机物体和随机背景,以及可在 TensorFlow 目标检测 API中使用的 Pascal VOC 格式注解文件。

Unreal Engine 4
https://www.unrealengine.com/

TensorFlow 目标检测 API
https://github.com/tensorflow/models/tree/master/research/object_detection

△ 使用 UE4 的目标检测模拟器

对于从真实场景拍摄的图像,我们需要使用 labelImg 工具进行手动标注。

△ 使用 labelImg 执行数据标注

训练

△ 损失报告

我们使用 TensorBoard来监控训练进度及评估 mAP(平均精度,需要手动执行该步骤)。

TensorBoard
https://tensorflow.google.cn/tensorboard

△ TensorBoard 界面

△ 检测结果和实际标签

TensorFlow Lite

由于我们希望在运行 Android 的 Pixel 4 设备上运行机器学习模型,需将模型转换为 .tflite 格式。当然,对于 iOS 和其他设备(包括微控制器)也可使用 TensorFlow Lite。以下是我们执行的步骤:

车道保持

首先,我们使用以下代码将车道保持模型从 .h5 格式转换为 .tflite 格式:

import tensorflow as tf converter = tf.lite.TFLiteConverter.from_keras_model_file("lane_keeping.h5") model = converter.convert() file = open("lane_keeping.tflite",'wb') file.write( model ) file.close()

现在,模型已经为该 Android 项目准备就绪。接下来,我们在应用中建立车道保持类。我们从此处的示例 Android 项目着手。

目标检测我们必须将模型 checkpoint (.ckpt) 转换为 TensorFlow Lite 格式 (.tflite)

使用 export_tflite_ssd_graph.py 脚本将 .ckpt 转换为 .pb 文件(TensorFlow 目标检测 API 中已提供该脚本)

使用 toco: TensorFlow Lite Converter 将 .pb 转换为 .tflite 格式

export_tflite_ssd_graph.py
https://github.com/tensorflow/models/blob/master/research/object_detection/export_tflite_ssd_graph.py

使用 Neural Core

我们使用此处提供的 Android 示例项目。然后,我们使用以下代码修改了 delegate 以使用 Pixel 4 Edge TPU。

Interpreter.Options tfliteOptions = new Interpreter.Options(); nnApiDelegate = new NnApiDelegate(); tfliteOptions.addDelegate(nnApiDelegate); tfLite = new Interpreter(loadModelFile(assetManager, modelFilename),tfliteOptions);

此处
https://tensorflow.google.cn/lite/models/object_detection/overview

实时视频流

在用户选择目的地后,车辆将开始无人驾驶。车辆行驶期间会将其周围影像以视频流传输到“站点”手机。刚开始实现此部分时,我们意识到无法流式传输原始的视频流,因为需要在多部车载手机和“站点”手机之间传输,数据量很大。因此我们将原始图像帧压缩为 JPEG 格式,然后以 HTTP Content-type:multipart/x-mixed-replace 的 http 协议流式传输 JPEG。这样,我们就可以同时传输多个视频流,且设备之间无明显延迟。

服务器应用

服务器堆栈

服务器端使用 NodeJS 与 MongoDB。

叫车

由于站点和车辆数量众多,我们需要找到匹配两者的有效方案。我们构建了类似热门打车应用的预订系统。我们的预订系统包含 3 个步骤。首先,车辆连接到服务器,并告知服务器车辆已准备好,可供预订。然后,站点 App 连接到服务器,并向服务器查询车辆。最后,服务器将查找准备就绪的车辆并将两者匹配,并为匹配好的站点 App 和车辆 App 储存设备 ID。

导航

△ 节点/连线

由于将有多辆车穿梭于城市各处,我们需要找到一种有效的导航方法。我们采用了“节点/连线”的概念。节点是地图上的一处地点,连线是两个节点之间的路径。然后,我们将每个节点映射到城市中的实际标志处。

△ 轨道和标志位置俯视图

在站点应用中选择目的地后,站点便会向服务器发送节点 ID,接着,服务器将返回一个包含节点及其属性列表的对象,以便车辆知道行程目的地以及将看到的预期标志。

电子设备

部件

我们首先使用 NUCLEO-F411RE 作为开发板。我们选择使用 Dynamixel 配置电机

△ NUCLEO-F411RE

我们设计并开发了用于诸如电机等其他组件的屏蔽罩,以精简车辆底盘内的布线量。屏蔽罩包含三个部分:1) 电池电压测量电路,2) 带 MOSFET 的 On/Off 开关,3) 按钮。

△(左)屏蔽罩和电机,(右)电源插座、电源开关、电机启动按钮、电机重置按钮、开发板状态 LED、电机状态 LED

在后面的阶段中,我们希望缩减车辆尺寸,因此我们从 NUCLEO-F411RE 迁移到 NUCLEO-L432KC,因为其尺寸更小。

△ NUCLEO-L432KC

车辆底盘和外观

第一代

△ 第一代设计

我们设计并使用 PLA 材料 3D 打印了车辆底盘。前轮为脚轮。

第二代

△ 第二代设计

我们在开发板上添加了电池测量电路,在手机拆下后开发板后将切断电源。

第三代

△ 第三代设计

我们添加了状态 LED 指示灯,以实现轻松调试。在上一版本中,我们遇到了电机过热的问题,因此在此版本中,我们在电机上添加风扇来改善通风效果。我们还在开发板上添加了 USB Type-C 电力传输电路,使手机可以使用车载电池。

第四代

△ 第四代设计

我们将所有控制按钮和状态 LED 指示灯都移动到了车辆后部,以方便操作。

第五代

△ 第五代设计

此为最终版本,我们需要尽可能缩小车辆尺寸。首先,我们将开发板从 NUCLEO-F411RE 改为 NUCLEO-L432KC,以实现更小占用空间。然后,我们将前轮更改为球形脚轮。接下来,我们将开发板的位置重新调整到车辆顶部,并将电池叠放到开发板下方。最后,我们取消了 USB Type-C 电力传输电路,因为我们希望电池电量能够全部供应给开发板和电机而非手机,从而延长行驶时间。

性能指标

未来计划

我们计划在多个方面改善体验:

电池

目前,电机和控制器驱动板由三组 3000mAh 锂离子电池供电,我们设计了一个充电电路来充电。充电时,车辆需移动到充电站,并将电源适配器插入车辆后部进行充电。这种设计有很多不足:车辆在充电时无法行驶,且充电时间长达数小时。

△ 3000mAh 锂离子电池(左)与 18650 锂离子电池(右)

我们希望通过更换为 18650 锂电池来缩短充电过程。后者因容量大、体积小的特点,广泛用于笔记本电脑、工具和电动自行车等电子产品中。这样,当车子没电时仅需更换电池,并用电池充电器为旧电池充电,而无需将车辆一直停放在充电站。

定位

△ SLAM 定位

定位过程对于此装置而言至关重要,我们希望在应用内加入 SLAM 技术来提高定位的稳定性。我们相信这将大大改善转弯机制。

了解详情

非常感谢您的阅读!手机摄像头配合 TensorFlow,再加上一点点想象力,可以实现万千可能。希望这篇文章能够带给您灵感并将其应用于自己的项目 - 我们在本项目中收获了很多知识与经验,希望您也能在您的项目中有所收获。本文提供了多项资源的链接,供您深入研究不同领域,您也可以从 TensorFlow Hub的开发者学习社区中提供的大量机器学习模型和教程来进一步学习相关知识。

TensorFlow Hub
https://tfhub.dev/

如果您对制造无人驾驶汽车兴趣浓厚,并且想要深入了解机器学习和深度学习如何推动无人驾驶汽车行业的发展,请查看 Udacity 中的无人驾驶汽车纳米学位项目。对于希望在无人驾驶汽车的各个方面(包括计算机视觉传感器融合与定位)获得全面培训的工程师和学生而言,此项目是理想的选择。

无人驾驶汽车纳米学位项目
https://www.udacity.com/course/self-driving-car-engineer-nanodegree--nd013

致谢

本项目的实现离不开以下杰出才干的专业与付出:Sina Hassani、Ashok Halambi、Pohung Chen、Eddie Azadi、Shigeki Hanawa、Clara Tan Su Yi、Daniel Bactol、Kiattiyot Panichprecha Praiya Chinagarn、Pittayathorn Nomrak、Nonthakorn Seelapun、Jirat Nakarit、Phatchara Pongsakorntorn、Tarit Nakavajara、Witsarut Buadit、Nithi Aiempongpaiboon、Witaya Junma、Taksapon Jaionnom 和 Watthanasuk Shuaytong。

责任编辑:xj

原文标题:Pixelopolis:由 TensorFlow Lite 构建无人驾驶微型汽车

文章出处:【微信公众号:TensorFlow】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 无人驾驶
    +关注

    关注

    98

    文章

    4061

    浏览量

    120534
  • 微型汽车
    +关注

    关注

    0

    文章

    2

    浏览量

    5373
  • tensorflow
    +关注

    关注

    13

    文章

    329

    浏览量

    60536
  • TensorFlow Lite
    +关注

    关注

    0

    文章

    26

    浏览量

    634

原文标题:Pixelopolis:由 TensorFlow Lite 构建无人驾驶微型汽车

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    智能驾驶在城市交通中的应用

    智能驾驶在城市交通中的应用日益广泛,以下是对其在城市交通中几个主要应用场景的分析: 一、无人驾驶出租车/网约车服务 提高出行效率 :无人驾驶
    的头像 发表于 10-23 15:55 711次阅读

    特斯拉推出无人驾驶Model Y

    北京时间10月11日,特斯拉“WE,ROBOT”发布会正式举行,在特斯拉发布会上,特斯拉推出无人驾驶Model Y。 在发布会上;埃隆·马斯克乘坐Robotaxi亮相。马斯克透露预计特斯拉明年将在
    的头像 发表于 10-11 16:05 1064次阅读

    文远知行获加州无人驾驶汽车载人测试许可

    中国自动驾驶领域的创新先锋文远知行,近日传来喜讯,正式获得美国加州公用事业监管机构的批准,获准在加州进行无人驾驶汽车的载人测试。这一里程碑式的突破,标志着文远知行的自动
    的头像 发表于 08-14 17:42 630次阅读

    FPGA在自动驾驶领域有哪些应用?

    低,适合用于实现高效的图像算法,如车道线检测、交通标志识别等。 雷达和LiDAR处理:自动驾驶汽车通常会使用雷达和LiDAR(激光雷达)等多种传感器来获取环境信息。FPGA能够协助完成
    发表于 07-29 17:09

    5G赋能车联网,无人驾驶引领未来出行

    无人驾驶车联网应用已成为智能交通领域的重要发展趋势。随着无人驾驶技术的不断进步和5G网络的广泛部署,5G工业路由器在无人驾驶车联网中的应用日益广泛,为
    的头像 发表于 07-24 10:10 806次阅读
    5G赋能车联网,<b class='flag-5'>无人驾驶</b>引领未来出行

    无人驾驶汽车应用晶振TSX-3225

    近几年以来,无人产品推出了太多的产品,有无人超市,无人机,无人售货机,无人驾驶汽车等多种科技在高
    的头像 发表于 06-18 10:55 422次阅读
    <b class='flag-5'>无人驾驶</b><b class='flag-5'>汽车</b>应用晶振TSX-3225

    PMP30781.1-微型汽车 2W 辅助电源 PCB layout 设计

    电子发烧友网站提供《PMP30781.1-微型汽车 2W 辅助电源 PCB layout 设计.pdf》资料免费下载
    发表于 05-17 15:10 0次下载
    PMP30781.1-<b class='flag-5'>微型汽车</b> 2W 辅助电源 PCB layout 设计

    现代汽车、起亚与百度签署智能网联汽车战略合作框架协议

    现代汽车与起亚携手百度,共同在北京签署了智能网联汽车领域的战略合作框架协议。这一协议标志着双方将在智能网联汽车无人驾驶、智能
    的头像 发表于 05-08 11:25 702次阅读

    百度开放车道级地图数据,助力高级驾驶无人驾驶

    5月1日期,百度地图将向高级辅助驾驶行业提供全量车道级地图数据(LD地图)。该数据已经覆盖全国360个地级市及超过360万公里的高速公路及城市道路。值得关注的是,该LD轻图已通过相关车企的高级辅助驾驶
    的头像 发表于 04-30 16:54 1305次阅读

    用于自动驾驶,无人驾驶领域的IMU六轴陀螺仪传感器:M-G370

    用于自动驾驶,无人驾驶的IMU惯导模块六轴陀螺仪传感器:M-G370。自2020年,自动驾驶,无人驾驶已经迎来新突破,自动驾驶
    发表于 04-02 11:44 0次下载

    吉利汽车成功完成全球首个无人驾驶漂移!

    吉利汽车成功完成全球首个无人驾驶漂移!
    的头像 发表于 03-27 14:17 765次阅读
    吉利<b class='flag-5'>汽车</b>成功完成全球首个<b class='flag-5'>无人驾驶</b>漂移!

    32.768K晶振X1A000141000300适用于无人驾驶汽车电子设备

    科技的发展带动电子元器件的发展电子元器件-“晶振”为现代的科技带来了巨大的贡献,用小小的身体发挥着大大的能量。近两年无人驾驶汽车热度很高,不少汽车巨头都已入局。但这项技术的难度不小,相信在未来几年
    发表于 03-20 14:21 0次下载

    5G车载路由器引领无人驾驶车联网应用

    随着无人驾驶技术的不断发展,车联网正逐渐成为实现智能交通的重要组成部分。5G车载路由器将在车联网的应用中起到至关重要的作用,它能够满足无人驾驶应用的低时延、高速率和实时控制等需求,进一步推动
    的头像 发表于 02-19 11:48 812次阅读
    5G车载路由器引领<b class='flag-5'>无人驾驶</b>车联网应用

    小马智行启动深圳中心城区无人驾驶商业化运营

    小马智行近日宣布,已在深圳市宝安区启动中心城区无人驾驶商业化运营。该公司已获得深圳市宝安区颁发的智能网联汽车无人商业化试点许可,标志着其在无人驾驶
    的头像 发表于 02-04 10:53 918次阅读

    无人驾驶汽车,不听指挥,只看路灯?

    无人驾驶洞见分析
    电子发烧友网官方
    发布于 :2024年02月02日 18:04:30