Trajectory-guided Control Prediction for End-to-end Autonomous Driving论文学习

1. 解决了什么问题?

端到端自动驾驶方法直接将原始传感器数据映射为规划轨迹或控制信号,范式非常简洁,从理论上避免了多模块设计的错误叠加问题和繁琐的人为规则设计。当前的端到端自动驾驶方法主要有两条独立的研究路线,要么基于规划轨迹来运行控制器,要么直接预测控制信号。端到端模型的预测输出一般有两种形式:轨迹/路径点和直接控制动作。但是,至于哪一种更好仍没有定论。

预测控制信号可以直接用于车辆上,而规划轨迹则需要额外的控制器如 PID 控制器来将规划轨迹转化为控制信号。轨迹预测有一项优点,就是它所考虑的时间范围要更长,可以和其它模块结合使用(如 multi-agent 轨迹预测、语义或占用预测模块),避免碰撞发生的概率。但是,将轨迹转化为控制行为并不容易。工业界通常会采用复杂的控制算法来实现可靠的轨迹跟随。简单的 PID 控制器在大转弯或红灯启动的场景可能表现很糟。基于控制的方法直接优化控制信号,但它们关注于当前的步骤,对于突然出现的障碍物可能反应迟钝,造成碰撞发生。不同步骤的控制预测是独立的,会造成车辆的行为不稳定、不连续。下图展示了这两种方法典型的失败例子。

在这里插入图片描述
一个直接的办法就是分别训练一个控制预测模型和轨迹规划模型,然后直接融合它们的输出结果。但是,这会造成模型 size 过大,忽略二者之间潜在的联系。于是本文提出了 TCP,轨迹引导的控制信号预测。TCP 将这两类方法在一个框架中结合,发挥各自的优势。它可以看作为一个多任务学习架构,有一个共享的主干提取特征,这既降低了模型计算量,也能提升泛化能力。TCP 有两个分支,一个用于轨迹规划,一个用于直接控制。轨迹分支预测未来的轨迹,控制分支包括一个创新的多步骤预测机制,该机制可推理当前行为和未来状态之间的关系。这两个分支相互连接,在每个时刻轨迹分支都可以指导控制分支。然后将这两个分支的输出融合,优势互补。

尽管轨迹规划会考虑未来的多个步骤,但以行为克隆的方式直接学习控制信号通常会只关注于当前的时间步骤,因为我们假定每对“状态-动作”都是独立的,而且是同分布(IID)的。但是,因为驾驶任务是一个序列决策问题,这个假设并不准确,可能会对长期的表现造成负面效果。为了缓解这个问题,作者提出了预测未来多步骤的控制行为。但是,多步骤控制过程需要和环境发生交互。于是作者用一个 GRU 时域模块来学习自车和环境的交互,渐进地处理每个时刻的特征表示,隐式地考虑交通参与者的动态行为、它们之间的关系,以及环境的变化(红绿灯变化)。

此外,为了让多步骤预测机制输出准确的控制信号,模型应该从当前的传感器输入中获取准确的位置信息。例如,自车在前几个时间步骤更关注邻近的区域,而在后面的时间步更关注较远的区域。其实这类信息已经被部分编码在轨迹分支里了,于是作者通过注意力机制,在轨迹预测分支中定位这些重要有用的区域,引导控制预测分支在每个未来时刻以相应的方式关注这些区域。这样,模型就可以推理出如何优化当前的控制预测。有了这俩分支的预测轨迹和控制信号,作者提出了一个基于场景的融合机制,自适应地结合两种形式的输出。在 CARLA 模拟器的闭环城区驾驶场景上对本文方法做了评测,即使只用单目输入,该方法也能在 CARLA leaderboard 上排到第一名,遥遥领先于其它多传感器或融合算法。代码位于:https://github.com/OpenPerceptionX/TCP。

2. 提出了什么方法?

2.1 问题设定

