【Scene Transformer】scene transformer论文阅读笔记
文章目录
- 序言
- (Abstract)
- (Introduction)
- (Related Work)
- (Methods)
- (Scene-centric Representation for Agents and Road Graphs)
- (Encoding Transformer)
- (Predicting Probabilities for Each Futures)
- (Joint and Marginal Loss Formulation)
- (Results)
- (Discussion)
- (Questions)


序言
- 论文: https://arxiv.org/pdf/2106.08417v3
- 代码: https://github.com/Chen-Albert-FENG/SceneTransformer
- 年份: 2021.06
- 数据: argoverse + waymo
(Abstract)
-
核心思想: 受语言模型的启发, 在模型中使用序列掩码策略作为Query, 通过改变数据的可见性,允许用多种方式进行预测(MP,CMP,GCP),如给定自车的goal或自车完整轨迹或其他agent的行为,以这些为条件来进行多目标预测,估算被掩码掉的未来时间和agents的feature
-
即:
- Quety ---- 自车goal或自车完整轨迹或agent行为
- Result — 多目标预测结果
-
文章采用的注意力机制结合了agent时间步, agents之间交互和道路元素之间的特征
-
文章独立预测和联合预测都做了, 并在当时获得了最优结果, 但现在在waymo online排行榜中并不靠前
(Introduction)
-
以前将自动驾驶任务划分为sub-task的方式是基于各个模块(感知,预测,规划)真正独立的假设, 但这个假设是不成立的,不光是模块化之后存在信息丢失,还因为自车和目标之间是互相影响的. 基于此文章提出了联合运动预测与规划的模型, 支持多目标多轨迹同时预测规划
-
交互式预测要求建模联合特征joint features, 以保持agents未来轨迹的一致性. 建模joint feature最简单的方法是agents独立预测的结合, 但这种结合不具有一致性, 尤其是在轨迹重叠的时候没法避免重叠. 文章提出的模型天然的能捕获agents之间的交互, 得到场景级scene-level的agents预测结果
-
文章给出了一种从规划角度的一种联合预测规划的方法
-
文章支持多目标多模态的预测, 难点也就是目标本身行为的多样性(diverse)以及目标对彼此轨迹的影响(influence)
-
为什么要进行联合预测呢: 首先因为运动预测和规划的子任务并不是真正独立的, 自车也会影响其他agent的行为, 而且独立预测的方案不利于表示不同agent之间未来的交互问题, 由此得到的规划也是次优(sub-optimal)的轨迹
-
边缘预测 vs 联合预测 (marginal/independent prediction vs. joint prediction)
- 边缘预测: 未来时刻, 不同agent之间的预测轨迹可能有冲突部分, 轨迹相交
- 联合预测: 未来同一时刻, 不同agent之间的轨迹不会相交, respect each other’s prediction
-
按照文章的说法, 文章的贡献在于:
- (1) 以场景为中心的方法, 能够进行边缘/独立和联合预测的切换, 并都达到当时的SOTA
- (2) 利用了置换等变的transformer架构, 考虑了agents/timesteps/road元素, 高效的架构
- (3) 一种掩码序列建模方法, 在推理时以假设的代理未来为条件, 实现条件运动预测或目标条件预测
(Related Work)
- 早期使用CNN捕获栅格图内元素间关系,但是处理空间交互时很困难;
- 还有entity-centric的方法,使用RNN等方法编码历史特征,编码地图Pose信息和语义信息,通过信息聚合来捕获entity之间的关系,聚合方法包括池化、自注意力、GNN等方法;
- 文章觉得之前的文章利用了transformer注意力机制的方法是在不同轴分别进行注意力分析再把结果展平到一起进入联合自注意力层,文章提出的方法能统一建模<agent时间步,不同agents,道路元素>之间的关系
- 文章认为agent-centric具有固有pose不变性(个人理解是作为参考帧的pose),然后lanegcn等方法也是在global frame里采用agent-centric的
- 文章认为之前的文章对联合特征joint feature的考虑都是不够的,比如只考虑P(X)然后对Y进行条件建模P(Y|X),本文提出了一般的对多agents联合特征建模的方法,直接解码得到k个联合特征
(Methods)

