【VectorNet】vectornet网络学习笔记

news2024/11/15 3:26:00

文章目录

      • 前言
      • (vectornet算法流程)
      • (向量表示)
      • (图构建)
      • (子图构建)
      • (全局图构建)
      • (解码器: 轨迹预测)
      • (辅助研究)
      • (损失函数)
      • (实验)
      • (问题厘清)

 

VectorNet Overview

前言

  • 论文: https://arxiv.org/pdf/2005.04259
  • 代码: https://github.com/xk-huang/yet-another-vectornet
  • 年份: 2020.05
  • 数据: argoverse + in-house behavior prediction dataset

(vectornet算法流程)

  • 读取轨迹地图数据,将其转换为向量化表示

  • 对每个向量化的polyline实体,使用子图网络(MLP+GNN)进行局部子图编码,并输出局部特征

  • 以每个实体的局部子图输出特征作为节点,节点间基于自注意力机制的相似度作为边构建全局图(GNN+self-attention)

  • 对所有向量化的polyline实体,使用GNN进行全局交互建模,输出每个实体的隐状态

  • 对每个agent,使用一个MLP解码器生成多个可能得未来轨迹,并估计他们的概率

  • 计算损失函数,使用ADE和FDE作为评价指标

  • GNN:

    • GNN聚合轨迹和地图polyline的局部信息,全局聚合所有polyline之间的特征,然后可以将该图用于行为预测
    • GNN聚合polyline局部信息时候通过多层GNN操作来找到polyline内部向量之间的关系,在聚合全局信息时通过self-attention自注意力机制来找到各个polyline之间的联系

(向量表示)

  • 地图向量构建

    • 选定起点和方向,从相同空间距离的样条中均匀采样关键点,并将相邻关键点顺序连接成向量
  • 轨迹向量构建

    • 从t=0开始,以固定时间间隔0.1s采样,并将他们连成向量

不管是地图还是轨迹,只要空间或时间间隔合适,生成的折线polyline就可以作为原始元素的近似

(图构建)

  • 我们在向量集之上能够形成一个图形表示

  • 将polyline的一个向量视为节点, 每个节点特征如下 v i = [ d i s , d i e , a i , j ] v_{i} =[d_{i}^{s}, d_{i}^{e}, a_{i}, j] vi=[dis,die,ai,j]

    • 前两个是start和end点坐标, 可以是(x,y)也可以是(x,y,z)
    • 第三个是属性特征, 比如目标类型, 时间戳, 道路特征, 道路限速和其他目标特征
    • 第四个是polyline的整数id,表示节点属于polyline, polyline内部相同
  • 以agent为中心,所有向量的坐标归一化;最后还需要共享所有交互agent的坐标中心以便能并行预测它们的轨迹

(子图构建)

  • 在向量级别构建子图, 以利用节点的空间和语义局部性, 属于同一polyline的所有节点相互连接, 即每个节点和polyline其余所有节点连接

  • 对于一个polyline, P的节点有 v 1 , v 2 , . . . , v p {v_1, v_2, ..., v_p} v1,v2,...,vp

  • 可以定义子图网络如下 v i l + 1 = ϕ r e l ( g e n c ( v i l ) , φ a g g ( v j l ) ) v_{i}^{l+1} = \phi _{rel}(genc(v_{i}^{l}), \varphi _{agg}(v_{j}^{l}) ) vil+1=ϕrel(genc(vil),φagg(vjl))

    v i l v_{i}^{l} vil:表示第i个节点L层的节点特征
    g e n c genc genc:表示节点的变换,实践中采用MLP来实现
    φ a g g \varphi _{agg} φagg:表示节点聚合,用来从相邻的节点获取信息,实践中采用的是max_pooling
    ϕ r e l \phi _{rel} ϕrel:表示 v i v_i vi与周围节点的关系,实践中采用的是concatenate操作

    如下图所示

  • 经过多层的堆叠,来获取整个polyline级别的特征 P = φ a g g ( v i L p ) P = \varphi _{agg}(v_{i}^{L_{p} }) P=φagg(viLp)
    φ a g g \varphi _{agg} φagg也是max_pooling操作

  • 结合上图来理解,总结来说: g e n c o d e r g_encoder gencoder转换单个节点的特征, φ a g g \varphi _{agg} φagg聚合左右相邻节点的信息,而 ϕ r e l \phi _{rel} ϕrel是节点与相邻节点之间的关系算子,可以简单拼接

    • m a x p o o l i n g max_pooling maxpooling最大池化:获取相邻节点最为明显的行为特征,如突然加速等
    • 上图是一个多层感知机MLP,其权重所有节点共享,MLP包含全连接层,然后进行层归一化,再经过ReLU引入非线性
    • 如上图的网络进行堆叠,每个子图网络的 g e n c o d e r g_encoder gencoder权重不同,经过如下处理,得到折线级特征,即再次池化找出一个polyline最需要重点关注的信息 P = φ a g g ( v i L p ) P = \varphi _{agg}(v_{i}^{L_{p} }) P=φagg(viLp)

