VectorNet: Encoding HD Maps and Agent Dynamics from Vectorized Representation

news2024/12/24 4:08:09

Paper name

VectorNet: Encoding HD Maps and Agent Dynamics from Vectorized Representation

Paper Reading Note

URL: https://arxiv.org/pdf/2005.04259.pdf

TL;DR

  • waymo 出品的 CVPR2020 论文 ,关注在自动驾驶场景(复杂多智能体系统)下的行为预测问题,探索是否能从结构化(矢量化形式)的 HD map 中直接学习场景语义特征,使用 GNN 来从输入的矢量化信息中提取特征实现了上述目标。

Introduction

背景

  • 本文关注在自动驾驶场景(复杂多智能体系统)下的行为预测问题。这需要有一个对前置感知系统检测跟踪框及场景信息(HD map)进行结合的统一表达方式。
  • 传统的行为预测主要有:
    • rule-based:多个车辆的行为在地图约束的假设下进行轨迹预测
    • learining-based:提供了对不同行为假设进行概率解释的好处,但需要构建一个表示来编码地图和轨迹信息;将 HD map 渲染为图片,如下左图,这需要人为设定,同时利用 cnn 提取场景语义信息,这种方式受限于 CNN 的感受野
      在这里插入图片描述
  • 本文希望探索是否能从结构化(矢量化形式)的 HD map 中直接学习场景语义特征
    • 道路要素的地理范围可以是地理坐标中的点、多边形或曲线:车道可以表示成由多个控制点构成的样条曲线;人形横道是一个由几个点构成的多边形;路标是一个点
    • 以上所有元素都可以由多个控制点构成的多段线(polylines)表示

本文方案

在这里插入图片描述

  • 使用 GNN 来从输入的矢量化信息中提取特征:
    • 将每个 vector 作为图中的节点,节点的特征是 vector 的起始和位置、终止位置和其他属性(polylin group id 和语义标注)
    • 来自HD地图的上下文信息以及其他 agent 的轨迹通过 GNN 传播到目标节点
    • 将目标节点的输出特征 decode 为未来轨迹

Dataset/Algorithm/Model/Experiment Detail

实现方式

轨迹和地图的 vector 表示

  • vector 提取
    • map feature:挑选一个起点和方向,在样条曲线上等空间间隔采样,将各个点连成 vector
    • trajectories:等时间间隔采样,从t=0开始往后连成 vector
  • polyline 中的每个点在 graph 中作为一个 node(with feature),其具体表示为
    在这里插入图片描述
    其中 d i s d_{i}^{s} dis d i e d_{i}^{e} die 分别是 vector 的起始点和终止点;a 是属性特征(比如目标类别、时间戳、轨迹、路面属性、车道限速);j 是 polyline 的 id,即代表这个 node 属于哪个 polyline
  • 为了使输入节点特征不随着目标 agents 的位置有变化,规范化了所有向量的坐标,使其以目标 agents 最后一个观察到的时间步长的位置为中心
    • 未来的工作是共享所有交互 agents 的坐标中心,以便可以并行预测它们的轨迹

polyline 子图构造

在这里插入图片描述

  • 对于每个 polyline 构造一个 vector 级别的子图,然后提取每个 node 的特征
    在这里插入图片描述
    这代表 l 层特征得到 l+1 层特征的方式。genc 得到每个 node 的特征,用 MLP 实现;agg 是用于聚合所有临接节点的特征,用 maxpooling 实现;rel 用于连接各节点的关系,用 concat 实现

  • 基于提取得到的各个 node 的特征,聚合得到 polyline 的特征
    在这里插入图片描述
    agg 是 maxpooling 实现

  • 与 PointNet 关系:

    • 可以看成是 PointNet 更通用的形式
    • ds = de 并且 a 和 l 是空的情况下等同于 PointNet
    • 作者认为这种实现更利于结构化的地图表示和 agent 轨迹的特征提取

全局图构造

  • 基于 global interaction graph 提取 polyline 的特征
    在这里插入图片描述
    GNN 是图网络的一层,A 代表 polyline node 的邻接矩阵,可以提供启发,比如利用节点间的空间距离;GNN 基于自注意力实现
    在这里插入图片描述

  • 基于 GNN 输入的 polyline 的特征 decode 得到预测轨迹
    在这里插入图片描述
    traj 是轨迹 decoder,基于 MLP 实现

  • 参考 BERT 等自监督训练思路提出一个辅助的自监督训练损失:随机对 polyline 进行mask操作,然后基于一个额外的 decoder 来对 mask 后的 polyline 进行补全
    在这里插入图片描述
    node 就是补全的decoder,测试时不用