-
Scene Transformer模型有三个阶段:
- (1) 对agent和road graph进行高维嵌入embedding
- (2) 采用注意力网络编码agents和road graph的交互关系
- (3) 使用注意力网络解码得到多个futures
-
模型把每个时间步的输入都看做是一个特征feature, 然后预测每个agent每个时间步的输出;

- 模型在每个时间步都采用一种联合掩码方式,indicator = 1或者0指示输入feature可见或不可见,借鉴了BERT模型的思想,这种方法很灵活,仅仅通过改变数据的可见性(不同的掩码方式),允许同时训练一个模型用于单独的MP=Motion Prediction或者CMP=Conditional Motion Prediction或者GCP=Goal-conditioned Prediction
- 每一个任务如MP/CMP/GCP都可以使用具体的掩码策略(设置indicator),公式化为一个query,然后把数据提供给模型。模型的目标就是要估算被掩码掉的未来时间和agents的feature,如上图
(Scene-centric Representation for Agents and Road Graphs)
-
scene-centric的嵌入策略,scene-centric的过程:
- 选择一个感兴趣位置的agent作为原点, 可以是AV也可以是任何一个要预测的agent
- 其他所有的agents和road graphs都基于它编码
- 以center的最新可见帧来进行编码的
-
agent-centric就是以每个agent作为原点进行编码, 多个agents就是多个原点
-
scene-centric的编码过程:
- (1) 生成agents每个时间步的特征
- (2) 生成静态road graphs的特征集合, 使用PointNet来学习每个polyline的特征向量
- (3) 生成动态road graphs的特征集合, one feature vector per object如红绿灯, 空间上静止时间上动态
- (4) 所有特征都处理和旋转到center, 并且进行正弦位置嵌入sin position embedding
(Encoding Transformer)

- 大多数层都是transformer层, 每个注意力层都跟一个前馈网络,具有相同的隐藏维度; decoder最后接2层MLP,输出7个outputs,包括相对原点的坐标+不确定度和航向角;
- 由于没有添加agent id, 文章设计了一种因子化注意力方法, 防止相同类型、时间步上相同掩码策略的agents得到相同的预测结果。这种方法也是置换等变的, 即跟agent输入transformer的顺序无关。然后agents和road graph的交互也是置换等变的,在通过网络的过程中road graph的特征也是不变的
(Predicting Probabilities for Each Futures)
- 模型还需要预测每个future或者trajectory的概率,为此,文章额外添加了人工agent和时间步,具体通过计算agent每个时间步各个特征的均值得到,输入维度就从[A,T,D]变成了 [A+1,T+1,D] ,在解码器最后一层这个人工特征是要剥出来的,以获取每个agent的summary feature,然后这个feature再经过2层MLP和softmax层得到一个logit值,作为future或者trajectory的概率
(Joint and Marginal Loss Formulation)
-
模型的输出[F, A, T, 7]是每个agent在每个time step的location和heading, scene-centric
的编码, 支持同时预测所有agents -
联合预测和边缘预测的loss回传策略不一样, 感觉文章中没有讲的很清楚
-
评估指标选用minADE,minFDE,MR和mAP(mean average precision)
(Results)
- 数据集: 采用了argoverse和waymo open motion dataset
- 因子化注意力方法带来了性能增益;
- 掩码序列建模策略的优势:
- 在训练和推理的时候, 模型可以指定哪个agent的哪些timesteps进行掩码(indicator = 0 per timestep), 这允许我们能够选择将不同agents不同timesteps的信息呈现给模型, 也能够知道模型如何利用和响应这些信息, 如此在推理的时候能够提供一种mutli-task模型
- 这对于自车给定goal或者给定其他agents不同轨迹子集时, 给定自车规划, 预测结果会怎样, 特别有用. 文章的配图表达了这个意思, 如下

