HiVT、VectorNet运动预测方法分析

news2024/11/16 22:56:51

1. VectorNet原理
基于DL的运动预测方法有基于渲染的方法和基于坐标点编码的方法:基于渲染的方法通过将交通要素渲染成一张特征图,再基于CNN等网络对特征进行学习,实现目标对象未来轨迹预测。基于交通要素渲染成特征图方法存在CPU算力需求大,难以渲染目标场景所有特征的问题.并且,基于CNN方法进行特征抽提存在CNN不能学习大范围几何特征,没有时序特征,且计算、存储消耗过大的问题;基于坐标点编码的方法直接使用交通要素的坐标点构成输入向量,再经过图神经网络和RNN/MLP进行特征学习,方法缺点是不能表征交通要素间的作用关系。
VectorNet方法定义输入向量为:
V i = [ d i s , d i e , a i , j ] V_i = [d^s_i,d^e_i,a_i,j] Vi=[dis,die,ai,j]
其中前两项表示向量的起点和终点,第三项表示属性信息,如语义标签,第四项用一个整数表示不同折线的所属关系,相同j、相关语义标签的折线可以被连接(下图中相同颜色线段的j和语义标签相同,可被连接,即图中第2列)。
Vectornet交通要素向量化的策略为:

  • 轨迹转换为折线,再转换为向量。
  • 车道线转换为折线,再转换为向量。
  • 区域如人行道转换为多边形,再转换为向量。
  • 点集合转换为向量。

在这里插入图片描述

VectorNet的交通要素向量编码过程分为局部子图建模和全局连接图编码。局部编码即相同 j , a i j,a_i j,ai的向量连接成子图,全局连接图节点为局部子图输出的特征图,即: p = φ a g g ( v i ( L P ) ) p=\varphi_{agg} ({v^{(L_P)}_i}) p=φagg(vi(LP))为局部子图的输出。全局图的节点为 { p 1 , p 2 , . . . , p p } \{p_1,p_2,...,p_p\} {p1,p2,...,pp},全局图的边为基于自注意力机制计算的相似度。
VectorNet的解码器使用的MLP,输入的是局部特征图、全局特征图,输出为一个二维坐标向量,表示物体未来时刻位置,MLP是由多个全连接层和Relu激活函数组成的网络,用于从输入向量中提取非线性特征,并映射到输出向量。

2. VectorNet算法流程

VectorNet的处理流程主要包括以下几个步骤:

  • 读取轨迹和地图数据,将其转换为向量化表示。
  • 对每个向量化的实体,使用subgraph_net进行局部子图编码,并输出局部特征。
  • 以每个实体的局部子图输出特征作为节点,节点间基于自注意力机制的相似度作为边构建全局图编码。
  • 对所有向量化的实体,使用GNN进行全局交互建模,输出每个实体的隐状态。
  • 对每个目标智能体,使用一个解码器生成多个可能的未来轨迹,并评估他们的概率。
  • 计算损失函数,使用最小平均位移误差(minADE)和最终位移误差(minFDE)作为评价指标。

3. HiVT算法