整体训练框架

  • 多任务训练损失
    在这里插入图片描述
    其中 traj 是与 gt 轨迹的负高斯对数似然;node 是补全的 node 特征与gt node 特征的 huber loss;为了防止 node 特征越来越小的 trival 解,polyline node 输入 global graph 网络之前进行 l2 norm
  • 预测的轨迹被参数化为与最后时刻位置的坐标偏移量
  • 根据目标车辆在最后观察位置的方向旋转坐标系

实验结果

Argoverse 数据集

  • 333k 个轨迹,211k 训练,41k验证,80k测试
  • 每个轨迹 5s,基于前 2s 预测后 3s,10Hz采样
  • 感知模型得到跟踪预测框

In-house 数据集

  • HD map、bbox、tracks 信息由感知算法得到,人工标注车辆轨迹
  • 2.2M 训练数据,0.55 M 测试数据
  • 每个轨迹 4s,基于前 1s 预测后 3s
  • 标注类别
    • 车辆:包含静止、直行、转向、换道、倒车
    • 地图:车道线、停车/让行标志、人行横道、减速带

评价指标

  • Average Displacement Error (ADE)
    • 轨迹误差, t ∈ {1.0, 2.0, 3.0},单位为米

基于地图渲染方法的实验

  • 受卷积感受野的影响大
    在这里插入图片描述

vectornet 实验

  • 增加 node 补全有涨点、增加其他 egent 交互有涨点
    在这里插入图片描述

网络深度影响

在这里插入图片描述

网络参数对比

在这里插入图片描述

argoverse leaderboard

在这里插入图片描述

可视化

  • 左图是预测,右图是 attention 可视化,显示了在两个可能的车道中选择了正确的车道
    在这里插入图片描述
  • 显示了即便没有选择到正确的车道,但正确的车道在 attention 结果中也有较好的分数
    在这里插入图片描述

Thoughts

  • 只有轨迹点,不连接成 vector 应该是不行的,文章中介绍了如果不连接成 vector 并且没有额外属性的话就退化为了 PointNet,想象中丢弃了轨迹随时间变化的信息和结构化地图结构的信息也不太科学
  • 对于每个目标 agent 需要进行坐标规范化及坐标系对齐操作
    • 为了使输入节点特征不随着目标 agents 的位置有变化,规范化了所有向量的坐标,使其以目标 agents 最后一个观察到的时间步长的位置为中心
    • 根据目标车辆在最后观察位置的方向旋转坐标系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/148527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法自由之路】快慢指针在链表中的妙用(下篇)

【算法自由之路】快慢指针在链表中的妙用(下篇) 继上篇之后,链表这块还有两个相对较难的问题我们继续举例。 问题 1 给定具有 random 指针的 next 方向无环单链表,复制该链表 单听这个问题可能有点懵,这个链表结构我…

PCB封装创建(CHIP类)

PCB封装要有以下内容 PCB焊盘管脚序号丝印阻焊1脚标识目录 CHIP类(电阻 电容 电感 三极管) 0805C 0805R 0805L SOT-23 1.CHIP类(电阻 电容 电感 三极管) 1.新建一个PCB元件库 打开PCB Library 以下以0805为例。 创建080…

“CAcModuleResourceOverride”: 未声明的标识符

本文迁移自本人网易博客,写于2011年10月8日首先是运行时提示:试图执行系统不支持的操作。添加CAcModuleResourceOverride resourceOverride; 后,编译出现如下错误:error C2065: “CAcModuleResourceOverride”: 未声明的标识符 添…

scikit-learn 普通最小二乘法

scikit-learn 普通最小二乘法什么是普通最小二乘法?参考文献什么是普通最小二乘法? 线性回归模型的数学表达式如下: y^(w,x)w0w1x1…wpx1\hat{y}(w, x)w_{0}w_{1} x_{1}\ldotsw_{p} x_{1}y^​(w,x)w0​w1​x1​…wp​x1​ 其中 w0,w1,...,w…

Java--集合

1、集合框架 集合框架被设计成要满足以下几个目标。 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。 该框架允许不同类型的集合,以类似的方式工作,具有高度的…

【自用】高频电子线路复习(更新中)

疫情原因 没有考试就放假回家了 返校后将先进行死亡考试周 七天考完九门 回校再进行极限复习只能说可以通过 而不利于绩点的提升 所以要从现在开始抽取一些时间进行学习 第七章 频率变换方法与电路分析 7.1 非线性电路包括 发送端的高频振荡器、倍频器、谐振功率放大器和调…

【ROS自定义文件】自定义头文件及源文件的调用

本文记录ROS中的自定义文件的调用,主要包括自定义头文件和源文件的使用。 1 自定义C头文件的调用 注意这个文件目录的结构,尤其是 hello.h 这个自定义的头文件在 include/plumbing_head 文件夹之下,这个会直接影响后续头文件的引用。 hello.…