问题表示
给定由传感器信号 i \mathbf{i} i组成的状态 x \mathbf{x} x,车辆速度 v v v,包括一个离散导航指令的高层级导航信息 g \mathbf{g} g,以及目的地的坐标,端到端模型需要输出控制信号 a \mathbf{a} a(由纵向控制信号油门 t h r o t t l e ∈ [ 0 , 1 ] throttle \in [0,1] throttle[0,1]、刹车 b r a k e ∈ [ 0 , 1 ] brake \in [0,1] brake[0,1] 和横向控制信号 s t e e r ∈ [ − 1 , 1 ] steer \in [-1, 1] steer[1,1] 组成)。

传统方法要么用轨迹输出,要么用控制输出来解决这个问题。TCP 将二者结合,轨迹分支预测规划轨迹,控制分支由轨迹分支引导,输出当前和未来多步的控制信号。以监督的方式训练这两个分支。专家直接输出每一步骤的控制信号,用 ground-truth 轨迹来监督预测轨迹并不严格满足模仿学习中关于行为克隆的设定。Ground-truth 轨迹包括专家的未来行为和环境的状态,因此作者用 ground-truth 轨迹来监督轨迹预测分支。至于控制分支,用专家控制信号来监督当前的控制预测就是一种行为克隆,可表示为:

arg min ⁡ θ E ( x , a ∗ ) ∼ D [ L ( a ∗ , π θ ( x ) ) ] \argmin_{\theta}\mathbb{E}_{(\mathbf{x,a}^\ast)\sim D}[\mathcal{L}(\mathbf{a}^\ast, \pi_\theta(\mathbf{x}))] θargminE(x,a)D[L(a,πθ(x))]

其中 D = { ( x , a ∗ ) } D=\lbrace(\mathbf{x,a}^\ast)\rbrace D={(x,a)}是一个由专家状态-行为对组成的数据集。 π θ \pi_\theta πθ表示控制分支预测的策略, L \mathcal{L} L是损失函数,评估专家行为和模型预测行为之间的距离。通过专家驾驶车辆与世界交互,得到该数据集。每条路线都是一个轨迹 ξ = ( x 0 , a 0 ∗ , x 1 , a 1 ∗ , , . . . , x T ) \xi=(\mathbf{x}_0,\mathbf{a}^\ast_0,\mathbf{x}_1,\mathbf{a}^\ast_1,,...,\mathbf{x}_T) ξ=(x0,a0,x1,a1,,...,xT),是一个状态行为对的序列 { ( x i , a i ∗ ) } i = 0 T \lbrace(\mathbf{x}_i,\mathbf{a}^\ast_i)\rbrace_{i=0}^T {(xi,ai)}i=0T,添加到数据集 D D D

专家演示
作者选用 Roach 作为专家。Roach 是一个简单的模型,用强化学习训练,信息包括道路、车道线、路线、车辆、行人、交通灯、停止标志等,全部在 2D BEV 图像上渲染。相对于人为规则设计的专家,基于学习产生的专家能迁移更多的信息。此外,还有一个特征损失,迫使学生模型的最后一个输出头的隐含特征去近似专家特征。还有一个值损失作为学生模型的辅助任务,预测期望返回值。

在这里插入图片描述

2.2 架构设计

概览

如上图所示,整体架构包括一个输入编码阶段和两个后续分支。输入图像 i \mathbf{i} i输入一个 CNN 图像编码器,如 ResNet,生成特征图 F \mathbf{F} F。同时,导航信息 g \mathbf{g} g和当前的速度 v v v concat 到一起,产生输入 m \mathbf{m} m,然后输入进一个 MLP 编码器,输出测量特征 j m \mathbf{j}_m jm。然后,两个分支共享编码特征,做后续的轨迹和控制预测。控制分支包括一个多步骤预测设计,受到轨迹分支引导。最后,采用一个基于场景的融合机制,以最佳的效果来结合这俩分支的输出。

2.2.1 轨迹规划分支

控制预测直接预测控制信号,轨迹预测分支则不同,它首先产生一条由 K K K步路径点组成的轨迹,供自车去追随,然后用低层级控制器来处理该轨迹,得到最终的控制动作。有了输入编码器的共享特征,对图像特征图 F \mathbf{F} F做平均池化,然后和测量特征 j m \mathbf{j}_m jm concat 到一起,得到 j traj \mathbf{j}^{\text{traj}} jtraj。将 j traj \mathbf{j}^{\text{traj}} jtraj输入一个 GRU,逐个地以自回归的方式产生未来的路径点,从而得到最终的规划轨迹。