HiVT算法是基于分层向量Transformer模型的多智能体运动预测算法,可以有效地捕捉场景中的局部和全局交互,并生成多模态的未来轨迹。

  • 首先算法将场景中的每个智能体的历史轨迹、类别等属性信息编码为一个向量表示。
    h i 0 = M L P ( [ x i T , c i ] ) h^0_i = MLP([x^T_i,c_i]) hi0=MLP([xiT,ci]),其中 x i T x^T_i xiT是智能体 i i i的历史轨迹, c i c_i ci是类别嵌入。
  • 使用一个局部编码器来对每个智能体的邻域内的其他智能体进行注意力聚合,从而得到一个局部上下文向量。
    h i l = LayerNorm ( h i l − 1 + MLP ( Attention ( Q = h i l − 1 , K = H N ( i ) l − 1 , V = H N ( i ) l − 1 ) ) ) \mathbf{h}_i^l = \text{LayerNorm}(\mathbf{h}_i^{l-1} + \text{MLP}(\text{Attention}(\mathbf{Q}=\mathbf{h}_i^{l-1}, \mathbf{K}=\mathbf{H}_{\mathcal{N}(i)}^{l-1}, \mathbf{V}=\mathbf{H}_{\mathcal{N}(i)}^{l-1}))) hil=LayerNorm(hil1+MLP(Attention(Q=hil1,K=HN(i)l1,V=HN(i)l1)))
    其中 N ( i ) N(i) N(i)是智能体的邻域集合, H N ( i ) l − 1 \mathbf{H}_{\mathcal{N}(i)}^{l-1} HN(i)l1是其邻域内所有智能体在第 l − 1 l-1 l1层的向量表示,Attention是多头自注意力机制。
  • 使用全局交互模块来对所有智能体进行自注意力操作,从而得到一个全局上下文向量。
    h ~ i L = LayerNorm ( h i L + MLP ( Attention ( Q = h i L , K = H L , V = H L ) ) ) \tilde{\mathbf{h}}_i^L = \text{LayerNorm}(\mathbf{h}_i^L + \text{MLP}(\text{Attention}(\mathbf{Q}=\mathbf{h}_i^L, \mathbf{K}=\mathbf{H}^L, \mathbf{V}=\mathbf{H}^L))) h~iL=LayerNorm(hiL+MLP(Attention(Q=hiL,K=HL,V=HL)))
    其中, h ~ i L \tilde{\mathbf{h}}_i^L h~iL是智能体 i i i在最后一层的全局上下文向量, H L \mathbf{H}^L HL是所有智能体在最后一层的向量表示。
  • 使用一个多模态未来轨迹解码器来根据局部和全局上下文向量生成多个可能的未来轨迹,并使用一个分类器来预测每条轨迹的概率。
    x ^ i , k , t + 1 = x ^ i , k , t + Tanh ( MLP d e c , k ( [ h ~ i L , x ^ i , k , t , δ ^ i , k , t ] ) ) , k = 1 , . . . , K \hat{\mathbf{x}}_{i,k,t+1} = \hat{\mathbf{x}}_{i,k,t} + \text{Tanh}(\text{MLP}_{dec,k}([\tilde{\mathbf{h}}_i^L, \hat{\mathbf{x}}_{i,k,t}, \hat{\delta}_{i,k,t}])), k=1,...,K x^i,k,t+1=x^i,k,t+Tanh(MLPdec,k([h~iL,x^i,k,t,δ^i,k,t])),k=1,...,K
    其中, δ ^ i , k , t \hat{\delta}_{i,k,t} δ^i,k,t是智能体在第K个模态下在时刻 t t t的速度估计, x ^ i , k , t \hat{\mathbf{x}}_{i,k,t} x^i,k,t是其在第 k k k个模态下在时刻 t t t的位置估计。
    p k = Softmax ( MLP c l s ( [ h ~ i L , x ^ i , k , T ] ) ) p_k = \text{Softmax}(\text{MLP}_{cls}([\tilde{\mathbf{h}}_i^L, \hat{\mathbf{x}}_{i,k,T}])) pk=Softmax(MLPcls([h~iL,x^i,k,T]))
    其中, p k p_k pk是第k个模态的概率。Softmax是归一化函数。

在这里插入图片描述

HiVT模型结构如图所示:Local Encoder(右下角)包含自身历史轨迹建模,Agent-Lane(map)交互建模,Agent-Agent间交互建模,由三个Transformer模型实现。之后与VectorNet类似,编码后的输出特征被用作节点,用于建模节点间的相互作用,在模型结构图右上角左侧。

