首页 > 其他分享 >【论文阅读笔记】Trajectron++:基于异构数据的动态可行轨迹预测

【论文阅读笔记】Trajectron++:基于异构数据的动态可行轨迹预测

时间:2024-12-12 21:27:48浏览次数:4  
标签:异构 轨迹 预测 智能 Trajectron 模型 ++ 2.2

 

原文:

https://arxiv.org/pdf/2001.03093.pdficon-default.png?t=O83Ahttps://arxiv.org/pdf/2001.03093.pdf源码:

StanfordASL/Trajectron-plus-plus: Code accompanying the ECCV 2020 paper "Trajectron++: Dynamically-Feasible Trajectory Forecasting With Heterogeneous Data" by Tim Salzmann*, Boris Ivanovic*, Punarjay Chakravarty, and Marco Pavone (* denotes equal contribution). (github.com)icon-default.png?t=O83Ahttps://github.com/StanfordASL/Trajectron-plus-plus

前言:这是上一篇综述里对比过的一个效果不错的行人轨迹预测方法。 


一、前言

        在人机交互和自动驾驶等领域,预测多智能体的未来行为是实现安全、高效导航的关键。然而,现有的轨迹预测方法普遍存在以下问题: 一方面,许多方法忽视了智能体的动态约束,导致预测结果可能不符合物理现实(如车辆横向滑动)。另一方面,这些方法很少结合语义地图等环境信息,使得预测缺乏对场景结构的充分理解。此外,多智能体的相互影响以及自我智能体的未来运动计划在现有模型中往往被简化或忽略。

        为了弥补这些不足,Trajectron++ 提出了一个模块化、图结构的循环模型,能够生成符合动态约束的轨迹预测,同时结合了异构数据以提升预测精度和场景适应能力。

二、本文方法

2.1 问题定义

        模型需要预测多个智能体的未来轨迹。智能体的数量 N(t)随时间 t 变化,且每个智能体有其语义类别(如“行人”、“车辆”)。智能体的历史状态定义为 x = s_{1, \ldots, N(t)}^{(t-H:t)},包括过去 H 个时间步的物理状态。每个智能体的附加信息定义为I_{1, \ldots, N(t)}^{(t)},如语义地图或其他环境数据。智能体的未来状态定义为 y = s_{1, \ldots, N(t)}^{(t+1:t+T)},即未来 T 个时间步内的轨迹分布。输出轨迹以概率分布的形式给出p(y \mid x, I),反映未来运动的不确定性。

        语义地图用来描述智能体位置附近的环境信息,定义为M_{i}^{(t)}

        模型支持基于自我智能体(ego-agent)未来运动计划的条件预测,定义为\mathbf{y}_R = \mathbf{s}_R^{(t+1:t+T)}。自我智能体的未来路径可以作为输入条件,预测其他智能体对其的响应,例如应用于自动驾驶场景时可以预测行人如何反应于车辆的加速或转弯。

2.2 Trajectron++

2.2.1 场景表示

        场景被表示为一个时空图 G = (V,E)。节点 V 表示智能体;边 E 表示智能体之间的交互影响。边是有向的,用于表示不对称的影响,如车辆对行人的影响比反向更大。如果两个智能体之间的欧几里得距离小于感知范围,则建立边。

2.2.2 历史编码

        使用 LSTM 对智能体的历史轨迹进行编码。而且根据智能体的语义类别选择适当的动力学模型:行人使用简单的单积分器模型;车辆使用扩展单轮车模型。这些动力学模型帮助模型考虑非全向约束。

2.2.3 交互编码

        首先聚合每个智能体的邻居节点信息,该操作采用逐元素加法,既支持节点数量动态变化,也能保留邻居数量信息。然后使用 LSTM 对每条边进行编码,权重在同一类别的边之间共享。最后使用了一个附加注意力模块将所有边的编码聚合为一个“影响表示向量",代表邻居对当前节点的影响。

2.2.4 异构数据整合

        对于每个建模的智能体,trajectory ++用CNN编码一个局部地图,旋转以匹配智能体的航向。CNN的输出与智能体的历史状态和边影响表示向量相连接,生成一个完整的节点表示向量。

2.2.5 自我智能体的未来运动计划编码

        使用双向 LSTM对运动计划进行编码,输入为自我智能体未来的 T 个时间步的运动计划,编码结果与其他表示向量拼接到一起,形成一个综合的智能体表示向量。

2.2.6 多模态建模

        使用 CVAE 的潜在变量 z 表示智能体的高层次行为模式,如“转弯”或“直行”。输出的轨迹分布通过整合不同的 z 实现多模态建模。

2.2.7 动态约束整合

      将潜在变量 z 和骨干表示向量e_{x}被送入解码器。每个GRU单元在控制动作u^{(t)}上输出二元高斯分布的参数(如,加速度和转向速率),然后通过动力学模型积分生成轨迹,这种方式确保轨迹符合智能体的动态约束。

