【VectorNet】vectornet网络学习笔记

2024-08-24 21:28
文章标签 学习 笔记 网络 vectornet

本文主要是介绍【VectorNet】vectornet网络学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 前言
      • (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

这篇关于【VectorNet】vectornet网络学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1103641

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识