(全局图构建)

  • 全局图的节点就是每个polyline编码的结果, 就是自注意力机制计算的相似度
  • 对折线节点特征{ p 1 , p 2 , . . . , p P {p_1, p_2, ..., p_P} p1,p2,...,pP}上的高阶交互进行建模 { p i l + 1 } = G N N ( p i l , A ) \left \{ p_{i}^{l+1} \right \} =GNN\left ( p_{i}^{l}, A \right ) {pil+1}=GNN(pil,A)
  • 从自注意力机制的角度来理解 A A A是对折线节点集的,假设 A A A是一个全连接图,那么这个图网络被实现为self-attention自注意力操作 G N N ( P ) = s o f t m a x ( P Q P K T ) P V GNN\left ( P \right ) =softmax(P_{Q}P_{K}^{T} )P_{V} GNN(P)=softmax(PQPKT)PV
  • P P P是节点特征矩阵, P Q , P K , P V P_{Q},P_{K},P_{V} PQ,PK,PV是其线性投影
  • 文章中只使用了单层GNN,也可以使用多层GNN来模拟高阶交互

(解码器: 轨迹预测)

  • 推理过程对于移动agent节点解码未来轨迹: v i f u t u r e = φ t r a j ( p i L t ) v_{i}^{future} = \varphi _{traj}(p_{i}^{L_{t} } ) vifuture=φtraj(piLt)
  • 其中, L t L_t Lt是GNN总层数, φ t r a j \varphi _{traj} φtraj是轨迹解码器,文章中采用了简单的MLP作为解码器,还可以使用其他类型的解码器
  • MLP: 多个全连接层和ReLU激活函数组成, 提取特征并映射到输出向量
  • 输入: 局部/全局特征图
  • 输出: 二维坐标向量

(辅助研究)

  • 文章中为了更好地捕捉不同polyline之间的交互, 在训练期间, 随机屏蔽掉polyline子集特征,如屏蔽 p i p_i pi,然后尝试将其掩盖的特征恢复 p i ^ = φ n o d e ( p i L t ) \hat{p_{i} } =\varphi _{node}(p_{i}^{L_t} ) pi^=φnode(piLt)
  • 其中 φ n o d e \varphi _{node} φnode是MLP节点特征解码器,在推理过程中不使用这些解码器
  • p i ^ \hat{p_{i} } pi^是全连接无序图中的一个节点,文章中通过计算相对的 p i d p_{id} pid来识别单个 p i p_{i} pi

(损失函数)

L = L t r a j + α L n o d e L=L_{traj}+\alpha L_{node} L=Ltraj+αLnode

  • L t r a j L_{traj} Ltraj是预测轨迹与GT轨迹的的交叉熵 -> 负高斯对数似然
  • L n o d e L_{node} Lnode是预测节点与掩码节点之间的Huber损失(综合MSE和MAE优点的指标)
  • 使用minADEminFDE作为评价指标

(实验)

  • 基线: 使用ConvNet对光栅图像进行编码
  • 参数: 使用了3层MLP表示polyline子图,使用1层MLP表示全局交互图,所有MLP中hidden_size = 64
  • 向量坐标归一化,使用最后观察点的目标车辆位置为中心
  • 消融实验得到的几个结论:
    • ConvNet感受野: 精心设计的栅格图裁剪策略能带来性能提升, 但是以增加计算成本为代价
    • 渲染分辨率: 随着栅格图渲染分辨率的提高, 性能普遍提高
    • 地图信息: 添加地图信息能显著提高预测轨迹性能
    • 轨迹信息: 结合他车轨迹信息也能进一步提高性能
    • 辅助研究: 添加节点掩码机制有助于提高性能, 尤其是在较长时间范围内
    • 图层: 对于折线子图3层MLP提供了最佳性能,对于全局图,只需要1层 ; 使用更深的MLP不会带来更好的性能
    • 注意力机制: 注意力机制可视化,注意力机制是agent能够专注于正确的选择

