【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,不仅提供了基本的调试功能,还包含了许多高级调试工具与技巧。本篇将详细介绍这些高级调试…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