- 定性检查发现, 多个tasks(MP/CMP/GCP)一起训练并没有降低motion prediction的性能
- 联合预测相比边缘预测, 也能有更低的over-laps(不同agent间overlap是不合理的)
(Discussion)
- 1.文章提出的单个模型就能进行MP,CMP,GCP的多预测任务
- 2.通过精心建模可以定量提高系统表现, 得到了一个可以用于planning系统的学习模型
- 3.模型能够确认环境中agents之间的交互, 潜在提供了确认因果关系的任务
(Questions)
-
(1) scene-centric和agent-centric的区别
- agent-centric: 以每个agent为原点, 对每个agent都计算features
- scene-centric: 以感兴趣的agent的位置作为原点计算所有features
-
(2) scene-centric怎么就反映出scene-centric了, scene是什么
- 在一个场景中, 选定感兴趣的目标, 可以是自车也可以是要预测的目标, 其他所有目标和道路元素都以感兴趣目标最新帧位置为原点进行编码, 区别于agent-centric, 如上
-
(3) 模型能在marginal prediction和joint prediction之间随意切换是什么意思
- 通过不同的掩码策略来实现切换
- 不考虑周边其他agents和road graphs, 都掩码为0, 则是marginal prediction
- 考虑周边所有agents和road graphs, 不进行掩码, 则是joint prediction
-
(4) 什么是transformer架构的permutation equivariant(置换不变性/置换等变性)
- 标准的transformer并不直接具备置换不变性, 因为它包含了位置编码position-encoding, 位置信息也是编码的, 从而理解序列的顺序
- 要使transformer具备置换不变性, 需经过特殊设计, 比如简单的不使用位置编码
- 文章中主要是指agents顺序的置换等变和road graph以场景编码后的置换等变等
-
(5) 就算是一种联合预测规划的方法, 为什么要预测自车呢?预测自车的作用是什么?自车规划轨迹不是主动选择的吗
- 这个模型就是给规划系统用的
- 预测自车是选定自车goal的方式, 是goal-conditioned prediction, 联合预测了所有agents和自车的未来轨迹
- 在实际应用中, 自车预测轨迹可作为实际规划的参考
-
(6) 动态道路图编码也是采用PointNet吗
- 静态道路图编码是PointNet
- 从文章附录中看, 动态道路元素不是用PointNet, 而是和agents一样通过2层MLP网络输出D维特征feature
-
(7) 文章提到的序列掩码策略具体长什么样
- 文章附录A中提到, 有设置indicator来指示目标是否掩码, 如果掩码的话, 除了time embedding外, 所有的特征都要置为0
-
(8) 文章和TNT和DenseTNT的前后关系
- 文章中和TNT和DenseTNT都做了性能比较
- 从feature vector构建可知, 和TNT和DenseTNT一样, scene transformer也是用了vector-based的方法
[参考文章]
[1]. scene transformer论文学习笔记
[2]. scene transformer论文翻译,不准
[3]. scene transformer论文阅读笔记,推荐
created by shuaixio, 2024.07.10
相关文章:

【Scene Transformer】scene transformer论文阅读笔记
文章目录 序言(Abstract)(Introduction)(Related Work)(Methods)(Scene-centric Representation for Agents and Road Graphs)(Encoding Transformer)(Predicting Probabilities for Each Futures)(Joint and Marginal Loss Formulation) (Results)(Discussion)(Questions) sce…...

ESP32在ESP-IDF环境下禁用看门狗
最近使用了一款ESP32的开发板。但在调试时发现出现许多看门狗复位事件: E (8296) task_wdt: Task watchdog got triggered. The following tasks/users did not reset the watchdog in time: E (8296) task_wdt: - IDLE (CPU 0) E (8296) task_wdt: Tasks curre…...

基于 uniapp html5plus API,怎么把图片保存到相册
要将图片保存到相册中,可以使用HTML5 API中的plus.gallery.save方法。以下是一个示例代码,展示如何将图片保存到手机相册: // 图片的URL,可以是本地路径或网络路径 var imageUrl path/to/your/image.jpg;// 调用plus.gallery.sa…...

3.特征工程-特征抽取、特征预处理、特征降维
文章目录 环境配置(必看)头文件引用1.数据集: sklearn代码运行结果 2.字典特征抽取: DictVectorizer代码运行结果稀疏矩阵 3.文本特征抽取(英文文本): CountVectorizer()代码运行结果 4.中文文本分词(中文文本特征抽取使用)代码运行结果 5.中文文本特征抽…...