尚医通-整合网关-Nuxt搭建前端环境(二十六)

目录: (1)整合服务网关 (2)前台用户系统-nuxt搭建前端环境 (3)前台用户系统-目录结构和封装axios (1)整合服务网关 前面的过程使用nginx请求转发 下面使用SpringClo…

ScheduledThreadPoolExecutor定时任务执行线程池分析

概述 ScheduledThreadPoolExecutor自然是继承了ThreadPoolExecutor,那么它也就是一个被定义了特定功能的线程池而已,本质上就是一个ThreadPoolExecutor。 代码分析 可以看到其继承了ThreadPoolExecutor,在new ScheduledThreadPoolExecutor…

【FPGA】Verilog 编码实现:与非门 | 或非门 | 异或门 | NAND/NOR/XOR 行为验证

写在前面:本章主要内容为了解和确认 NAND/NOR/XOR 门的行为,并使用Verilog实现,生成输入信号后通过模拟,验证每个门的操作,并使用 FPGA 来验证 Verilog 实现的电路的行为。 本章目录: Ⅰ. 前置知识 0x00…

C++ 排序大合集

目录 一、了解排序 1、内部 2、外部 二、排序的稳定性 三、插入排序 1、算法和操作 2、代码 四、选择排序 1、算法和操作 2、代码 五、冒泡排序 1、算法和操作 2、代码 六、堆排序 1、优先队列 2、排序代码 七、归并排序 1、定义 2、基本算法 (1)、分离 …

宝塔Linux面板安装MySQL数据库,并且开启远程链接

1.宝塔面板【软件商店】->【应用搜索】,搜索MySQL,然后点击安装想要的版本,我这边是安装的5.6版 2. 安装完后重置数据库管理员密码 3.Navicat Premium 15连接数据库 4.外网navicat工具无法连接数据库的处理办法 4.1输入 mysql -u root -p 后回车&a…

零基础入门反序列化漏洞

目录 前提知识 漏洞产生原理 常见的函数 序列化 反序列化 __sleep函数 私有和保护 __wakeup函数 反序列化漏洞举例 构造XSS漏洞 反序列化免杀后门 POP CHAIN(POP链) 前提知识 漏洞产生原理 serialize() 和 unserialize() 在 PHP内部实现上是没有漏洞的&#xf…

Cadence PCB仿真使用Allegro PCB SI配置电路板层叠结构的方法图文教程

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 目录 1,概述2,配置方法3,总结1,概述 本文详细介绍使用Allegro PCB SI软件配置电路板层叠结构的方法。 2,配置方法 第1步:打开待仿真的PCB文件,并确认软件为Allegro PCB SI 如果,打开软件不是Allegro PCB SI则可这样…

解决No module named tkinter

原因 今天准备使用tutle画个图,导入turtle后运行发现提示没有tkinter这个包,于是尝试pip install tkinter安装,结果当然是失败: 后面一番搜索之后发现tinter是python3自带的包,不能用pip安装,我这里安装的…

JS的六种继承方式

继承 什么是继承? JS里的继承就是子类继承父类的属性和方法 目的可以让子类的实例能够使用父类的属性和方法 抽象的表达就是:一个人有车,有房,那么他的儿子也可以去使用他的车子,住他的房子。 方法一:…

Seata流程源码梳理上篇-TM、RM处理

这一篇我们主要来分析下Seata的AT模式的流程处理。一、流程案例 1、案例源码 ​ 我们本地流程梳理用的是基于spring-cloud框架,注册中心是eurak,服务间调用的是feign,源码下载的是官网的(当然你如果对dubbo更熟悉,也…

CSDN博客之星年度评选活动 - 2022

文章目录一、2022年CSDN博客之星评选活动报名二、2022年CSDN博客之星评选活动流程线上评分流程争议(官方最后证实公布后会更新)三、2022年CSDN博客之星评选规则四、2022年CSDN博客之星评分规则五、2022年CSDN博客之星活动奖品「博客之星」奖品「博客新星…

CInternetSession OpenURL没反应,不能捕获异常

本文迁移自本人网易博客,写于2013年10月22日CString sFileName;CInternetSession iSession;BOOL bRet FALSE;CStdioFile* pFileDown NULL;try{pFileDown iSession.OpenURL(szURL, 1, INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_DONT_CACHE);}catch(...){CStri…

2023/1/8 Vue学习笔记-4-脚手架及相关属性配置

1 创建脚手架 (1)CLI就是 command line interface 的缩写。Vue CLI官网:Vue CLI (2)安装过程: (PS: 提前安装过node.js了,没有安装的可以打开这个:Download …