这里写自定义目录标题
- 前言
- (文章的核心思想)
- (1阶段)
- (2阶段)
- (3阶段)
- (网络框架)
- 1. 场景上下文编码
- 2. 目标预测
- 3. 目标条件运动估计
- 4. 轨迹评分与选择
- (模型推理)
- (总结)
- (消融研究结论)
- (网络)
- (问题厘清)
前言
- 论文: https://arxiv.org/abs/2008.08294
- 代码: https://github.com/Henry1iu/TNT-Trajectory-Prediction
- 年份: 2020.08
- 数据: argoverse + INTERACTION dataset + In-house Pedestrian-at-Intersection dataset + Stanford Drone dataset
(文章的核心思想)
p ( s F ∣ χ ) = ∫ τ ∈ τ ( c P ) p ( τ ∣ χ ) p ( s F ∣ τ , χ ) d τ p(s_F|\chi)=\int_{\tau\in \tau(c_P)}^{} p(\tau|\chi)p(s_F|\tau,\chi)d\tau p(sF∣χ)=∫τ∈τ(cP)p(τ∣χ)p(sF∣τ,χ)dτ
- 其中, χ = ( s P , c P ) \chi = (s_P, c_P) χ=(sP,cP), s P s_P sP是单个目标的观察状态序列, c P c_P cP是与其他代理和场景元素组成的环境交互, s F s_F sF是未来时间步的状态序列
- 我们想捕获的是整体概率分布 p ( s F ∣ χ ) p(s_F|\chi) p(sF∣χ)
- τ \tau τ是目标空间, p ( τ ∣ χ ) p(\tau | \chi) p(τ∣χ)p(t|x)是目标分布可以很好的捕获意图的不确定性
- 文章使用一组离散的位置来近似目标空间, 将目标分布p(t|x)的估计转换为分类任务,有更好的解释性,在考虑目标空间t的时候也引入了专家知识即道路拓扑结构
文章分为三个阶段进行:
- 1阶段: 确定目标空间 τ \tau τ的信息。即目标预测, 根据观察到的 χ \chi χ, 用一组离散目标状态来模拟意图的不确定性, 然后输出目标分布 p ( τ ∣ χ ) p(\tau | \chi) p(τ∣χ), 也就是anchor打分
- 2阶段: 以目标为条件的运动估计。有了选定的目标空间, 即top离散点, 对从初始状态到未来可能运动状态进行单模态建模, 即输出公式(1)的结果
3阶段: 适应下游任务。需要给出一小部分有代表性的未来预测, 而不是所有可能未来的完整分布, 什么都预测相当于没预测。所以3阶段就是学习评分函数对结果进行评分选择
pipeline的三个阶段
- target prediction: 给所有anchor点打分, 选出top的anchor点
- target-conditioned motion estimation: 就选出的anchor点回归出完整轨迹
- trajectory scoring & selection: 就2阶段得到的几条轨迹, 考虑其他预测轨迹的同时估计轨迹的概率
(1阶段)
- 1阶段最重要, 可有不同的撒点策略
- 撒点策略需要有适当的分辨率, 对全部可行驶区域都要有很好的覆盖。只要goal选定, 对下游就很有帮助
- 文章中提到的撒点策略:
- (1) 根据地图信息撒点
- (2) grid网格化撒点
- 1阶段在给goal打分的同时还会回归出两个offset,goal+offset才是2阶段用到的endpoint
(2阶段)
- 轨迹拟合难度不高, 需要符合运动学和动力学约束
(3阶段)
- 对整条轨迹进行打分, 打分策略见下一章节
(网络框架)
1. 场景上下文编码
- 场景上下文编码是轨迹预测的第一步, 以捕获agent-agent和agent-road交互
- 如果场景上下文仅自上而下的图像可用, 采用ConvNet作为上下文编码器
- 如果高精地图可用, 采用先进的VectorNet作为上下文编码器
- polyline作为高精地图元素 c P c_P cP和智能体轨迹 s P s_P sP的抽象
- 采用子图网络(MLP+GNN)对每条折线进行编码, 使用全局图(注意力机制的GNN)来模拟折线之间的交互关系
- 输出每个agent的全局上下文特征x(MLP作为decoder)
2. 目标预测
-
通过一组N个离散的, 具有连续偏移量的量化位置来模拟潜在未来目标
τ = { τ n } = { ( x n , y n ) + ( △ x n , △ y n ) } n = 1 N \tau = \left \{ \tau^n \right \} =\left \{ (x^n,y^n)+(\bigtriangleup x^n, \bigtriangleup y^n) \right \} _{n=1}^{N} τ={τn}={(xn,yn)+(△xn,△yn)}n=1N-
小写 τ \tau τ被定义为agent在固定时间范围T(预测时长)内可能出现的位置 ( x , y ) (x,y) (x,y),然后通过离散连续分解, 对目标分布进行建模 p ( τ n ∣ χ ) = π ( τ n ∣ χ ) ⋅ N ( △ x n ∣ v x n ( χ ) ) ⋅ N ( △ y n ∣ v y n ( χ ) ) p(\tau^n|\chi)=\pi(\tau^n | \chi)\cdot N(\bigtriangleup x^{n}|v_{x}^{n}(\chi) )\cdot N(\bigtriangleup y^{n}|v_{y}^{n}(\chi) ) p(τn∣χ)=π(τn∣χ)⋅N(△xn∣vxn(χ))⋅N(△yn∣vyn(χ))
-
其中 π ( τ n ∣ χ ) = e x p ( f ( τ n , χ ) ) ∑ τ ′ e x p ( f ( τ ′ , χ ) ) \pi(\tau^{n}|\chi)=\frac{exp(f(\tau^{n}, \chi))}{\sum_{\tau'}^{} exp(f(\tau', \chi))} π(τn∣χ)=∑τ′exp(f(τ′,χ))exp(f(τn,χ))是位置选择的离散分布,以此来预测目标位置及其最可能的偏移量的离散分布
-
p ( τ n ∣ χ ) p(\tau^{n} | \chi) p(τn∣χ)将连续空间上概率分布的预测拆成两部分:一部分是离散点, 也就是anchor点;另一部分是offset, 也就是anchor对应的offset, 两者加起来得到goal的位置
-
N ( ⋅ ∣ v ( ⋅ ) ) N(\cdot|v(\cdot)) N(⋅∣v(⋅))表示广义正态分布, 均值记为 v ( ⋅ ) v(\cdot) v(⋅)
-
f ( ⋅ ) f(\cdot) f(⋅)和 v ( ⋅ ) v(\cdot) v(⋅)都使用具有目标坐标 ( x k , y k ) (x^{k}, y^{k}) (xk,yk)和场景上下文特征 χ \chi χ为输入的2层MLP实现
-
f f f用于给所有target打分, v v v用于拟合回归出offset
-
f f f使用交叉熵, v v v使用Huber loss
-
-
此阶段损失函数如下 L S 1 = L c l s ( π , u ) + L o f f s e t ( v x , v y , △ x u , △ y u ) L_{S1}=L_{cls}(\pi, u)+L_{offset}(v_x,v_y,\bigtriangleup x^u, \bigtriangleup y^u) LS1=Lcls(π,u)+Loffset(vx,vy,△xu,△yu)
- 其中 u u u为最接近GT真值位置的目标, L c l s L_{cls} Lcls为交叉熵, L o f f s e t L_{offset} Loffset为Huber Loss, v x , v y v_x, v_y vx,vy为均值位置, △ x , △ y \bigtriangleup x, \bigtriangleup y △x,△y为 u u u与GT真值位置的空间偏移量
-
撒点过程
-
对于车辆: 车道中心线上的点进行均匀采样, 作为候选目标
- 该方法基于车辆通常不会偏离车道太远的假设
- 文章中每1m至少采样一个点作为候选目标
-
对于行人: 在agent周围生成一个虚拟网络grid, 并将网格点作为候选目标
- 文章中网络比如10x10, 每1m一个网格点作为候选目标
-
对于每个候选目标, TNT目标预测器会生成一个 ( π , △ x , △ y ) (\pi, \bigtriangleup x, \bigtriangleup y) (π,△x,△y)组成的元组
- π \pi π表示到达该目标的概率, 如前面的 π \pi π表达式;另两个是相对目标中心偏移量
- 过程中可能设置N = 1000, 以增加潜在未来点的覆盖范围
- 然后保留较小数目,比如top M = 50,好的M有助于平衡召回率和模型效率
- 采用有限离散目标空间回归相比直接回归,可以避免模式平均问题;模式平均是阻碍多模态预测的主要因素
-
3. 目标条件运动估计
-
第二阶段隐藏了两个假设:
- [1] 条件独立性: 未来时间步之间相互独立, 而不是未来时间步t影响t+1
- [2] 给定目标的轨迹分布是正态分布的: 对于短时预测假设成立, 长时预测需要多次迭代目标预测和运动估计两个过程以保持该假设成立
-
这个阶段也是用2层MLP实现, 输入是上下文特征 χ \chi χ和目标位置 τ \tau τ, 输出可能的 M M M条轨迹
-
损失函数如下 L S 2 = ∑ t = 1 T L r e g ( s ^ t , s t ) L_{S2}=\sum_{t=1}^{T}L_{reg}(\hat{s}_t, s_t ) LS2=t=1∑TLreg(s^t,st)
- L r e g L_{reg} Lreg为每步坐标偏移的Huber Loss
4. 轨迹评分与选择
-
评估未来完整轨迹s_f的可能性
-
使用最大熵模型对第二阶段的M个轨迹进行评分得到预测分数: ϕ ( s F ∣ χ ) = e x p ( g ( s F , χ ) ) ∑ m = 1 M e x p ( g ( s F m , χ ) ) \phi (s_F|\chi)=\frac{exp(g(s_F, \chi))}{\sum_{m=1}^{M}exp(g(s^m_F, \chi)) } ϕ(sF∣χ)=∑m=1Mexp(g(sFm,χ))exp(g(sF,χ))
- g ( ⋅ ) g(\cdot) g(⋅)是2层MLP
-
这个阶段训练损失函数如下 L S 3 = L C E ( ϕ ( s F ∣ χ ) , ψ ( s F ) ) L_{S3}=L_{CE}(\phi (s_F|\chi), \psi (s_F)) LS3=LCE(ϕ(sF∣χ),ψ(sF))
- 预测分数和GT真值分数的交叉熵
- 真值分数计算 ψ ( s F ) = e x p ( − D ( s , s G T ) / α ) ∑ s ′ e x p ( − D ( s ′ , s G T ) / α ) \psi (s_F)=\frac{exp(-D(s, s_{GT})/\alpha)}{\sum_{s'}^{}exp(-D(s',s_{GT})/\alpha) } ψ(sF)=∑s′exp(−D(s′,sGT)/α)exp(−D(s,sGT)/α)
- D的单位是m, alpha是温度,D的计算公式 D ( s i , s j ) = m a x ( ∥ s 1 i − s 1 j ∥ 2 2 , . . . , ∥ s t i − s t j ∥ 2 2 ) D(s^{i},s^{j})=max(\left \| s_{1}^{i}-s_{1}^{j} \right \| _{2}^{2} , ...,\left \| s_{t}^{i}-s_{t}^{j} \right \| _{2}^{2}) D(si,sj)=max( s1i−s1j 22,..., sti−stj 22)
-
这一阶段, 从M条中选择K条, 这个过程先对评分轨迹由高到低排序, 然后贪婪选择, 过程中剔除近乎重复的轨迹, 剔除过程使用类似非最大抑制算法NMS
-
轨迹评分的时候有个似然得分和多样性得分:
- 似然得分: 衡量每个轨迹与真实轨迹的匹配程度, 使用广义正态分布计算
- 多样性得分: 衡量每个轨迹与其他轨迹的差异程度, 使用轨迹间平均距离计算
-
排序过程: 先根据似然得分进行排序, 再根据多样性得分进行排序
(模型推理)
-
端到端训练, 总的损失函数:
L = λ 1 L S 1 + λ 2 L S 2 + λ 3 L S 3 L=\lambda _{1}L_{S1}+\lambda _{2} L_{S2}+\lambda _{3} L_{S3} L=λ1LS1+λ2LS2+λ3LS3- λ 1 / λ 2 / λ 3 \lambda _{1}/\lambda _{2}/\lambda _{3} λ1/λ2/λ3用来平衡训练过程
-
推理过程如下:
- (1) 对上下文进行编码
- (2) 取样 N N N个候选目标作为目标预测器的输入,根据 π ( τ ∣ χ ) \pi(\tau|\chi) π(τ∣χ)的估计取前 M M M个目标
- (3) 从运动估计模型 p ( s F ∣ τ , χ ) p(s_F|\tau, \chi) p(sF∣τ,χ)中为 M M M个目标中的每个目标提取 M A P MAP MAP轨迹
- (4) 通过 ϕ ( s F ∣ τ , χ ) \phi (s_F|\tau, \chi) ϕ(sF∣τ,χ)对 M M M个轨迹进行评分,并选出最终的 K K K个轨迹集
(总结)
-
参数选择:
- TNT三个阶段都采用的是2层MLP
- hidden_size设置为64
- 阶段3中温度 α \alpha α设置为0.01
- 总的损失权值设置为 λ 1 \lambda_{1} λ1 = 0.1, \lambda_{2} = 1.0, \lambda_{3} = 0.1
- 优化器选用Adam
- epochs = 50
- 学习率设置为0.001
- batch_size = 128
-
三阶段总结
阶段 输入 输入描述 输出 输出描述 Loss Loss描述 S 1 S1 S1 χ = ( s P , c P ) \chi=(s_P,c_P) χ=(sP,cP) agent的全局上下文特征编码 p ( τ n ∣ χ ) p(\tau^{n} | \chi) p(τn∣χ) N个目标位置及其偏移量的分布;再根据位置离散分布结果 π ( τ ∣ χ ) \pi(\tau|\chi) π(τ∣χ)选择前M个 L S 1 = L c l s ( π , u ) + L o f f s e t ( v x , v y , △ x u , △ y u ) L_{S1}=L_{cls}(\pi, u)+L_{offset}(v_x,v_y,\bigtriangleup x^u, \bigtriangleup y^u) LS1=Lcls(π,u)+Loffset(vx,vy,△xu,△yu) L c l s L_{cls} Lcls=交叉熵; L o f f s e t L_{offset} Loffset=Huber Loss S 2 S2 S2 ( χ , τ ) (\chi, \tau) (χ,τ) 场景上下文特征和目标位置 p ( τ n ∣ χ ) p(\tau^{n} | \chi) p(τn∣χ) M条轨迹 L S 2 = ∑ t = 1 T L r e g ( s ^ t , s t ) L_{S2}=\sum_{t=1}^{T}L_{reg}(\hat{s}_t, s_t ) LS2=∑t=1TLreg(s^t,st) L r e g L_{reg} Lreg为每一时间步坐标偏移的Huber Loss S 3 S3 S3 ( χ , s F , s G T ) (\chi, s_F, s_{GT}) (χ,sF,sGT) s F s_F sF=M条轨迹; s G T s_{GT} sGT=真值轨迹 K条轨迹及其概率 从M条轨迹中选择K条轨迹,NMS方法 L S 3 = L C E ( ϕ ( s F ∣ χ ) , ψ ( s F ) ) L_{S3}=L_{CE}(\phi (s_F|\chi), \psi (s_F)) LS3=LCE(ϕ(sF∣χ),ψ(sF)) 预测分数 ϕ \phi ϕ与真值分数 ψ \psi ψ的交叉熵 -
TNT对1阶段目标撒点(对 ( x k , y k ) (x^{k}, y^{k}) (xk,yk)的分布),以及2阶段运动估计对未来轨迹建模,都采用了广义正态分布
-
评估指标采用 A D E ADE ADE和 F D E FDE FDE以及 M R MR MR, 对于 K K K个轨迹采用 m i n A D E K minADE_K minADEK和 m i n F D E K minFDE_K minFDEK
(消融研究结论)
- (1) 条件运动估计能生成以条件目标为终点的轨迹
- (2) 对于行人,采用网格法比地图采样方式获取目标表现更好
- (3) 在达到饱和点之前,越密集的目标能够获得更好的性能,如下
- (4) 通过1阶段的偏移回归(目标增加偏移量),1阶段性能提高了0.16m
- (5) 2阶段的假设成立, 即机器人的运动状态是单模态的, 也就是2阶段用单模态分布对从初始状态到目标的未来可能运动进行建模是合理的
(网络)
- Encoding
- 采用vectornet编码子图和全局图信息
- Decoding
- 即上面所述的3个预测阶段
- 输出topK个带概率的轨迹
(问题厘清)
-
问题1: TNT输出是多模态的吗
- 多模态。文章在目标预测的时候也是对未来有限个目标位置进行建模
- TNT的多模主要放在第一阶段,第二阶段目标条件运动估计就是给定target出轨迹了
-
问题2: TNT支持多目标同时预测吗
- TNT方法是围绕单目标设计的,通过三个阶段生成单目标智能体的多条预测轨迹(单目标多模态)
- 也支持拓展到多目标预测, 但是会存在未来轨迹依赖和计算效率方面的问题
-
问题3: 目标预测阶段, 会因为撒点漏掉真实意图吗
- 理论上撒点会对全局区域都有覆盖, 但是因为行人是网格撒点, 应该是不会遗漏意图的, 最多不准确; 但是车辆是结合道路结构特征的撒点, 如果地图元素缺失可能会导致没有撒点到真实意图
- 由于撒点太稀疏或者撒点分布不合理或者传感器噪声地图误差等, 会造成撒点漏掉真实意图的可能性; 文章中出于平衡召回(意图找查全率)和模型效率考虑, 选定N=1000, 选择top M=50
-
问题3: TNT中的NMS非最大抑制方法是什么, 如何选择局部高分目标, 启发式搜索? 贪心算法?
- NMS是非最大值抑制, Non-Maximum Suppression. 抑制非最大值的元素, 保留极大值的元素; 多用于目标检测,目标跟踪等, 是一种去重策略; 步骤:选高置信度结果->计算IoU->阈值过滤->遍历
- NMS本身是一种贪心算法, 只考虑当前选择的区域, 而忽略了全局最优解的可能性
- 可以考虑其他全局优化算法如DP等, 或者使用改进的NMS算法如soft NMS等
-
问题5:TNT编码的车道元素时lane centerline还是lane boundary
- 如果两者都提供, 那可以同时编码两种地图元素;
- 如果只关注在车道上正常行驶车辆, 且LC已经足够表达这种趋势, 那TNT倾向于只编码LC
- 如果是需要预测变道行为, 则可能同时编码车道边界LB
- 根据具体情况而定
-
问题6:TNT第一阶段如何从N个撒点里保留M个
- 一阶段使用交叉熵监督打分网络 f f f的输出,使用Huber loss监督偏移量预测网络 v v v的输出;
- 通过 π \pi π得到候选目标点的概率值,然后按照概率选择最高的M个候选目标点
创作不易,如有帮助,请 点赞 收藏 支持
[参考文章]
[1]. TNT论文翻译和笔记
[2]. TNT学习笔记
[3]. TNT论文翻译
[4]. NMS算法
created by shuaixio, 2024.07.05