我们有两个 PID 控制器,分别对应纵向和横向控制。对于规划轨迹,首先计算连续路径点之间的向量。这些向量的量级反映了速度,会被送入到纵向控制器来产生油门和刹车控制动作,朝向角则送入横向控制器得到 steer 动作。

2.2.2 多步骤控制预测分支

控制模型只基于当前的输入来预测当前的控制动作,监督训练只是行为克隆,依赖于独立同分布假设。当测试数据的分布偏移时,该假设显然不能成立,由于闭环测试需要序列决策,历史行为会影响未来的状态和行为。作者没有将该问题建模成 Markov 决策过程、借用强化学习,而是设计了一个简单的方式来缓和该问题,即预测未来多步骤的控制信号。

给定当前状态 x t \mathbf{x}_t xt,多步骤控制预测分支输出多个动作: π θ m u l t i = ( a t , a t + 1 , . . . , a t + K ) \pi_{\theta_{multi}}=(\mathbf{a}_t,\mathbf{a}_{t+1},...,\mathbf{a}_{t+K}) πθmulti=(at,at+1,...,at+K)。但是,因为我们只有当前时刻的传感器输入,就很难预测未来的控制动作。为此,作者设计了一个时域模块,隐式地进行环境和自车的变化及交互过程。它用于提供环境的动态信息和自车的状态,如其它物体的运动、交通灯的变化。同时,为了融入关键的静态信息(如围栏和车道线),提升两个分支的空间一致性,作者提出使用轨迹分支来指导控制分支,让它在未来时刻关注于输入图像的适当的区域。

时域模块
用一个 GRU 实现时域模块,从而和轨迹分支保持一致。在 t ( 0 ≤ t ≤ K − 1 ) t(0\leq t\leq K-1) t(0tK1)时刻,时域模块的输入是当前特征 j t c t l \mathbf{j}_{t}^{ctl} jtctl和当前预测动作 a t \mathbf{a}_t at的 concat 结果,它反映了当前环境和自车的状态。时域模块能根据当前的特征向量和预测动作,推理出动态的变化过程。然后,更新的隐藏状态 h t + 1 c t l \mathbf{h}_{t+1}^{ctl} ht+1ctl 将包含环境的动态信息,以及 t + 1 t+1 t+1时刻自车的更新状态。时域模块类似于环境模拟器,自车被抽象成一个特征向量。然后,基于当前动作的预测,时域模块模拟环境和自车的交互。

Trajectory-guided attention
当前步只有传感器输入,很难挑选出模型在未来时刻应该关注的区域。但是,自车的位置包含了一些重要线索供控制预测,关于如何找到关键信息的区域。

因此,作者从轨迹规划分支寻求办法,得到自车在未来时刻的可能位置。如下图,TCP 学习一个注意力图,从编码特征图中提取重要信息。这俩分支之间的交互能增强两个输出范式的一致性。有了每一时刻 t ( 1 ≤ t ≤ K ) t(1\leq t\leq K) t(1tK)从图像编码器提取的 2D 特征图 F \mathbf{F} F,通过控制分支和轨迹分支相应的隐藏状态,我们可以计算一个注意力图 w t ∈ R 1 × H × W \mathbf{w}_t\in \mathbb{R}^{1\times H\times W} wtR1×H×W

w t = MLP ( Concat [ h t t r a j , t t c t l ] ) \mathbf{w}_t = \text{MLP}(\text{Concat}[\mathbf{h}_t^{traj}, \mathbf{t}_t^{ctl}]) wt=MLP(Concat[httraj,ttctl])

注意力图 w t ∈ R 1 × H × W \mathbf{w}_t\in \mathbb{R}^{1\times H\times W} wtR1×H×W 用于聚合特征图 F \mathbf{F} F。然后,将结果特征图和 h t c t l \mathbf{h}_{t}^{ctl} htctl结合,得到信息丰富的特征 j t c t l \mathbf{j}_t^{ctl} jtctl,它包含了环境和自车的静态和动态的信息。该过程表示为:

