深度学习技术在自动驾驶中的应用与挑战

2023-11-10

导读:深度学习技术经过近几年井喷式的发展,在很多领域都得到了广泛的应用。在自动驾驶系统中,深度学习技术也起到了至关重要的作用,同时也面临着非常多的挑战。我们一直在探索,在一个安全、稳定的自动驾驶产品中,深度学习技术应该有着怎样的作用边界,又如何能最好地发挥其优势。本次分享的主题为深度学习技术在自动驾驶中的应用与挑战,主要包括:

  • 深度学习技术

  • 端到端:从感知到控制

  • 深度学习的特点

  • 应用策略

01

深度学习技术

深度学习技术在2012年开始爆发,由AlexNet在ImageNet数据集上达到了一个很高的分类准确率,横扫各种CV、NLP任务,在强化学习领域也大展身手,尤其擅长玩游戏,比如deepmind最近在研究打星际争霸。右边是各种网络图,大家可以参考文末的链接。

02

端到端:从感知到控制

16年的时候,英伟达研究了end to end神经网络,左侧输入左中右三个Camera的image,直接通过CNN输出转向的指令。如demo截图中,测试人员把手伸出了天窗,表示他没有操控车辆,然后车辆自动实现转向。不过这种方式存在2个隐患:

① 因为是end to end 如果出现问题,完全不知道是哪里出了问题,很难去校正模型。

② 对于转向这个指令,需要考虑的因素非常多,一些微小的场景变化就会引发不同的转向指令(如路上多了一个石块),因此,必须覆盖到所有的情况,才可以把这个模型训练的非常好,这需要海量的数据。

03

深度学习的特点

优势:

  • 自主挖掘数据中存在的特征和模式,大幅降低人工特征工程的需求

  • 对于定义清晰的问题,有较强的可扩展性(加数据或数据增强)

局限性:

  • 可解释性差,可能会“放飞自我”,不太可控

  • 算力要求较高

04

应用策略

在要求很高稳定性和安全性的自动驾驶应用中,如何发挥深度学习的优势,以及规避深度学习的弱点,我们总结了几点应用策略,这里和大家分享下:

1. 尽量应用于定义清晰的基本任务

基本任务,是指只需要回答“是什么”或者“在哪”的任务。定义清晰,是指有明确的目标或者监督信息,在强化学习语境中,就是有明确的reward function。如CV中的目标检测、图像分割等。下面分享下应用实例:

① 图像中的车道检测

Demo

Demo是我们用分割模型做的Ego lane drivable area segmentation;上图右侧是我们做的instance level lane marker segmentation,网络结构如图所示,它是一个encoder decoder based,然后做一个segmentation branch和一个embedding branch,最后将2个结果合起来。

② 图像中的障碍物检测

上图是一些比较有挑战的场景:拥挤的路况、远处的障碍物、雨天、穿过高架桥等。障碍物检测比较成熟,这里不再细讲,常用的算法有:

  • Anchor based:YOLO v1,v2,v3/SSD/Faster RCNN

  • Anchor free:Centernet/FoveaBox

2. 多方法融合,弥补单一模型错误,覆盖长尾场景

在实际应用中,目标检测模型难免会产生误检和漏检,如左图中的皮卡和卡车很明显就被漏掉了。另外,对于训练集少见或没见过的特殊场景,深度神经网络往往无能为力,一旦出现这种情况,往往非常危险。对应的,我们的思路是:

① 结合其他任务模型,辅助降低漏检率

比如,有另外的一个模型可以识别出可行驶区域(也就是路,除了路以外的都是障碍物),再加上我们的目标检测,就可以对之前的案例进行弥补,如上图所示。

② 结合其他传感器,多传感器融合

另一种更常用,更安全的方法就是激光雷达,进行多传感器融合,如将激光雷达投影到image,可以很轻松的建模出可行驶的道路和障碍物。

3. 拆分任务,增加模型的可解释性和可控性

将end2end模型任务拆分成更加基本定义、更加清晰的多阶段子任务,增加整体任务的可解释性,减轻模型的学习负担。同时也更加方便地利用其他算法和规则对深度学习模型的输出结果做限制,防止其“放飞自我”。

①  自车行驶路径参考线:

我们在做Planning时,我们需要做一个自己车本身轨迹的参考线,以其为参考生成最终的轨迹,并且做一些速度的规划。如果我们没有高精地图,我们可能会采用E2E approach的方法,感知到一张图片之后利用deep CNN直接生成参考轨迹(如上图最右侧),这样单独的参考线通常是不能用的。所以我们需要把任务进行拆解。

