【论文阅读】Trajectory-guided Control Prediction for End-to-end Autonomous Driving: A Simple yet Strong Ba

参考与前言

Summary: leaderboard 现存第一名 TCP,非常simple的设置 取得了很好的效果

论文链接:Trajectory-guided Control Prediction for End-to-end Autonomous Driving: A Simple yet Strong Baseline

代码链接:https://github.com/OpenPerceptionX/TCP 作者回复预计9月开

jg刷到的时候 我旁边看了一眼 这些框架图为什么这么熟… 后面仔细看才发现喔 吸取各家之长处了 简单传感器的高分 真绝啊

1. Motivation

对于端到端的驾驶任务,一般是从预测出轨迹,然后用控制器跟随;另一种则是直接预测controller输出;由两种方法启发,作者时候:可以吸取各自优点,然后提出本文方法

Contribution

  1. 调研尝试了两种方法,然后提出了结合的pipeline
  2. multi-step control 预测使得 temporal reasoning
  3. CARLA排行榜第一名 (排名榜查看时间June 25, 2022 )

2. Method

专家使用的是Roach 【用RL训练出的一种专家策略】,这里 小声提一句 我收集了一下现有开源的专家【Roach, SEED, AUTO, MMFN】,然后给了一个repo carla-expert 来给大家做收集用… 感兴趣可以去点个star;如果后面你想做这个任务 肯定是可以用上的,毕竟第一次做任务的时候 我一个月都在搞数据那一环

原来e2e也可以写公式 涨见识,大概就是学到的策略和专家数据的loss 在整个数据集 D = { ( x , a ∗ ) } \mathrm{D}=\{(x,a^*)\} D={(x,a)}下 取最小的

arg ⁡ min ⁡ θ E ( x , a ∗ ) ∼ D [ L ( a ∗ , π θ ( x ) ) ] (1) \arg \min _{\theta} \mathbb{E}_{\left(\mathrm{x}, \mathbf{a}^{*}\right) \sim \mathrm{D}}\left[\mathcal{L}\left(\mathbf{a}^{*}, \pi_{\theta}(\mathbf{x})\right)\right] \tag{1} argθminE(x,a)D[L(a,πθ(x))](1)

2.1 框架

  • 整体前面encoder框架 可以对比着CILRS
  • Loss设计可以看看Roach一文

输入:一帧图片;当前帧的速度,high command,目标点等

网络细节,在附录和正文里有简洁的说明:

  1. 相机尺寸是900x256,FOV直接拉满为100
  2. K = 4 也就是选未来四步steps 的动作/轨迹进入
  3. Image Encoder 使用的是有预训练的 ResNet-34
  4. measurement encoder则是一个MLP [全文并未仔细说明具体几层;暂且认为和CILRS一致设置 也就是 根据输入的num 对应相应数量的linear到encoder里] → 128
  5. 各自encoder的输出 concat到一起 组成 j t r a j \bf{j}^{traj} jtraj → 256

接下来 两个branch都直接取共同输出的feature进入各自的分支

  • 那… loss怎么backpropagate?

    见loss 部分, 各自loss 相加,直接.backward()

2.2 Trajectory Branch

和[16]一样将 j t r a j \bf{j}^{traj} jtraj 送到GRU里,应该是和transfuser的操作一样,大概是下图这个感觉:

摘自 transfuser 一文

其中 因为有 experts的真值 (x,y) 轨迹点作为参考,所以可以算loss

注意看整体框架图,其中得到这些轨迹点后,使用的是两个横纵向PID进行轨迹到控制量的传递,不同于之前的方法,这里的PID控的是横纵向error,大部分以前方法基本都是一个速度控制(给定一个速度),一个转向控制为主

2.3 Multi-Step Control Branch

这里提出了一个比较重要的点:之前这种 基于当前的输入 预测下一个输出,整体输出都是独立同分布假设。但实际上 当前输入与历史输入,和未来输出之间并不是独立的。 对比与用MDP(马尔科夫决策过程)和RL进行回溯/往前,提出了一种更为简单的方式

首先单看主框架图里对应的淡黄色模块,

temporal module输入是 j t ctl  \mathbf{j}_{\mathrm{t}}^{\text {ctl }} jtctl  a t c t l \mathbf a_t^{ctl} atctl concat后的,其中:

