【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,不仅提供了基本的调试功能,还包含了许多高级调试工具与技巧。本篇将详细介绍这些高级调试…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...

基于谷歌ADK的 智能产品推荐系统(2): 模块功能详解
在我的上一篇博客:基于谷歌ADK的 智能产品推荐系统(1): 功能简介-CSDN博客 中我们介绍了个性化购物 Agent 项目,该项目展示了一个强大的框架,旨在模拟和实现在线购物环境中的智能导购。它不仅仅是一个简单的聊天机器人,更是一个集…...

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题
20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题 2025/6/9 20:54 缘起,为了跨网段推流,千辛万苦配置好了网络参数。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在调试串口/DEBUG口正确执行。…...

LeetCode - 148. 排序链表
目录 题目 思路 基本情况检查 复杂度分析 执行示例 读者可能出的错误 正确的写法 题目 148. 排序链表 - 力扣(LeetCode) 思路 链表归并排序采用"分治"的策略,主要分为三个步骤: 分割:将链表从中间…...
组合模式:构建树形结构的艺术
引言:处理复杂对象结构的挑战 在软件开发中,我们常遇到需要处理部分-整体层次结构的场景: 文件系统中的文件与文件夹GUI中的容器与组件组织结构中的部门与员工菜单系统中的子菜单与菜单项组合模式正是为解决这类问题而生的设计模式。它允许我们将对象组合成树形结构来表示&…...