拆解:

  • 车道识别+车辆跟踪:先识别车道再识别车

  • 利用车道与车辆信息拟合路径:把车道和车放入场景中,再利用车的朝向、轨迹、速度分布以及车道线的几何形状拟合出最终的路径参考线。

这是一个更可控的方案。

② 其他车辆轨迹预测

在学术界有一些E2E approach的方法,利用深度学习模型直接预测车辆轨迹,从过去的轨迹直接预测出未来的轨迹。

我们认为更好的方式,还是进行拆分:

  • 意图预测(横向、纵向),利用RNN、CNN先做一些意图预测(左转、右转或者直行),纵向就是匀速、加速或者减速,做这种简单的意图分类,将这个问题的维度缩小。

  • 然后,利用车辆(如动力学)模型、车道信息生成平滑预测轨迹。

最后,我们还在和机器一起学习成长。今天的分享就到这里,谢谢大家。

05

参考资料

1. https://deepmind.com/blog/article/alphastar-mastering-real-time-strategy-game-starcraft-ii

2. https://en.wikipedia.org/wiki/Deep_learning

3. http://ml.world/2016/09/neural-network-zoo/

4. End to End Learning for Self-Driving Cars

5. Towards End-to-End Lane Detection: an Instance Segmentation Approach

6. An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling

分享嘉宾

江頔

智加科技 | 技术专家


阿里巴巴开源大数据技术团队成立Apache Spark中国技术社区,定期推送精彩案例,技术专家直播,问答区近万人Spark技术同学在线提问答疑,只为营造纯粹的Spark氛围,欢迎钉钉扫码加入!

