【动手学轨迹预测】2.3 场景表征方法

ops/2024/12/25 12:03:32/

场景表征是指在所有可用的场景信息数据中, 提取出对于预测网络有用的数据, 并将其转换为易于模型学习的数据格式. 对于预测网络来说, 最重要的数据是交通参与者的历史轨迹和地图信息, 表达它们的常见方法有:栅格化和稀疏化

2.1.1 栅格化

  • 多通道表达

如上图所示, 将历史轨迹和地图信息转换成不同通道的栅格图是在卷积神经网络(CNN)中常见的方法. 不同的通道存储不同的信息, 比如图中的可显示区域存在一个通道中, 道路中心线存储在另一个通道中等等.

  • 基于颜色表达

也可以像上图这样, 使用较少的通道数, 人为定义不同的信息来区分. 比如说R,G,B三个通道, 我们将红色定义为agent的历史轨迹信息, 将蓝色定义为地图车道信息, 黑色定义为不可行驶区域等等. 这样就可以缩小栅格图的总数据量.

  • 时序信息

那么如何去表达轨迹中的时序信息呢? 可以将按照时序, 使轨迹的颜色由深变浅. 也可以使用前文的多个通道, 或者是多张图片, 来代表不同时序的信息.

  • 方向, 速度等

还有类似于朝向角这样的方向信息, 也可以对应的映射到图像信息中去表达. 比如将 [ 0 , 2 π ] [0, 2\pi] [0,2π]的方向数据, 对应映射到颜色上去, 比如从红色变成蓝色; 也可以将其映射到亮度上, 比如由暗变亮.

其他诸如速度, 加速度, 转向速度等等不易直接表达成图像的数据, 都可以用类似的方法一一映射到图像中去.

  • 优缺点

在早期基于CNN的预测网络中, 这种栅格化的方法非常流行. 因为使用栅格图:

  • 天然善于接受基于视觉的输入信息
  • 简便的转换场景中的轨迹, 地图信息, 清晰直观

但是它的缺点也很明显:

  • 栅格图的存储成本高, 随着场景大小指数增长
  • 低分辨率的栅格图, 信息不够明确; 高分辨率的栅格图, 无用细节信息过多
  • 过多的映射导致可解释性较差
  • 不易可视化数据的信息损失

2.1.2 稀疏化

稀疏化是指将这些图形数据使用向量集表达, 对于轨迹车道线等线段元素, 向量集代表折线段; 对于可显示区域等多边形元素, 向量集代表包围起来的多边形, 这种做法的典型网络是VectorNet.

同时, 车道的转向属性, 车道线属性, 限速等等信息, 都可以直接放入到向量的附属属性中, 输入信息可以完整的保存下来的同时, 只需要存储较小的数据量.

稀疏化表达极大的提升了模型的预测模型的性能, 训练效率和泛化能力, 基本已经成为了场景表征的主流方法.

这些每个对象的向量表达, 可以对每个对象向量集单独编码, 之后再进行聚合, 比如VectorNet使用GNN.

或者是使用联合编码来捕捉他们的交互关系, 比如Transformer.

2.1.2.1 VectorNet: 基于GNN的矢量化编码

(1) 主要贡献

  1. 第一个矢量化场景上下文和智能体的动力学信息进行行为预测。
  2. 我们提出了分层图网络以及节点完成辅助任务。
  3. 在内部行为预测数据集和Argoverse数据集上评估了此方法,与渲染的方法相比达到了同等或更好的性能,并节省了70%的模型尺寸。这个方法在Argoverse上也达到了最优的性能。

(2) VectorNet 模型

https://picx.zhimg.com/80/v2-69572c0354ef229c9639fa70a5073e09_1440w.png?source=d16d100b

我们提出的矢量网概述。观察到的智能体轨迹和地图特征被表示为向量序列,并传递到局部图形网络以获得多段线级特征。然后将这些特征传递到完全连通的图模型高阶相互作用。我们计算了两种类型的损失:根据智能体对应于节点特征预测未来的轨迹以及其特征被掩盖时预测节点特征。

(3) 轨迹和地图的表示

HD地图中的大多数表示都是样条曲线(如车道)、闭合形状(如交叉口区域)和点(如红绿灯),以及附加属性信息,如当前状态(如交通颜色,道路速度限制)。对于智能体,其轨迹是关于时间的有向样条曲线形式。所有这些元素都可以近似为矢量序列。

对于地图特征,我们选择一个起点和方向,从条线中均匀采样关键点并将相邻的关键点依次连接成向量;对于轨迹,我们可以从t=0开始,以固定的时间间隔(0.1秒)采样关键点,并将它们连接到向量中。给定足够小的空间或时间间隔,生成的多段线可作为地图和轨迹的近似值。

我们的矢量化过程是连续轨迹和vector set、地图信息和vector set之间的一对一映射,尽管后者是无序的。这允许我们可以通过图神经网络进行编码。更具体地说,我们将属于多段线 P j P_{j} Pj的每个向量 v i v_i vi视为图中的node,其node表示为