j t c t l = MLP ( Concat [ Sum ( Softmax ( w t ) ⊙ F ) , h t c t l ] ) \mathbf{j}_t^{ctl} = \text{MLP}(\text{Concat}[\text{Sum}(\text{Softmax}(\mathbf{w}_t) \odot \mathbf{F}), \mathbf{h}_t^{ctl}]) jtctl=MLP(Concat[Sum(Softmax(wt)F),htctl])

特征 j t c t l \mathbf{j}_t^{ctl} jtctl输入一个策略头,它被所有的时间步骤共享,预测对应的控制动作 a t \mathbf{a}_t at。注意,在第一步我们只用测量特征来计算初始的注意力图,将图像特征和测量特征结合,得到初始的特征向量 j 0 c t l \mathbf{j}_0^{ctl} j0ctl。为了确保特征 j t c t l \mathbf{j}_t^{ctl} jtctl能描述该步骤的状态,并包含控制预测的关键信息,作者在每一步骤都增加了一个特征损失,让 j t c t l \mathbf{j}_t^{ctl} jtctl足够接近专家特征。

TCP 框架使模型具备了短时间内的推理能力。它关注于如何让当前控制预测足够近似专家控制。此外,它也考虑了当前哪些控制预测能让未来时间步骤的环境和自车的状态近似于专家的状态。

在这里插入图片描述

2.3 损失函数

损失函数包括轨迹规划损失 L t r a j \mathcal{L}_{traj} Ltraj、控制预测损失 L c t l \mathcal{L}_{ctl} Lctl和辅助损失 L a u x \mathcal{L}_{aux} Laux

对于轨迹规划分支, L t r a j \mathcal{L}_{traj} Ltraj 可表示成:

L t r a j = ∑ t = 1 K ∥ w p t − w p ^ t ∥ + λ F ⋅ L F ( j 0 t r a j , j 0 E x p e r t ) \mathcal{L}_{traj}=\sum_{t=1}^K \left\| \mathbf{wp}_t - \hat{\mathbf{wp}}_t \right\| + \lambda_F \cdot \mathcal{L}_F (\mathbf{j}_0^{traj}, \mathbf{j}_0^{Expert}) Ltraj=t=1Kwptwp^t+λFLF(j0traj,j0Expert)

其中 w p t , w p ^ t \mathbf{wp}_t,\hat{\mathbf{wp}}_t wpt,wp^t是第 t t t时刻的预测路径点和 ground-truth。 L F \mathcal{L}_F LF是特征损失,表示特征 j 0 t r a j \mathbf{j}_0^{traj} j0traj和专家特征 j 0 E x p e r t \mathbf{j}_0^{Expert} j0Expert之间的 L 2 L_2 L2距离。 λ F \lambda_F λF是可调节的权重。

对于控制预测分支,将动作建模为 β \beta β分布。损失 L c t l \mathcal{L}_{ctl} Lctl是:

L c t l = K L ( Beta ( a 0 ) ∣ ∣ Beta ( a ^ 0 ) ) + 1 K ∑ t = 1 K K L ( Beta ( a t ) ∣ ∣ Beta ( a ^ t ) ) + λ F ⋅ L F ( j 0 c t l , j 0 E x p e r t ) + 1 K ∑ t = 1 K L F ( j t c t l , j t E x p e r t ) \mathcal{L}_{ctl}=\mathbf{KL}(\text{Beta}(\mathbf{a}_0)||\text{Beta}(\hat{\mathbf{a}}_0)) + \frac{1}{K}\sum_{t=1}^K \mathbf{KL}(\text{Beta}(\mathbf{a}_t)||\text{Beta}(\hat{\mathbf{a}}_t)) + \lambda_F \cdot \mathcal{L}_F(\mathbf{j}_0^{ctl}, \mathbf{j}_0^{Expert})+\frac{1}{K}\sum_{t=1}^K \mathcal{L}_{F}(\mathbf{j}_t^{ctl}, \mathbf{j}_t^{Expert}) Lctl=KL(Beta(a0)∣∣Beta(a^0))+K1t=1KKL(Beta(at)∣∣Beta(a^t))+λFLF(j0ctl,j0Expert)+K1t=1KLF(jtctl,jtExpert)