4. HiVT、VectorNet算法分析

  • HiVT矢量化过程使用相对位置差,VectorNet使用绝对位置,需要对齐。
  • HiVT提出了一种平移不变的场景表示和旋转不变的空间学习模块,使得该模型能够对场景的几何变换具有鲁棒性,并能在单次前向传播中为多个智能体做出准确预测,而VectorNet需要对每个智能体进行单独的预测,且对场景旋转敏感。
  • HiVT在Argoverse运动预测基准上达到了最先进的性能,同时具有较小的模型大小和较快的预测速度,而VectorNet在性能大小和速度上都有所不足。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/789592.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL语句通过腾讯云数据库智能管家的性能与语法优化

最近公司项目迁移至腾讯云,用的腾讯云MySQL服务器,MySQL负载一直很高,借助云管家优化了一部分SQL语句,提升了部分性能和释放了部分,MySQL内存占用

redis(10):spring+redis+mysql缓存实现

1 新建spring项目 2 修改pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mav…

IOC学习笔记(上篇)

IOC学习笔记&#xff08;上篇&#xff09; 目录 IOC容器的职责Ioc容器的实现传统IoC容器的实现依赖查找VS依赖注入构造器注入VS Setter注入面试题 1. 什么是IOC&#xff1f;2. 依赖查找和依赖注入的区别3. Spring作为IOC容器有什么优势 学习视频地址&#xff1a;https://ti…

10分钟搭建链路追踪平台

随着项目越来越多&#xff0c;相互调用越来越复杂&#xff0c;搭建一个可视化的链路追踪平台显得尤为重要&#xff0c;今天给大家介绍的是zipkin&#xff0c;一个轻量级的零侵入的链路追踪平台&#xff0c;看我怎么10分钟给大家搭建出来。 1&#xff0c;介绍 zipkin官网&…

Spring6——入门

文章目录 入门环境要求构建模块程序开发引入依赖创建java类创建配置文件创建测试类运行测试程序 程序分析启用Log4j2日志框架Log4j2日志概述引入Log4j2依赖加入日志配置文件测试使用日志 入门 环境要求 JDK&#xff1a;Java17&#xff08;Spring6要求JDK最低版本是Java17&…

简述centos7如何安装和配置nginx

Nginx&#xff08;发音为"engine x"&#xff09;是一个开源的高性能的 Web 服务器和反向代理服务器。它具有以下特点&#xff1a; 高性能&#xff1a;Nginx 采用事件驱动的异步架构&#xff0c;能够处理大量并发连接而不会占用过多的系统资源。它能够轻松应对高并发访…

1156. 单字符重复子串的最大长度;1497. 检查数组对是否可以被 k 整除;1510. 石子游戏 IV

1156. 单字符重复子串的最大长度 核心思想&#xff1a;利用滑动窗口text[i:j)&#xff0c;不断滑动&#xff0c;滑动窗口中装的是重复的单字符。枚举好窗口&#xff0c;然后看窗口装的字符等于多少个&#xff0c;如果个数小于总个数&#xff0c;说明我们至少可以使它增加1&…

7.25 作业