RISC-V (五)上下文切换和协作式多任务
任务(task) 所谓的任务就是寄存器的当前值。 -smp后面的数字指的是hart的个数,qemu模拟器最大可以有8个核,此文围绕一个核来讲。 QEMU qemu-system-riscv32 QFLAG -nographic -smp 1 -machine virt -bios none 协作式多任务 …...

Cornerstone加载本地Dicom文件第二弹 - Blob篇
🍀 引言 当我们刚接触Cornerstone或拿到一组Dicom文件时,如果没有ImageID和后台接口,可能只是想简单测试Cornerstone能否加载这些Dicom文件。在这种情况下,可以使用本地文件加载的方法。之前我们介绍了通过node启动服务器请求文件…...

C语言中整数类型及其类型转换
1.数据的存储和排列 是的,在C语言中,整数类型通常以补码(twos complement)形式存储在内存中。这是因为补码表示法在处理有符号整数的加减运算上更为简便和高效。 2.有符号数和无符号数之间的转换 在C语言中,有符号数和…...

powerjob连接postgresql数据库(支持docker部署)
1.先去pg建一个powerjob-product库 2.首先去拉最新的包,然后找到server模块,把mysql的配置文件信息替换成pg的 spring.datasource.hikari.auto-committrue spring.datasource.remote.hibernate.properties.hibernate.dialecttech.powerjob.server.pers…...

浅谈位运算及其应用(c++)
目录 一、位运算的基础(一)位与(&)(二)位或(|)(三)位异或(^)(四)位取反(~)&#x…...