其中 Beta ( a ) \text{Beta}(\mathbf{a}) Beta(a)表示 beta分布,由对应的预测分布参数表示,KL 散度用于测量预测控制分布和专家控制分布( Beta ( a ^ ) \text{Beta}(\hat{\mathbf{a}}) Beta(a^))的相似度。这也使用了特征损失。注意,马上要进行的动作是我们要优化的关键目标,所以计算未来时刻 t ≥ 1 t\geq 1 t1的所有损失的平均值,然后添加到当前时刻的损失 t = 0 t=0 t=0

为了帮助自车更好地估计当前状态,增加了一个速度预测头,从图像特征预测当前速度 s s s,和一个值预测头来预测专家的期望返回值。速度预测用的是 L 1 L_1 L1损失,值预测用的是 L 2 L_2 L2损失,它们的加权和是 L a u x \mathcal{L}_{aux} Laux

整体损失如下,

L = λ t r a j ⋅ L t r a j + λ c t l ⋅ L c t l + λ a u x ⋅ L a u x \mathcal{L}=\lambda_{traj}\cdot \mathcal{L}_{traj} + \lambda_{ctl}\cdot \mathcal{L}_{ctl} + \lambda_{aux}\cdot \mathcal{L}_{aux} L=λtrajLtraj+λctlLctl+λauxLaux

2.4 输出融合

TCP 有两类形式的输出表示:规划轨迹和预测控制。作者设计了一个基于场景的融合策略,如下图所介绍的。 α \alpha α是一个融合权重,值在 0.5 和 1 之间,注意,权重 α \alpha α并不需要是一个常数或对陈的,我们可以在不同的情形下设置不同的值。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/116375.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【leetcode】88. 合并两个有序数组(图解)

目录 1. 思路(图解)2. 代码 题目链接:leetcode 88. 合并两个有序数组 题目描述: 1. 思路(图解) 思路一:(不满足题目要求) 1. 创建一个大小为nums1和nums2长度之和的…

CrossOver软件2024最新版本下载

我们都明白快速运行:无须再独立运行一个Win电脑操作系统,进而解决双启动的繁杂和vm虚拟机的卡屏。习惯上来说极速运行:CrossOver能够让Win软件全速全状态运行,不会有丝毫的性能影响,让你在MAC系统中使用熟悉的Win应用。…

R语言爬虫代码模版:技术原理与实践应用

目录 一、爬虫技术原理 二、R语言爬虫代码模板 三、实践应用与拓展 四、注意事项 总结 随着互联网的发展,网络爬虫已经成为获取网络数据的重要手段。R语言作为一门强大的数据分析工具,结合爬虫技术,可以让我们轻松地获取并分析网络数据。…

dji mini4pro 图片拷贝到电脑速度

环境 win电脑 amd3600 m.2固态硬盘 dp快充数据线 直接主机使用dp线连接无人机 9成是raw格式图片 一小部分是视频和全景图 TF卡信息: 闪迪 128GB 129元 闪迪 128GB TF(MicroSD) 存储卡U3 C10 V30 A2 4K 至尊超极速移动版 "TF卡至尊超极速" 理论读取200MB/s …

【论文阅读】Equivariant Contrastive Learning for Sequential Recommendation

【论文阅读】Equivariant Contrastive Learning for Sequential Recommendation 文章目录 【论文阅读】Equivariant Contrastive Learning for Sequential Recommendation1. 来源2. 介绍3. 前置工作3.1 序列推荐的目标3.2 数据增强策略3.3 序列推荐的不变对比学习 4. 方法介绍4…

异星工场入门笔记-02-一个重要地学习方法

编程学习地整个过程,最重要的工具就是电脑,其中有一个重点就是可以无成本的重复测试,这大大降低了难度,节约了时间。真正难以学习的不是技术本身,而是材料成本和时间成本,降低这两个因素平地起高楼根本不是…

Spring和SpringMVC总结

一、Spring IoC(Inversion of Control)中文名称:控制反转(对象的创建交给Spring管理)。DI(dependency injection )依赖注入。容器(Container):放置所有被管理的对象。beans:容器中所有被管理的对…

Java基于springboot开发的景点旅游项目