对开源大数据和感兴趣的同学可以加小编微信(下图二维码,备注“进群”)进入技术交流微信群。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习技术在自动驾驶中的应用与挑战 的相关文章

  • Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案

    http blog csdn net boonya article details 70157820 Mybatis与JDBC批量插入MySQL数据库性能测试 Author boonya Date 2017 04 13 1 背景 系统中需要
  • 每日一题(设计循环队列)

    每日一题 设计循环队列 622 设计循环队列 力扣 LeetCode 1 题意解读 本题只能为队列开辟k个单位空间 并且只能利用这几个空间进行数据的存储 思路 本题使用数组来实现队列是比较方便的 首先定义两个变量 front和rear变量
  • 分组数据方差公式_用Excel算分组方差《excel怎么求分组的数据的标准差》

    现在等excel求分组数据标准差 在excel中求数据的标准以按照以下步行操作 步 打开excel表格 将需要求的一列数输入表格中 如下图 如果你要将所求的结果放在这一列数的最下面 你就将鼠标放在这一列数的最后面的单元格点击 第二步 选定工
  • 【GCC】gcc编译器的使用

    gcc编译器的使用 一 gcc编译过程 精简 1 gcc使用示例 2 执行 gcc o hello hello c v 时 可以查看到这些步骤 3 可以手工执行以下命令体验一下 二 gcc常用编译选项 三 怎么编译多个文件 四 制作 使用动
  • 内存对齐,导致char型数组指针转化为float型指针出现的问题

    前阵子在做一个无线调参软件时 需要把一个float型的变量从上位机 qt平台编写 发给下位机 stm32 然后我采取的做法是将储存float变量的四个字节里面的数据通过串口以此发给下位机 然后下位机用一个char 4 数组进行接收 然后将c
  • [QT入门篇]编程基础知识

    一 坐标体系 在 Qt 中窗口的显示是需要指定位置的 这个位置是通过坐标来确定的 所有坐标的选取都是基于坐标原点来确定的 Qt的坐标原点在窗口的左上角 在一个 Qt 窗口中一般都有很多子窗口内嵌到这个父窗口中 其中每个窗口都有自己的坐标原点
  • Python-Pytorch框架-实现AI自动瞄准(下)

    OpenCV与Ptorch框架搭建一个利用目标骨骼关键点检测实现AI自动瞄准的娱乐项目 该项目仅供学习OpenCV Ptorch框架 游戏自动化等参考 该项目思路大致分为如下步骤 利用Pywin32以及OpenCV获取游戏窗口图像 数据集获
  • The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler

    今天使用Spring mvc 尝试文件的上传下载 URL 访问的时候 报如下错误 Type Exception Report Message No adapter for handler com cbss FileUploadControl
  • 【docker】一、入门(kali linux下安装与命令)

    目录 1 什么是docker 2 docker中三个概念 仓库 镜像 容器的理解 3 安装 4 kali命令集 5 docker info有一个小警告 WARNING No swap limit support 6 docker命令集 7
  • 在centos7.6编译kurento

    一 前期准备 1 1 升级boost库 我升级的版本1 65 0 解决后面编译找不到宏定义错误 boost库需要手动编译 网上一大坨 1 2 安装按各种依赖库 通过yum安装即可 libevent libevent devel gettex
  • 【C语言】初阶测试 (带讲解)

    目录 选择题 1 下列程序执行后 输出的结果为 2 以下程序的输出结果是 3 下面的代码段中 执行之后 i 和 j 的值是什么 4 以下程序的k最终值是 5 以下程序的最终的输出结果为 6 下列描述中正确的是 7 C 语言规定 在一个源程序
  • Java经典面试题详解:nextclouddocker部署

    kafka面试基础 17 1 Kafka的用途有哪些 使用场景如何 2 Kafka中的ISR AR又代表什么 ISR的伸缩又指什么 3 Kafka中的HW LEO LSO LW等分别代表什么 4 Kafka中是怎么体现消息顺序性的 5 Ka
  • 什么是lambda函数?使用lambda函数有什么好处?

    一 什么是lambda函数 Python支持一种有趣的语法 它允许你快速定义单行的最小函数 这些叫做lambda的函数是从Lisp中借用来的 可以被用在任何需要函数的地方 lambda 函数是一个可以接收任意多个参数 包括可选参数 并且返回
  • 使用C/C++编程控制LEGO EV3

    环境搭建 1 安装Eclipse 选择Eclipse IDE for C C Developers 网址 http www eclipse org downloads 2 安装c4ev3 网址 https c4ev3 github io 该
  • Vue项目更改项目图标

    Vue项目更改图标 Vue新建项目后会有默认图标 如下图左上角 方法一 替换图标图片 找到public文件下的favicon ico 把自己的图标替换掉favicon ico 修改成功 方法二 更换图标路径 找到public文件 把要加的图
  • vray渲染不了 全白_救急!!! vray for sketchup 渲染出来全白 !!求解决。。。重金...

    你说的白强是不是打的VR灯光啊 如果是把VR灯光勾成不可见 另外总体看你的灯光太亮了 调低即可 追问有时候我用Vray渲染 它有一个等待的时间 但是等完了又什么都没生成 就像我刚才没使用一样 这个是为什么呢 难道是有些不合理的地方 比如我在
  • c++模板元

    模版元 主要解决递归加速 单纯的递归会反复调用 函数等待 返回 所需时间多 模版元编译的时候慢 代码会增加 把运行时间节约在编译时 template
  • 深度解析V-REP Remote API (MATLAB) 的应用

    OS Win10 x64 V REP V REP PRO EDU 3 5 0 MATLAB 2016b 下面我们来聊一聊V REP中MATLAB远程API的应用 如果你只对V REP有基本了解 对V REP的远程API不熟悉 强烈建议你先阅
  • LeetCode高频算法刷题记录10

    文章目录 1 旋转图像 中等 1 1 题目描述 1 2 解题思路 1 3 代码实现 2 组合总和 中等 2 1 题目描述 2 2 解题思路 2 3 代码实现 3 回文链表 简单 3 1 题目描述 3 2 解题思路 3 3 代码实现 4 字符
  • 基于YOLOv5的血细胞识别和计数

    VOC格式标注转为yolov5格式 原数据格式是xml文件对目标细胞注释 现在需要将这种注释转换为yolov5所需的格式 即每个图像对应一个txt文件 文件中存储该图像中全部细胞的类别和坐标 一行存储一个细胞的信息 如下图 编写脚本进行注释