2.2.8 输出配置

        模型可以生成以下四种预测输出:

  • Most Likely (ML):单一最可能的轨迹。

  • z-mode:基于模型最可能的高级潜在行为模式的轨迹预测。

  • Full:采样多个 z 和对应轨迹,得到完整分布。

  • Distribution:计算轨迹的解析概率分布。

 

最终模型的训练目标就是InfoVAE目标函数:

三、实验

训练设备

          一个 AMD Ryzen 1800X CPU 和两个 NVIDIA GTX 1080 Ti GPU。

数据集

        ETH、UCY、nuScenes 。

评价指标

        ADE、FDE、KDE NLL(基于核密度估计的负对数似然)、BoN(N个随机采样轨迹的最小ADE和FDE)。

实验结果

(1)确定性输出结果

(2)生成式输出结果

(3)消融实验

四、总结

        Trajectron++ 提供了一种高效且灵活的轨迹预测框架,结合了动态约束、异构环境数据和多模态建模,显著提升了预测精度和轨迹的物理合理性。未来可以进一步扩展到更多智能体类型、更复杂的场景和更精细的动力学建模。

标签:异构,轨迹,预测,智能,Trajectron,模型,++,2.2
From: https://blog.csdn.net/xyy_zlh/article/details/144424072

相关文章

  • 12C++循环结构-for循环(2)——教学
    一、循环变量为字符型试编一程序,按字典顺序输出26个字母。流程图:思考:先顺序输出26个小写英文字母,再逆序输出26个大写英文字母。循环可以是递增型循环,也可以是递减型循环。二、打擂台-for语句的另一种形式问题:试编一程序,输入10个数,输出其中最大的数。以前学过,输入三个数求......
  • C++ debug
    C++debug在C++中,查看程序的调用栈(CallStack)通常用于调试崩溃、性能问题或逻辑错误等场景。以下是几种常用的方法来查看调用栈:1.使用GDB调试器查看调用栈GDB(GNUDebugger)是Linux上非常流行的调试工具,可以用来查看C++程序的调用栈。示例:假设有以下C++程序:#includ......
  • 转载:【AI系统】昇腾异构计算架构 CANN
    本文将介绍昇腾AI异构计算架构CANN(ComputeArchitectureforNeuralNetworks),这是一套为高性能神经网络计算需求专门设计和优化的架构。CANN包括硬件层面的达·芬奇架构和软件层面的全栈支持,旨在提供强大的硬件基础和管理网络模型、计算流及数据流的软件栈,以支撑神经网络在异......
  • [C++] 继承详解
    目录前言演示用编译器及其标准DevC++6.7.5Redpanda C++14                           先 赞 后 看  养  成 习 惯  正文1、继承的概念与意义2、继承的使用 2.1继承的定义及语法2......
  • C++_运算符重载
    filesystemc++11在CMakeList.txtfind_package(BoostCOMPONENTSsystemfilesystemregexREQUIRED)include_directories(${Boost_INCLUDE_DIRS})target_link_libraries(projectname${Boost_LIBRARIES})程序#include<boost/filesystem.hpp>......
  • C++ Boost库 tuple元组
    元组boost::tuple是Boost库中提供的允许程序员创建固定大小的元组,这些元组可以包含不同类型的元素。元组是一个数据结构,它可以存储多个值,这些值可以是不同类型的。boost::tuple是C++标准库中std::tuple的前身,后者在C++11标准中被引入。特点固定大小:一旦创建,boost::tuple的大小......
  • C++11 lock_guard和unique_lock
    一、RAII技术1、ResourceAcquisitionIsInitialization,资源获取即初始化,由C++之父提出。2、使用局部对象来管理资源的技术,称为资源获取即初始化。3、资源主要指操作系统中有限的东西,如内存、套接字等;局部对象指存储在栈里的对象,生命周期由操作系统来管理。4、资源......
  • C++学习笔记 数组
    1.一维数组1.1数组的定义数组的定义方式和变量类似。#include<iostream>#include<algorithm>usingnamespacestd;intmain(){inta[10],b[10];floatf[33];doubled[123];charc[21];return0;}1.2数组的初始化在main函数内部,未初......
  • C++ 的发展
    目录​编辑C++的发展总结:​编辑1. C++的早期发展(1979-1985)2. C++标准化过程(1985-1998)3. C++标准演化(2003-2011)4. C++11(2011年)5. C++14(2014年)6. C++17(2017年)7. C++20(2020年)8. C++23(2023年)1. C++1985:C++1.0主要特性:示例代码:代码讲解:C++1.0的局......
  • 在CodeBolcks+wxWidgets+wxSmith下的C++编程教程——用向导创建一个wxWidgets项目(sTet
    0.前言我想通过编写一个完整的游戏程序方式引导读者体验程序设计的全过程。我将采用多种方式编写具有相同效果的应用程序,并通过不同方式形成的代码和实现方法的对比来理解程序开发更深层的知识。了解我编写教程的思路,请参阅体现我最初想法的那篇文章中的“1.编程计划”:学习编程......