(问题厘清)

  • 问题1:怎么理解子图构建过程中的的MLP, 网络怎么针对所有节点运作的, 是单个polyline的所有节点作为输入?

    • 这里的节点node是polyline内每一个vector node;
    • 是一个多层MLP, polyline的所有vector nodes features作为输入,文章中是3层MLP,每层的参数不同,但是针对所有节点的(所有节点共享)
  • 问题2:文章开头所述, 聚合局部信息的时候使用GNN还是MLP,还是GNN使用MLP实现?

    • 子图构建阶段MLP主要用于vector node节点级别的特征提取,将原始的输入数据转换为有用的特征表示;然后使用GNN进行vector nodes节点间的信息聚合和交互建模。通过这种方式,vectornet能充分利用节点的特征信息,并捕获子图内复杂的交互关系
    • 全局图构建阶段:使用自注意力机制GNN来捕获polyline之间的交互关系,提取每个polyline特征都会根据其他polyline特征进行更新;提取了全局特征后,使用MLP作为解码器生成最终的预测结果,MLP根据全局特征图生成每个agent未来可能的轨迹,并评估这些轨迹的概率,实现从特征空间到输出空间的映射
  • 问题3:vectornet是交互式模型, 支持多智能体同时预测吗?

    • 可以
    • vectornet是一种交互式模型,通过全局图构建和自注意力机制的应用,使得vectornet能够同时处理多个智能体的预测任务,为每个智能体生成准确的预测结果
  • 问题4:vectornet输出一个目标的一条还是多条轨迹, vectornet输出除了未来3s轨迹还包括每条轨迹的概率吗(softmax层得到)

    • vectornet预测得到的轨迹是相对于最后一个观测点的坐标偏移coordinate offset
    • vectornet生成的是单目标多轨迹,除了给出未来3s轨迹,还会通过内部softmax层给出每条轨迹的概率
    • vectornet轨迹偏移通过minADE/minFDE等回归,概率值通过交叉熵损失评估

 


[参考文章]
[1]. vectornet阅读笔记
[2]. vectotnet论文翻译和学习笔记
[3]. vectornet vs hivt
[4]. TNT论文
[5]. TNT论文笔记
[6]. denseTNT论文笔记

created by shuaixio, 2024.07.04

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

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

相关文章

Hadoop联邦模式搭建

在Hadoop架构中提供了三类搭建方式,第一类是给测试或开发人员使用的伪分布式或单NN节点搭建方式,第二类是用来商用化并解决NN单点故障的HA搭建方式,第三类就是这里要说的联邦模式,它本身也是一种供给商用的模式,但是它…

【Apache Doris】周FAQ集锦:第 19 期

【Apache Doris】周FAQ集锦:第 19 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户…

openmediavault 存储安装

1、简介 openmediavault NAS存储,支持linux和windows文件共享(文件系统共享),有中文web界面,有filebrowser插件可以web界面管理、下载文件,有FTP插件支持ftp操作,有用户管理;插件丰富…

“七人团裂变风暴:重塑社交电商格局

在当今商业浪潮中,七人共创团购模式以其独特的魅力,正引领着中小型企业走向市场的新高地。这一模式巧妙融合了社交电商的精髓与拼购的乐趣,不仅加速了用户群体的指数级增长,还极大地提升了产品的市场渗透率与品牌影响力。同时&…

TQSDRPI开发板教程:单音回环测试

将我提供的启动文件复制到SD卡中,并插入开发板,插入串口线,启动模式设置为SD卡启动,开启开关。提供的文件在文章末尾。 ​ 查看串口输出内容 ​ 在串口输出的最后有写命令可以使用 ​ 在串口输入如下内容可以对输出的信号进…

计算机毕业设计选题推荐-游戏比赛网上售票系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

二叉树的分层遍历、栈的压入弹出序列

本章主要来讲解两个OJ题,针对每个OJ题我分三部分来解决,分别是题目解析(主要弄清楚题目要求我们解决什么问题),算法原理,代码编写,接下来让我们进入正题。 一、二叉树的分层遍历 1.题目解析 题…

VSCODE 使用正则表达式匹配替换有规律的行