演示视频 https://www.bilibili.com/video/BV1cj411Y7UK/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 主要功能:用户可浏览搜索旅游景点(分为收费和免费景点),购票(支持多规格套餐购票&am…

【入门Flink】- 05Flink运行时架构以及一些核心概念

系统架构 Flink运行时架构Standalone会话模式为例 1)作业管理器(JobManager) JobManager 是一个 Flink 集群中任务管理和调度的核心,是控制应用执行的主进程。每个应用都应该被唯一的 JobManager 所控制执行。 JobManger 又包含…

基站/手机是怎么知道信道情况的?

在无线通信系统中,信道的情况对信号的发送起到至关重要的作用,基站和手机根据信道的情况选择合适的资源配置和发送方式进行通信,那么基站或者手机是怎么知道信道的情况呢? 我们先来看生活中的一个例子,从A地发货到B地…

【中国知名企业高管团队】系列58:创维SKYWORTH

昨天华研荟介绍了位于深圳的彩电三巨头之一——康佳KONKA,今天介绍创维SKYWORTH。两家公司都是以做电视起家的,但是发展历程和现在的业务差别非常大,当然,过程中发生的故事也是波澜起伏。 一、关于创维 创维集团有限公司&#x…

Ansible中的角色使用

Ansible中的角色使用: 目录 一、ansible角色简介 二、roles目录结构 三、roles的创建 四、roles的使用 1、书写task主任务 2、触发器模块 3、变量模块 4、j2模块 5、files模块 6、启用模块 7、执行playbook 五、控制任务执行顺序 六、多重角色的使用 一…

2024天津理工大学中环信息学院专升本机械设计制造自动化专业考纲

2024年天津理工大学中环信息学院高职升本科《机械设计制造及其自动化》专业课考试大纲《机械设计》《机械制图》 《机械设计》考试大纲 教 材:《机械设计》(第十版),高等教育出版社,濮良贵、陈国定、吴立言主编&#…

Java通过cellstyle属性设置Excel单元格常用样式全面总结

最近做了一个导出Excel的功能,导出是个常规导出,但是拿来模板一看,有一些单元格的样式设置,包括合并,背景色,字体等等,毕竟不是常用的东西,需要查阅资料完成,但是搜遍全网…

Django开发实例总结(入门级、4.2.6、详细)

目录 概述 Django的核心组件包括 Django的项目结构 创建工程(4.2.6) 实例一:Hello world 实例二:访问一个自定义主页 实例三:通过登录跳转到主页 实例四:主页添加静态文件,包含js、css、…

初识JVM

1. JVM内存区域划分 jvm在启动的时候,会申请到一整个很大的内存区域。整个一大块区域,不太好用。为了更方便使用,把整个区域隔成了很多区域,每个区域都有不同的作用。 本地方法栈 此处提到的栈和数据结构中的栈不是一个东西&…

axios 实现请求重试

前景提要: ts 简易封装 axios,统一 API 实现在 config 中配置开关拦截器 请求重试的核心是可以重放请求,具体实现就是在 axios 中,拿到当前请求的 config 对象,再用 axios 实例,就能重放请求。 在无感刷新…

iOS App Store上传项目报错 缺少隐私政策网址(URL)解决方法

iOS App Store上传项目报错 缺少隐私政策网址(URL)解决方法 一、问题如下图所示: 二、解决办法:使用Google浏览器(翻译成中文)直接打开该网址 https://www.freeprivacypolicy.com/free-privacy-policy-generator.php 按照要求…

面试10000次依然会问的【ReentrantLock】,你还不会?

引言 在并发编程的世界中,ReentrantLock扮演着至关重要的角色。它是一个实现了重入特性的互斥锁,提供了比synchronized关键字更加灵活的锁定机制。ReentrantLock属于java.util.concurrent.locks包,是Java并发API的一部分。 与传统的synchro…

ActiveMQ、RabbitMQ、RocketMQ、Kafka介绍

一、消息中间件的使用场景 消息中间件的使用场景总结就是六个字:解耦、异步、削峰 1.解耦 如果我方系统A要与三方B系统进行数据对接,推送系统人员信息,通常我们会使用接口开发来进行。但是如果运维期间B系统进行了调整,或者推送过…
最新文章