1.做一个登录界面 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {this->setFixedSize(800,600);this->setWindowOpacity(0.9);this->setWindowTitle("登录");this->setWindowIcon(QIcon("E:\\hqyj\\Qt\\icon_h…

SystemVerilog 第2章:数据类型

在 Verilog中,初学者经常分不清reg和wire两者的区别。应该使用它们中哪一个来驱动端口?连接不同模块时又该如何做? Systemverilog对经典的reg数据类型进行了改进,使得它除了作为一个变量以外,还可以被连续赋值、门单元和模块所驱动。为了与寄存器类型相区别,这种改进的数据类…

Java连锁门诊医院HIS信息管理系统源码

Java连锁门诊医院HIS信息管理系统源码&#xff1a;SaaS运维平台多医院多机构多门诊入驻强大的电子病历完整开发文档 一、系统概述 ❉采用主流成熟技术&#xff0c;软件结构简洁、代码规范易阅读&#xff0c;SaaS应用&#xff0c;全浏览器访问前后端分离&#xff0c;多服务协同…

RocketMQ第一课-快速实战以及集群架构搭建

一、RocketMQ产品特点 1、RocketMQ介绍 ​ RocketMQ是阿里巴巴开源的一个消息中间件&#xff0c;在阿里内部历经了双十一等很多高并发场景的考验&#xff0c;能够处理亿万级别的消息。2016年开源后捐赠给Apache&#xff0c;现在是Apache的一个顶级项目。 ​ 早期阿里使用Act…

【如何训练一个中译英翻译器】LSTM机器翻译模型部署(三)

系列文章 【如何训练一个中译英翻译器】LSTM机器翻译seq2seq字符编码&#xff08;一&#xff09; 【如何训练一个中译英翻译器】LSTM机器翻译模型训练与保存&#xff08;二&#xff09; 【如何训练一个中译英翻译器】LSTM机器翻译模型部署&#xff08;三&#xff09; 目录 系列…

通过两种实现方式理解CANoe TC8 demo是如何判断接收的以太网报文里的字段的

假设有一个测试用例,需求是:编写一个测试用例,发送一条icmpv4 echo request报文给DUT,identifier字段设置为10。判断DUT能够回复icmpv4 echo reply报文,且identifier字段值为10。 实现:在canoe的simulation setup界面插入一个test节点,ip地址为:192.168.0.1,mac地址为…

Tensorflow学习

一、处理数据的结构 案例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior() import numpy as np# create data x_data np.random.rand(100).astype(np.float32) y_data x_data*0.1 0.3# 创建结构(一维结构) Weights tf.Variable(tf.random.uniform(…

数据结构-顺序表各项功能的实现

文章目录 前言一、"SeqList.h"部分二、"SeqList.c"部分1.初始化2.销毁3.扩容及打印4.尾插及尾删5.头插及头删6.顺序表查找7.顺序表在pos位插入x8.顺序表删除low位置的数 三、"text.c"部分结语 前言 线性表是n个具有相同属性的有限数列&#xff0…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)五:后台主页功能实现上

一、本章内容 本章实现后台主页框架实现、菜单的动态加载及生产、tab组件与菜单绑定、菜单与路由绑定等,工具栏按钮等界面及对应功能实现。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览

(六)springboot实战——springboot的启动流程分析

前言 本节内容我们主要介绍一下springboot的启动流程&#xff0c;它内部是如何实现启动加载的&#xff0c;启动过程中都做了哪些工作&#xff0c;这是我们比较关注的问题。 正文 SpringBootApplication启动类注解的解读 - SpringBootConfiguration&#xff1a;等同于Configu…

WPF实战学习笔记09-创建工作单元

创建工作单元 添加包 Microsoft.EntityFrameworkCore.AutoHistory A plugin for Microsoft.EntityFrameworkCore to support automatically recording data changes history. Microsoft.EntityFrameworkCore.UnitOfWork A plugin for Microsoft.EntityFrameworkCore to suppor…

【Docker 实用技巧】动态切换国内外源

目录 前言&#xff1a; 1、背景 2、ChatGPT 的方案 3、我的方案 3.1 本地构建 3.2 Github Action 构建 3.3 实际方案 前言&#xff1a; Docker 是一个非常流行的开发和部署平台&#xff0c;它可以帮助开发者快速构建、部署和管理应用程序。在使用 Docker 的过程中&…

聊聊STM32 ADC的话题

STM32 微控制器系列提供了多个模拟数字转换器&#xff08;ADC&#xff09;模块&#xff0c;用于实现模拟信号的采集和转换为数字信号。ADC 在很多应用中都是非常重要的&#xff0c;例如传感器数据采集、电压测量等。 在 STM32 中&#xff0c;ADC 可以通过 STM32HAL 库提供的函…