【VectorNet】vectornet网络学习笔记

文章目录


VectorNet Overview

前言

(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

相关推荐
CS_木成河9 天前
【HuggingFace Transformers】OpenAIGPTModel的核心——Block源码解析
人工智能·gpt·深度学习·transformer·openai·attention·mlp
shuaixio16 天前
【TNT】Target-driveN Trajectory Prediction学习笔记
轨迹预测·vectornet·tnt
逐梦苍穹1 个月前
Self-Attention流程的代码实现【python】
开发语言·人工智能·python·自然语言处理·自注意力机制·self-attention
问老大1 个月前
四种推荐算法——Embedding+MLP、Wide&Deep、DeepFM、NeuralCF
embedding·推荐算法·mlp·deepfm·neuralcf·widedeep
v_JULY_v2 个月前
一文通透想取代MLP的KAN:通俗理解Kolmogorov-Arnold定理和KAN的方方面面
mlp·kan·kolmogorov·arnold
只是有点小怂2 个月前
【TORCH】torch.normal()中的size参数
gnn
只是有点小怂2 个月前
【PYG】Cora数据集简介
gnn
只是有点小怂3 个月前
【PYG】简单分析Planetoid()中存储Cora数据集边的数量
gnn
只是有点小怂3 个月前
【PYG】Planetoid中边存储的格式,为什么打印前十条边用edge_index[:, :10]
gnn