v i = { d i s , d i e , a i , j } v_{i} = \left\{ d_{i}^{s},d_{i}^{e},a_{i},j \right\} vi={dis,die,ai,j}

d i s , d i e d_{i}^{s},d_{i}^{e} dis,die前两个 是起点和终点的坐标, a i a_i ai对应于属性特征,如对象类型、轨迹的时间戳或车道的道路特征类型或速度限制;j 是 P j P_j Pj的整数id,表示 v i v_i vi P j P_j Pj

归一化:为了使输入节点特征相对位置不变,对于目标智能体,作者以目标智能体最后的观测时间下的位置,对所有向量的坐标进行归一化。

(4) 构造多段线子图

为了利用节点的空间和语义局部性,这里采用分层方法,首先在向量层构造子图,其中所有向量节点都相互连接,并且用同一多段线表示。考虑具有节点{ v 1 , v 2 , … , v P v_1,v_2,…,v_P v1v2vP}的多段线P将单层子图传播操作定义为:

v i ( l + 1 ) = φ r e l ( g e n c ( v i ( l ) ) , φ a g g ( g e n c ( v j ( l ) ) ) v_i^{(l+1)} = φ_{rel}(genc(v_i^{(l)}),φ_{agg}({genc(v_j^{(l)}})) vi(l+1)=φrel(genc(vi(l)),φagg(genc(vj(l)))

其中 v i ( l ) v_i^{(l)} vi(l) 是l层子网络上面的节点特征, v l 0 v_{l}^{0} vl0 是输入特征 vi 。

g e n c ( . ) genc(.) genc(.) 用于转换独立的节点,是一个MLP,所有节点共享参数。一层全连接层后面跟着layer normalization 和ReLU non-linearity。

φ a g g ( . ) φ_{agg(.) } φagg(.)用于集合周边节点的信息,是一个最大池化的操作。

φ r e l ( . ) φ_{rel(.)} φrel(.) 表示节点和其邻居之间的关系,是一个简单的连接运算。

https://pica.zhimg.com/80/v2-5988f773f410beefe44baf9193384f27_1440w.png?source=d16d100b

相同多线段下节点的计算流

我们堆叠多层子图网络,其中 g e n c ( . ) genc(.) genc(.)的权重不同。最后,为了获得polyline级别的特征上,我们计算

⁍ ⁍

其中 g e n c ( . ) genc(.) genc(.)再一次最大池化。

(5) 高阶交互的全局图

我们现在在全局交互图中考虑polyline node之间的交互,用全局交互图进行建模:

{ p i ( l + 1 ) } = G N N ( { p i ( l ) } , A ) \left\{ p_{i}^{\left( l +1\right)} \right\} = GNN(\left\{ p_{i}^{\left( l \right)} \right\},A) {pi(l+1)}=GNN({pi(l)},A)

其中 { p i ( l ) } \left\{ p_{i}^{\left( l \right)} \right\} {pi(l)} 是多线段节点的集合。 G N N ( . ) GNN(.) GNN(.) 对应的单层的图神经网络。A对应节点的邻接矩阵,它能够提供节点之间的距离之类的信息。我们假设A是一个全连接的图,图网络可以表达成self-attention:

G N N ( P ) = s o f t m a x ( P Q P K T ) P V GNN(P)= softmax\left( P_{Q}P_{K}^{T} \right)P_{V} GNN(P)=softmax(PQPKT)PV

其中 P P P是节点特征矩阵, P Q P_Q PQ P V P_V PV P K P_K PK 是线性投影。

作者将移动的智能体的未来轨从节点中进行解码:

v i f u t u r e = φ t r a j ( P i L t ) v_{i}^{future} = \varphi_{traj}\left( P_{i}^{L_{t}} \right) vifuture=φtraj(PiLt)

其中 L t L_t Lt是GNN层总数的数目,而 ψ t r a j ( . ) ψ_{traj}(.) ψtraj(.)是轨迹解码器。为了简单起见,我们使用MLP来解码。

在实现中使用单个GNN层,在推理期间,仅需要计算与agent相对应的节点特征。如果有必要,也可以堆叠多层 G N N ( . ) GNN(.) GNN(.)来建模进行高阶交互。

为了让全局交互图更好地捕捉不同轨迹和map polyline之间的交互,这里引入了一个辅助图完成任务。在训练期间,我们随机掩盖polyline节点的子集的特征,然后尝试将其屏蔽功能恢复为:

p ^ i = φ node  ( P i ( L t ) ) \hat{\mathbf{p}}_i=\varphi_{\text {node }}\left(\mathbf{P}_i^{\left(L_t\right)}\right) p^i=φnode (Pi(Lt))

其中 φ n o d e ( . ) \varphi_{node}\left( . \right) φnode(.) 是实现MLP解码的节点特征,这些特征不用于推断的时候。 P i P_i Pi 是来自全连阶层的节点。为了能够区分独立的polyline节点是对应的特征被隐藏的,计算起始坐标的最小值得到 P i i d P_{i}^{id} Piid,这些输入的节点特征变成

P i 0 = [ P i ; P i i d ] P_{i}^{0} = \left[ P_{i};P_{i}^{id} \right] Pi0=[PiPiid]

(6) 整体框架

一旦构建了分层图网络,针对多任务培训目标进行优化

L = L traj  + α L node  \mathcal{L}=\mathcal{L}_{\text {traj }}+\alpha \mathcal{L}_{\text {node }} L=Ltraj +αLnode 

其中, L t r a j L_{traj} Ltraj是未来真实轨迹的负高斯对数似然, L n o d e L_{node} Lnode是在预测的节点特征和真值之间Huber损失, α α α=1.0是平衡两者的损失标量。作者在将polyline节点特征馈送到全局图网络之前对其进行L2归一化。

其他交通参与者采用的是相对偏移,起点是上一帧对目标agent的观测,并且基于上一帧目标agent观测位置的heading建立相对坐标系。

我们对多段线子图使用三个图层,对全局交互图使用一个图层。所有MLP中隐藏单位的数量固定为64。MLP之后是归一化和ReLU非线性。我们以车辆最后观测到的位置为中心,将矢量坐标归一化。VectorNet在8个GPU上同步训练使用Adam optimizer。学习速率每5分钟衰减一次按因子0.3计算,我们训练模型的总时间为25个回合,初始学习率为0.001。

(7) 实验验证

https://picx.zhimg.com/80/v2-26244b94b8ed28d42e983c2d049c9462_1440w.png?source=d16d100b

VectorNet相比ResNet-18系列相比,参数量仅为29%,计算量小仅为20%,效果提升18%,真正地实现了更小,更快,更强。

2.1.2.2 基于Transformer的矢量化编码

将在2.5节详细介绍

推荐阅读

  • 端到端理论与实战
  • 动手学轨迹预测
  • 动手学运动规划
  • 动手学行为决策
  • 强化学习入门笔记


http://www.ppmy.cn/ops/144846.html

相关文章

python+PyPDF2实现PDF的文本内容读取、多文件合并、旋转、裁剪、缩放、加解密、添加水印

目录 读取内容 合并文件 旋转 缩放 裁剪 加密和解密 添加水印 安装:pip install PyPDF2 -i https://pypi.tuna.tsinghua.edu.cn/simple 读取内容 from PyPDF2 import PdfReader, PdfMerger, PdfWriterdef read_pdf(pdf_path):pdf_reader PdfReader(pdf_p…

HW | AMD GPU查看型号rocm-smi --showallinfo

. 背景 在使用GPU进行AI模型训练或推理部署的时候,我们通常需要确认当前系统中的硬件信息,如GPU型号、GPU数量、GPU可用显存等等。 在NVIDIA GPU上,指令nvidia-smi默认打印以上所有的常用信息。对应来说,AMD GPU中常用指令rocm…

2024楚慧杯WP

web 速算比赛 Sal的图集 ssti {{config.__class__.__init__.__globals__.get("os").popen(tac /flag).read()}} popmart index.php源码 <?php173 $pat "/^(((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))/";17…

【前端】入门指南:Vue中使用Node.js进行数据库CRUD操作的详细步骤

&#x1f4a5; 欢迎来到我的博客&#xff01;很高兴能在这里与您相遇&#xff01; 首页&#xff1a;GPT-千鑫 – 热爱AI、热爱Python的天选打工人&#xff0c;活到老学到老&#xff01;&#xff01;&#xff01;导航 - 人工智能系列&#xff1a;包含 OpenAI API Key教程, 50个…

ASP.NET Core Web API 控制器

文章目录 一、基类&#xff1a;ControllerBase二、API 控制器类属性三、使用 Get() 方法提供天气预报结果 在深入探讨如何编写自己的 PizzaController 类之前&#xff0c;让我们先看一下 WeatherController 示例中的代码&#xff0c;了解它的工作原理。 在本单元中&#xff0c…

数字逻辑(五)——用二进制来表示音频和视频

目录 1. 用二级制来表示音频 1.1 采样 1.2 量化 1.3 编码 2. 用二进制来表示视频 2.1 使用二进制来存储文件 2.2 使用二进制来采集视频 2.3 计算机如何播放视频 1. 用二级制来表示音频 声音是由物体的振动来表示的&#xff0c;振动是一种连续的波形&#xff0c;因此…

VS Code Copilot 与 Cursor 对比

选手简介 VS Code Copilot&#xff1a;算是“老牌”编程助手了&#xff0c;虽然Copilot在别的编辑器上也有扩展&#xff0c;不过体验最好的还是VS Code&#xff0c;毕竟都是微软家的所以功能集成更好一些&#xff1b;主要提供的是Complete和Chat能力&#xff0c;也就是代码补全…

AngularJS 入门01

AngularJS 扩展了 HTML AngularJS 通过 ng-directives 扩展了 HTML。 ng-app 指令定义一个 AngularJS 应用程序。 ng-model 指令把元素值&#xff08;比如输入域的值&#xff09;绑定到应用程序。 ng-bind 指令把应用程序数据绑定到 HTML 视图。 <!DOCTYPE html> &l…