随机推荐

  • [Unity]各种Debug方法笔记

    无论是萌新还是Dalao 遇到Bug总是难免的 拒绝反驳 所以一些好的Debug方法就显得尤为重要 这篇文章既写给自己 也给看到文章的大家一个参考 内容主 quan 要 bu 是脚本的Debug方法 ps 如有出错漏记得以我能看到的方式指出
  • COCO数据处理(二)根据自己提取的类的json文件生成对应的mask二值图并画在原图上

    文章目录 COCO数据集根据json文件生成mask二值图 文件目录 目录说明 代码 一 生成mask图 代码 二 将mask图画在原图上 效果图 COCO数据集根据json文件生成mask二值图 文件目录 目录说明 data coco a
  • java中JDBC当中请给出一个DataSource的HelloWorld例子

    马克 to win 在前面 的jdbc的Helloworld程序当中 我们用DriverManager来获取数据库连接 事实上通过这种方法获取数据库连接 是比较耗费计算机资 源的 当然了 这也是没有办法的事儿 就像我们买贵书必须花大价钱一样
  • 【Android】App开发-布局篇

    UI的开发离不开各个组件的精准布局 在我们学习了控件之后 控件篇 我们就需要对这些控件进一一排布 让它们在各个指定的位置 目录 LinearLayout线性布局 RelativeLayout布局 FrameLayout布局 TableLay
  • 【Python爬虫】将爬下来的数据保存到redis数据库里面

    redis库中的Redis类对Hash数据类型操作的常用方法 方法名 具体说明 hset name key value 哈希中添加一个键值对 hmset name mapping 设置哈希中的多个键值对 hmget name keys ar
  • 逻辑架构和物理架构

    逻辑架构和物理架构 理论上划分了5种架构视图 分别是 逻辑架构 开发架构 运行架构 物理架构 数据架构 逻辑架构 逻辑架构关注的是功能 包含用户直接可见的功能 还有系统中隐含的功能 或者更加通俗来描述 逻辑架构更偏向我们日常所理解的 分层
  • HTML学习(二)HTML基础

    以这个为例 h1 我的第一个标题 h1 p 我的第一个段落 p DOCTYPE 前用来申明这是一个html 这里的html不区分大小写 HTML标题 HTML 标题 Heading 是通过 h1 h6 标签来定义的 h1 1级标题 h1 H
  • R语言优雅地修改列名称

    R语言优雅地修改列名称 在R语言中 修改数据框 DataFrame 或矩阵 Matrix 的列名称是一项常见的任务 通过优雅地修改列名称 可以提高代码的可读性和可维护性 在本文中 我将介绍几种优雅的方法来修改列名称 并提供相应的源代码示例
  • GPU计算

    文章目录 GPU计算 1 GPU和CPU的区别 2 GPU的主要参数解读 3 如何在pytorch中使用GPU 4 市面上主流GPU的选择 GPU计算 1 GPU和CPU的区别 设计目标不同 CPU基于低延时 GPU基于高吞吐 CPU 处理
  • 95-34-025-Context-AbstractChannelHandlerContext

    文章目录 1 概述 2 继承体系 3 类签名 4 关键字段 5 构造方法 6 ChannelRead事件 6 1 findContextInbound 7 invokeHandler 1 概述 2 继承体系
  • tensorrt转换模型进行了哪些操作

    对于网络layer graph进行的操作 消除输出未使用的层 消除相当于无操作的操作 卷积 偏置和ReLU运算的融合 具有足够相似参数和相同源张量的运算聚合 例如 GoogleNet v5的初始模块中的1x1卷积 inception结构中同
  • DW9718AF.c

    Copyright C 2015 MediaTek Inc This program is free software you can redistribute it and or modify it under the terms of
  • ERP系统总体解决方案 附下载地址

    企业资源计划即 ERP Enterprise Resource Planning 由美国 Gartner Group 公司于1990年提出 企业资源计划是 MRP II 企业制造资源计划 下一代的制造业系统和资源计划软件 除了MRP II
  • 大数据学习框架及指南

    Hadoop生态圈 一 采集 数据从哪里来 主要包括flume等 一 存储 海量的数据怎样有效的存储 主要包括hdfs Kafka 二 计算 海量的数据怎样快速计算 主要包括MapReduce Spark storm等 三 查询 海量数据怎
  • 数据结构与算法笔记2(线性表)

    1 线性表 1 1线性表是一种逻辑关系 见绪论 1 2定义 是具有相同类型的n个元素的有限序列 其中n为表长 n 0时为空表 关键词 相同类型 一般处理的数据元素都是相同类型 比如一个人那么都是人 而不会把人与车放在一起 关键词 有限序列
  • Java泛型知识点整理

    Java泛型知识点整理 Java泛型 泛型提供了编译时类型安全检测机制 该机制允许程序员在编译时检测到非法的类型 泛型的本质是参数化类型 也就是说所操作的数据类型被指定为一个参数 比如我们要写一个排序方法 能够对整型数组 字符串数组甚至其他
  • ConcurrentHashMap为什么是线程安全的?

    1 ConcurrentHashMap的原理和结构 我们都知道Hash表的结构是数组加链表 就是一个数组中 每一个元素都是一个链表 有时候也把会形象的把数组中的每个元素称为一个 桶 在插入元素的时候 首先通过对传入的键 key 进行一个哈希
  • MapReduce的Job提交流程

    编写一个简单的WordCount程序 Mapper import org apache hadoop io LongWritable import org apache hadoop io Text import org apache ha
  • Tip of the Week #49: Argument-Dependent Lookup

    Tip of the Week 49 Argument Dependent Lookup Originally posted as totw 49 on 2013 07 14 whatever disappearing trail of i
  • 深度学习技术在自动驾驶中的应用与挑战

    导读 深度学习技术经过近几年井喷式的发展 在很多领域都得到了广泛的应用 在自动驾驶系统中 深度学习技术也起到了至关重要的作用 同时也面临着非常多的挑战 我们一直在探索 在一个安全 稳定的自动驾驶产品中 深度学习技术应该有着怎样的作用边界 又