需求描述 我有类似的文本 count count_l24 count_l32 count count count我需要逐行替换l24,l32所在行,其他行保留。 步骤 替换的时候找到正则表达式的选项 输入: ^._l.$ 替换为空行就行.

攻防世界-web题型-7星难度汇总-个人wp

Web_php_wrong_nginx_config 这个题目nginx配置错误 随便输入显示网站还没建设好。。。 先信息收集一下 换了个无敌好看的终端 没想到7星了还玩这些。。。 看了admin的页面需要先登录 现在的问题是如果读取到这个文件 这个hack的文件也没有东西 到此就不知道了&#xff0…

【二叉树---堆的C语言实现】

1.树的概念与结构 树是一种非线性的数据结构,它n(N>0)个有限节点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂着的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的节点,称为根节…

【基础算法】位运算

位运算 概念位运算模板模板题 概念 异或(x⊕y或x ^ y) 高低位交换:https://www.luogu.com.cn/problem/P1100 题意:给定一个32 3232位整数x xx,在二进制下交换其前16 1616位与后16 1616位,输出最终的数。 答案为ans (…

JVM系列--垃圾回收

在C/C这类没有自动垃圾回收机制的语言中,一个对象如果不再使用,需要手动释放,否则就会出现内存泄漏。内存泄漏指的是不再使用的对象在系统中未被回收,内存泄漏的积累可能会导致内存溢出。 在这段代码中,通过死循环不停…

besier打断和升阶,高阶性质

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 问题描述 对besier曲线在u处打断,生成两条besier曲线对besier曲线升阶处理 bezier高阶性质 求导推导 P ( t ) ∑ i 0 n B i n ( t ) b i \boldsymbol …

uniapp中H5网页怎么实现自动点击事件

<template><view><button ref"myButton" click"handleClick">点击我</button></view> </template><script> export default {mounted() {this.$nextTick(() > {const button this.$refs.myButton;console.l…

【系统分析师】-综合知识-计算机系统基础

1、流水线的吞吐率是指流水线在单位时间里所完成的任务数或输出的结果数。设某流水线有 5 段&#xff0c;有 1 段的时间为 2ns &#xff0c;另外 4 段的每段时间为 1ns&#xff0c;利用此流水线完成 100 个任务的吞吐率约为&#xff08;16&#xff09;个/s 。 2、矢量图像通过使…

Python+PyCharm安装和配置(详细步骤)

Python的安装步骤可以根据用户选择的安装方式&#xff08;如使用安装包安装或源码安装&#xff09;而有所不同。以下将详细讲解两种安装方式的步骤&#xff0c;并附上源码安装的相关说明。 一、使用安装包安装Python 1. 访问Python官网 打开浏览器&#xff0c;输入Python官…

Resilience4J服务熔断隔离与限流

为了保障文章的流畅性&#xff08;文章穿插大量的环境搭建没意思&#xff0c;会干扰文章的主题&#xff0c;无聊的很&#xff09;&#xff0c;将环境的搭建与测试&#xff0c;工具的版本说明放了文末&#xff1a; 六、环境搭建。 一、Circuit Breaker是什么 1.1、官网 https…

C++笔记---内存管理

1. 内存分布 在对操作系统有更加深入的了解之前&#xff0c;在写代码的层面我们需要对下面的几个内存区域有所了解&#xff1a; 1. 栈又叫堆栈--非静态局部变量/函数参数/返回值等等&#xff0c;栈是向下增长的。 2. 堆--用于程序运行时动态内存分配&#xff0c;堆是可以上增长…

【数据结构3】哈希表、哈希表的应用(集合与字典、md5算法和文件的哈希值)

1 哈希表 哈希表一个通过哈希函数来计算数据存 储位置的数据结构&#xff0c;通常支持如下操作: 插入(键&#xff0c;值):插入键值对(键&#xff0c;值) Get(key):如果存在键为键的键值对则返回其值&#xff0c;否则返回空值 删除(键):删除键为键的键值对哈希表(Hash Table&am…

数据仓库系列 2:数据仓库的核心特点是什么?

想象一下,你正站在一座巨大的数据金矿前。这座金矿蕴含着海量的商业洞察,可以帮助你的公司做出精准决策,提升效率,远超竞争对手。但是,如何高效地开采、提炼和利用这些数据黄金呢?答案就是:数据仓库。 目录 什么是数据仓库?数据仓库的核心特点面向主题的组织集成性非易失性…