参考与前言

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 在整个数据集\(\mathrm{D}=\{(x,a^*)\}\)下 取最小的

\[\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}
\]

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到一起 组成 \(\bf{j}^{traj}\) → 256

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

  • 那… loss怎么backpropagate?

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

2.2 Trajectory Branch

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

摘自 transfuser 一文

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

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

2.3 Multi-Step Control Branch

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

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

temporal module输入是 \(\mathbf{j}_{\mathrm{t}}^{\text {ctl }}\) 和 \(\mathbf a_t^{ctl}\) concat后的,其中:

\[\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)
\]

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

而\(\mathbf h_t^{traj}, \mathbf h_t^{ctl}\)是从各自的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 相加:

\[\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}
\]

问题区:

  • 咦 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

【论文阅读】Trajectory-guided Control Prediction for End-to-end Autonomous Driving: A Simple yet Strong Baseline的更多相关文章

  1. 论文阅读 | Region Proposal by Guided Anchoring

    论文阅读 | Region Proposal by Guided Anchoring 相关链接 论文地址:https://arxiv.org/abs/1901.03278 概述 众所周知,anchor ...

  2. 【论文阅读】Motion Planning through policy search

    想着CSDN还是不适合做论文类的笔记,那里就当做技术/系统笔记区,博客园就专心搞看论文的笔记和一些想法好了,[]以后中框号中间的都算作是自己的内心OS 有时候可能是问题,有时候可能是自问自答,毕竟是笔 ...

  3. 论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)

    今天来看一看一个比较经典的语义分割网络,那就是FCN,全称如题,原英文论文网址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn ...

  4. [置顶] 人工智能(深度学习)加速芯片论文阅读笔记 (已添加ISSCC17,FPGA17...ISCA17...)

    这是一个导读,可以快速找到我记录的关于人工智能(深度学习)加速芯片论文阅读笔记. ISSCC 2017 Session14 Deep Learning Processors: ISSCC 2017关于 ...

  5. 论文阅读 | FoveaBox: Beyond Anchor-based Object Detector

    论文阅读——FoveaBox: Beyond Anchor-based Object Detector 概述 这是一篇ArXiv 2019的文章,作者提出了一种新的anchor-free的目标检测框架 ...

  6. YOLO 论文阅读

    YOLO(You Only Look Once)是一个流行的目标检测方法,和Faster RCNN等state of the art方法比起来,主打检测速度快.截止到目前为止(2017年2月初),YO ...

  7. Lane-Detection 近期车道线检测论文阅读总结

    近期阅读的几篇关于车道线检测的论文总结. 1. 车道线检测任务需求分析 1.1 问题分析 针对车道线检测任务,需要明确的问题包括: (1)如何对车道线建模,即用什么方式来表示车道线. 从应用的角度来说 ...

  8. [论文阅读]阿里DIN深度兴趣网络之总体解读

    [论文阅读]阿里DIN深度兴趣网络之总体解读 目录 [论文阅读]阿里DIN深度兴趣网络之总体解读 0x00 摘要 0x01 论文概要 1.1 概括 1.2 文章信息 1.3 核心观点 1.4 名词解释 ...

  9. [论文阅读]阿里DIEN深度兴趣进化网络之总体解读

    [论文阅读]阿里DIEN深度兴趣进化网络之总体解读 目录 [论文阅读]阿里DIEN深度兴趣进化网络之总体解读 0x00 摘要 0x01论文概要 1.1 文章信息 1.2 基本观点 1.2.1 DIN的 ...

  10. [论文阅读] RNN 在阿里DIEN中的应用

    [论文阅读] RNN 在阿里DIEN中的应用 0x00 摘要 本文基于阿里推荐DIEN代码,梳理了下RNN一些概念,以及TensorFlow中的部分源码.本博客旨在帮助小伙伴们详细了解每一步骤以及为什 ...

随机推荐

  1. ITIL是标准吗?

    ITIL不是标准 OGC:是一个推荐的管理框架,一个模版,可根据运维实践自由裁量落地 itil诞生环境:欧美思维.欧美文化.欧美制度.欧美人文习惯.... 对欧美来说可能是最佳实践,但是对中国特色文化 ...

  2. 构造照亮世界——快速沃尔什变换 (FWT)

    博客园 我的博客 快速沃尔什变换解决的卷积问题 快速沃尔什变换(FWT)是解决这样一类卷积问题: \[c_i=\sum_{i=j\odot k}a_jb_k \] 其中,\(\odot\) 是位运算的 ...

  3. gitignore文件不生效的问题解决

    如何添加 git的忽略文件 .gitignore 在使用git过程中,我们可能有些文件不需要上传上去,比如一些缓存文件,生成的图片,运行环境的一些配置等等,这时就需要用到.gitignore忽略掉这些 ...

  4. Go类型断言demo

    Go类型断言demo package main import ( "bytes" "encoding/json" "fmt" "i ...

  5. 如何使用Tushare+ Backtrader进行股票量化策略回测

    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 典型股票量化回测流程 典型的股票量化策略回测流程包括以下几个步骤: 数据获取:首先需要获取所需的股票市场 ...

  6. SQL使用ROW_NUMBER() OVER函数自动生成序列号

    语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说ROW_NUMBER()从1开始,为每一条分组记录返回一个数字,这里的ROW ...

  7. installshield 安装jdk并配置环境变量

    今天来通过installshield安装jdk以及配置环境变量,本质上是调用第三方安装程序. 首先将jdk的安装文件添加到我们的安装程序中 然后编写我们的脚本 选择BEHAVIOR AND LOGIC ...

  8. Splashtop调查显示:居家办公生产效率更高

    抱歉,本文又是个吃瓜新闻.不得不发,你懂得~ 端午节要到了,应该请大家赛龙舟,吃粽子来着. 研究表明,即使文字顺序打乱,读者都还是能毫无障碍地读懂一篇文章.或许,大家只是一目十行的看一下主要关键词就可 ...

  9. C语言:如何删除超链接

    单独写出一个函数出来,基本思想就是用fscanf一个一个字符读取出来,(文本流只能用fscanf,不能用fgetc等用于二进制流的函数,不然会导致乱码)遇到<的时候就停止读取,先把之前存进cop ...

  10. C语言:输出大写的三角形字母表(进阶)

    //该程序只支持输入大写字母,输入G,就输出A~G的三角形字母表 /*       从A到Z的输出数量应该是1 3 5 7 9.....       */ 利用这个特性,对空格和字母进行输出 A字母在 ...