Git版本管理中下列不适于Git的本地工作区域的是
Git版本管理中下列不适于Git的本地工作区域的是 A. 工作目录 B. 代码区 C. 暂存区 D. 资源库 选择B Git本地有四个工作区域: 工作目录(Working Directory)、 暂存区(Stage/Index)、 资源库(Repository或Git Directory)、 git仓库(Remote Di…...

webGL + WebGIS + 数据可视化
webGL: 解释:用于在浏览器中渲染 2D 和 3D 图形。它是基于 OpenGL ES 的,提供了直接操作 GPU 的能力。 库: Three.jsBabylon.jsPixiJSReglGlMatrixOsgjs WebGIS: 解释:用于在 Web 浏览器中处理和展示地…...

职场“老油条”的常规操作,会让你少走许多弯路,尤其这三点
有句话说得好:“在成长的路上,要么受教育,要么受教训。” 挨过打才知道疼,吃过亏才变聪明,从职场“老油条”身上能学到很多经验,不一定全对,但至少有可以借鉴的地方,至少能让你少走…...

Ceres Cuda加速
文章目录 一、简介二、准备工作三、实现代码四、实现效果参考资料一、简介 字Ceres2.2.1版本之后,作者针对于稠密矩阵的分解计算等操作进行了Cuda加速,因此这里就基于此项改动测试一下效果。 二、准备工作 1、首先是需要安装Cuda这个英伟达第三方库,https://developer.nvidi…...

微信小程序生成小程序转发链接,携带参数跳转到另外一个页面
🤵 作者:coderYYY 🧑 个人简介:前端程序媛,目前主攻web前端,后端辅助,其他技术知识也会偶尔分享🍀欢迎和我一起交流!🚀(评论和私信一般会回!!) 👉 个人专栏推荐:《前端项目教程以及代码》 ✨一、前言 需求:在页面A生成分享链接(携带参数),分享到微信…...

图解RocketMQ之消息如何存储
大家好,我是苍何。 人一辈子最值得炫耀的不应该是你的财富有多少(虽然这话说得有点违心,呵呵),而是你的学习能力。技术更新迭代的速度非常快,那作为程序员,我们就应该拥有一颗拥抱变化的心&…...

2024年中国信创产业发展白皮书精简版
获取方式: 链接:https://pan.baidu.com/s/1rEHMfcCfJm4A40vzrewoCw?pwda5u1 提取码:a5u1 得益于中国数字经济的迅猛发展,2023年中国信创产业规模达20961.9亿元,2027年有望达到37011.3亿元,中国信创市场…...

Redis2-Redis常见命令
目录 Redis数据结构介绍 Redis通用命令 KEYS DEL EXISTS EXPIRE String类型 Key的层级格式 Hash类型 List类型 Set类型 SortedSet类型 Redis数据结构介绍 Redis是一个key-value的数据库,key一般是String数据库,value的类型多种多样 可以通过…...

一天攻克一个知识点 —— 设计模式之动态代理
一、设计模式之代理设计 代理设计是在Java开发中使用较多的一种设计模式,所谓的代理设计模式就是指一个代理主体操作真实主体,真实主体操作具体业务,代理主体负责给具体业务添砖加瓦。 就好比在生活中你有一套房子想要出租(你真实主体)&…...

数据采集与预处理【大数据导论】
各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 数据采集与预处理前 必看 【大数据导论】—大数据序…...

白骑士的PyCharm教学进阶篇 2.2 高级调试技术
系列目录 上一篇:白骑士的PyCharm教学进阶篇 2.1 高效编码技巧 在Python开发中,调试是一个非常重要的环节。PyCharm作为一款功能强大的IDE,不仅提供了基本的调试功能,还包含了许多高级调试工具与技巧。本篇将详细介绍这些高级调试…...

[网鼎杯]2018Unfinish
使用ctf在线靶场https://adworld.xctf.org.cn/home/index。 进入靶场,发现是一个登录页面。 使用awvs进行扫描,发现存在login.php和register.php,并且register.php存在sql注入漏洞。 访问一下register.php试试,发现是一个注册页面…...

Java算法-力扣leetcode-383. 赎金信
383. 赎金信 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1:…...

使用idea对spring全家桶的各种项目进行创建
目录 1. 简介2. spring2.1 简介2.2 创建 3. springmvc3.1 介绍3.2 创建 4. springboot4.1 简介4.2 创建(仅仅就其中一种) 5. 其他:maven6. 参考链接 1. 简介 因为总是分不清spring全家桶,所以就在这里进行一个总结。 2. spring …...

FAT32、NTFS、FAT的区别
FAT(File Allocation Table) 特点 簇大小限制:FAT文件系统的簇大小是固定的,这限制了单个文件的大小和文件系统的效率。 存储效率:由于簇大小的限制,FAT文件系统在存储小文件时可能会浪费空间。 文件系统结…...

捉虫笔记(二)之 杀软请你自重点
捉虫笔记(二)之 杀软请你自重点 前一篇文章介绍了如何配置符号,这一篇文章我们来个实战。 1 现象 在我们的程序中利用robocopy进行文件的复制。但是QA反馈,只要进行了备份操作,整个进程就会卡住。但是奇怪的是只有他…...

python学习之路 - python的函数
目录 一、python函数1、函数介绍2、函数的定义3、函数的参数4、函数的返回值5、函数说明文档6、函数的嵌套调用7、变量的作用域8、综合案例9、函数与方法的区别 二、python函数进阶1、函数多返回值2、函数多种传参方式a、位置参数b、关键字参数c、缺省参数d、不定长参数 3、匿名…...

使用SpringBoot+Vue3开发项目(2)---- 设计文章分类的相关接口及页面
目录 一.所用技术栈: 二.后端开发: 1.文章分类列表渲染: 2.新增文章分类: 3.编辑文章分类: 4.删除文章分类 : 5.完整三层架构后端代码: (1)Controller层:…...

Layui---toolbar与 tool的区别
table.on(toolbar): table.on(toolbar): 这个事件监听器是用来处理表格工具栏的事件。工具栏通常位于表格的上方,可以包含添加、删除、导出等按钮。当用户与这些工具栏中的按钮交互时,比如点击一个按钮来添加新行或者进行搜索操作,…...

U-Net++原理与实现(含Pytorch和TensorFlow源码)
U-Net原理与实现 引言1. U-Net简介1.1 编码器(Encoder)1.2 解码器(Decoder)1.3 跳跃连接(Skip Connections) 2. U-Net详解2.1 密集跳跃连接2.2 嵌套和多尺度特征融合2.3 参数效率和性能2.4 Pytorch代码2.5 …...

产品心理学:啦啦队效应
电视里我们常会看见这样一个场景,一群女孩穿着短裙有说有笑地在大街上走过,把路人们都看傻了,其实单个来看,她们的长相并不出众,可是凑在一起就显得青春貌美,这就是“啦啦队效应”——cheerleader effect。…...