j t ctl  = MLP ⁡ (  Concat  [ Sum ⁡ ( Softmax ⁡ ( w t ) ⊙ F ) , h t ctl  ] ) \mathbf{j}_{\mathrm{t}}^{\text {ctl }}=\operatorname{MLP}\left(\text { Concat }\left[\operatorname{Sum}\left(\operatorname{Softmax}\left(\mathbf{w}_{\mathrm{t}}\right) \odot \mathbf{F}\right), \mathbf{h}_{\mathrm{t}}^{\text {ctl }}\right]\right) jtctl =MLP( Concat [Sum(Softmax(wt)F),htctl ])

其中 w t \bf w_t wt是由t时刻的 hidden state concat在一起的,如下图公式:

h t t r a j , h t c t l \mathbf h_t^{traj}, \mathbf h_t^{ctl} httraj,htctl是从各自的Trajectory Branch和Control Branch而来


问题区:

  • 但是这里有点疑惑的是 branch内部哪一部分的hidden state?

    图三中两个模块都是GRU实现的,hidden state从每个GRU里得到

  • Trajectory是GRU 可能是t下GRU,所以K是代表有几个GRU模块?

    是的

  • 但Control branch是啥网络 MLP?那是哪一层的hidden state呢?

    是MLP hidden state都是各自GRU里来的,图三中输出前的两个均为MLP

2.4 Loss 设计

主要为三种,轨迹、控制和附加loss

对于轨迹:

其中与transfuser不同的是加入了feature的loss进来,j是128维度的

对于控制:

对于附加,从image feature 加了速度预测head L1 loss 和一个value predict 预测expected return 同[55]一样,L2 Loss

然后三个loss 相加:

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_{t r a j} \cdot \mathcal{L}_{t r a j}+\lambda_{c t l} \cdot \mathcal{L}_{c t l}+\lambda_{a u x} \cdot \mathcal{L}_{a u x} L=λtrajLtraj+λctlLctl+λauxLaux


问题区:

  • 咦 feature… 怎么做loss,expert的feature不也是同一个网络输出的嘛 可以这样玩?

    roach 做法,由BEV下的gt 做的不同的输入,但是不知道是直接收集的expert的feature还是说用BEV输入到这个网络做的loss

    • 可能得去瞅瞅 roach的 loss玩法

2.5 Fusion Approach

融合的方法也挺工程的,直接判断 过去1s内的steer 绝对值相加 是否超过0.1,如果超过则认为你正在执行转弯,就切换到 以轨迹分支为主;否则以多步控制分支为主

3. 实验及结果

实验和结果 个人觉得作者有点省事了… 因为直接抽的leaderboard,但是!CARLA排行榜不同于其他的地方是:数据集是你自己创建的,一般情况下,大家都会多多少少去用自己的数据集训练出来其他方法的agent 在同一个expert training下的对比… 【大概意思呢就是:实验条件并不一致,虽然从线上来说你是好的 但是可能其他人只用了你1/2的数据…】

不过 这并不能说明方法不有效,毕竟 这可是一个相机能干到的分数啊,我深表佩服!以下仅仅是截图一下各个实验表格和可视化的,因为太熟悉这个任务了 就不再说明了,感兴趣 想尝试一下榜的可以看看 相关CARLA leaderbaord配置教学文章 其中包含了指标说明

一些在自己方法下 控制变量的 消融实验

碎碎念

此部分碎碎念 有些在前面实验中念完了 hhhh 来自jg的碎碎念:对CARLA leaderboard的完全过拟合 hhhh 毕竟这种方法是真的不会在车上尝试的吧… LAV的方法至少有条件是可以在实车上测一波,从可解释性上会强很多 比如 找原因啥的,但是LAV真的太太太大了,这个方法 第一次成绩匿名的时候 我觉得不可能… 还自己quick setting了一波一个相机的实验 但是效果并不好 (当时TCP文章还没挂出来哈)… 所以后面看看有没有机会 看文章简单复现一下

PS 现在大家的数据集 真是一个比一个高,自己当时做的时候 100K帧数据都不到… LAV 390K,TCP 420K,现在想来 好像知道自己分数为啥差距这么大了 也是一个到后面有点玩不懂的任务,不过planning也就这一个任务… 榜单可以刷刷


赠人点赞 手有余香 😆;正向回馈 才能更好开放记录 hhh

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kin-Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值