UniFormer:用统一多视角融合Transformer构建时空BEV表征

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

arXiv论文“UniFormer: Unified Multi-view Fusion Transformer for Spatial-Temporal Representation in Bird’s-Eye-View“,2022年7月上传,浙江大学、大疆公司和上海AI实验室的工作。

71aaeb60a76ddfa821b0eb2ca7f46437.png

BEV表示是一种基于空域融合的自主驾驶感知形式。此外,时域融合也被引入到BEV表示中,并取得了巨大的成功。这项工作提出一种方法,将空间和时间融合统一起来,并将它们合并到一个统一的数学形式中。统一融合不仅为BEV融合提供了新的视角,而且带来了新的能力。通过提出的统一时空融合,可以支持传统BEV方法难以实现的远距离融合。

此外,BEV融合是时间自适应的,时域融合的权重是可学习的。相比之下,传统方法主要使用固定权重和等权重进行时域融合。并且,所提出的统一融合可以避免传统BEV融合方法中的信息丢失,并充分利用特征。


如图介绍BEV时域融合的方法:从左到右,无时域融合、基于warp的时域融合和提出的统一多视图融合。对于无时域融合的方法,仅在当前时间步长用周围图像预测BEV空间;基于warp的时域融合将上一时间步的BEV空间warp,是一种串行融合方法;统一的多视图融合,是一种并行方法,可以支持远距离融合。

f46fcb336a73a6bcc42f9807e964c975.png

传统的BEV时域融合是基于warp的融合,如图a所示:基于warp的融合基于不同时间步长的自运动来warp过去的BEV特征和信息;由于所有特征在warp之前已经组织在预定义的自车BEV空间中,因此该过程将丢失信息。

47c35b393738cfb4114964270456b78e.png

摄像机的实际可见范围远大于BEV空间的可见范围。例如,对于典型的摄像机来说,100m是一个非常小的可见范围,而大多数BEV范围被定义为不超过52m。通过这种方式,可以获得比简单warpBEV空间更好的BEV时间融合,如图b所示。

adf9e84b225359967b151c69e2a09479.png

为了实现更好的时域融合,提出了一个概念,虚拟视图(virtual view),如图c所示:虚拟视图定义为当前时间步不存在的传感器视图,这些过去的视图根据自车BEV空间旋转和转换,就像实际存在于当前时间步一样。

e58843d6ce226b12e45cbd31c85b5a18.png

如图是BEV融合的模型框架:该网络由主干网、统一多视图融合transformer和分割头三部分组成。

31730b6b22274587f9e085bcced22a19.png

最重要的模块是用于统一多视图时空融合的交叉注意。在统一多视图融合的帮助下,所有时空特征可以映射到同一个自车BEV空间。交叉注意模块的目标是融合和集成映射的时空BEV空间特征。

通过这种方式,用BEV query Q来迭代BEV空间不同位置的特征、时间步、多尺度级和采样高度。可以以统一的方式直接检索来自任何地点和时间的信息,而不会造成任何损失。这种设计还使得远距离融合成为可能,因为无论多久以前的特征,都可以被直接访问,也支持自适应时域融合。

最后一个主要部分是自回归机制。将Transformer的输出与BEV query连接起来作为新输入,并重新运行Transformer获得最终特征。BEVFormer将warp的先前BEV特征与自注意模块之前的BEV query连接起来,实现时域融合。对Transformer的第一次运行,只需将BEV query加倍并叠加做为输入。

在BEVFormer中,warp的BEV特征和BEV query的叠加带来了时域融合,这是性能提高的根本原因。这项工作中,BEV特征和query的连接隐含地加深和加倍了transformer的层数。由于warp的BEV特征已经在之前的时间步让transformer处理,因此叠加视为两个连续transformer的嫁接。这样,无warp的简单自回归可以获得与BEVFormer类似的性能增益。

分割头是ERFNet。


ResNet50、Swin Tiny和VoVNet作为主干网。ResNet50和SWN主干从ImageNet预训练初始化,VoVNet主干从DD3D初始化。Transformer的默认层数设置为12。对于ResNet50和Swin,输入图像分辨率设置为1600×900。

对于VoVNet,用1408×512的图像大小。训练用AdamW优化器,学习速率为2e-4,权重衰减为1e-4。主干的学习速率降低了10倍。批量大小设置为每个GPU 1个,模型用8个GPU训练24个epoch。在第20个epoch,学习率降低了10倍。多尺度特征的数量设置为L=4,先前时间步长的默认数量设置为P=6,采样高度的数量设置为Z=4。高度范围为(−5米,3米],其中stride是2米。

对于100米×100米设置,用50×50 BEV query来表示整个BEV空间,然后将结果上采样4倍去匹配BEV分辨率。对于60米×30米设置,用100×50 BEV query,其上采样与100米×100米设置类似。对于160米×100米设置,用80×50 BEV query,然后向上采样8x去匹配分辨率。用交叉熵(CE)损失在两种设置下进行训练。

对于类不平衡问题,背景类的损失权重默认设置为0.4。由于100米×100米设置中的道路类别是多边形区域,没有类别不平衡问题,因此道路背景类别的损失权重设置为1.0。

实验结果如下:

183f0c428a1f82c17578bd0613355d39.png

c0c221403fae41db5b4b6129055c813e.png

dbd818e0b1f279bd98cebc166a6f8533.png

8ce3c3da9fa2c603787be0be3ae30611.png

8dc92f8a1f7ff1ea6dc8964420307dbb.png

c86503f3640d0b36322702dd7327ea27.png

27a48b3a15e21bbf6b591e97fe71bf79.png

自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D感知、多传感器融合、SLAM、高精地图、规划控制、AI模型部署落地等方向;

加入我们:自动驾驶之心技术交流群汇总!

自动驾驶之心【知识星球】

想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D感知、多传感器融合、目标跟踪)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球(三天内无条件退款),日常分享论文+代码,这里汇聚行业和学术界大佬,前沿技术方向尽在掌握中,期待交流!

8850e666984e639fb9d781763411d55b.jpeg

<think>好的,我现在需要帮助用户解决关于UniFormer模型在视频分类任务上的复现方法或教程的问题。首先,我应该先理解用户的具体需求。用户提到了UniFormer模型,这是一个结合了Transformer和卷积的模型,用于视频分类。用户可能已经有一定的深度学习基础,但需要具体的步骤和代码指导来复现模型。 接下来,我需要回顾一下已有的参考资料。根据提供的引用,特别是引用[4]和[5],UniFormer的官方代码库在GitHub上,项目地址是https://gitcode.com/gh_mirrors/un/UniFormer。此外,还有引用[3]提到转ONNX的代码是在CPU上执行的,这可能涉及到模型导出和部署的部分。用户需要的是复现方法,所以可能需要环境配置、数据准备、训练流程、测试和部署等方面的指导。 首先,我应该确定用户需要的是从零开始搭建环境,还是直接使用官方代码库。根据引用[4],官方代码库存在,所以建议用户克隆仓库并按照文档安装依赖。环境配置部分需要包括Python版本、PyTorch版本、CUDA版本等,这些通常在官方仓库的README或requirements.txt中有说明。 然后,数据准备是关键步骤。视频分类通常需要处理视频数据集,比如Kinetics-400。用户可能需要下载数据集,并按照指定的格式预处理,比如将视频转换为帧,或者调整分辨率和帧数。引用[2]提到UniFormer的动机是高效的时空表示学习,所以数据预处理可能涉及抽帧和存储为特定格式。 接下来是模型训练。用户需要了解如何配置训练参数,比如学习率、批次大小、使用的预训练模型等。可能需要参考官方的配置文件,如引用[3]中提到的test.yaml文件,调整参数以适应自己的硬件环境。同时,分布式训练可能会加速训练过程,特别是对于大规模视频数据。 模型测试和评估部分,用户需要知道如何加载训练好的模型权重,并在测试集上运行评估脚本,得到准确率等指标。这里可能需要使用官方提供的评估脚本,并确保数据路径正确。 此外,模型部署也是用户可能关心的部分,比如将模型转换为ONNX格式,以便在其他平台上运行。引用[3]提到了转ONNX的代码,用户可能需要根据提供的p2o.py脚本进行操作,但需要注意输入输出的张量形状是否符合要求。 在复现过程中,用户可能会遇到常见问题,比如环境依赖冲突、数据预处理错误、显存不足等。需要提前给出一些解决方案,比如使用Docker镜像、调整批次大小、检查数据路径等。 最后,用户可能需要进一步的应用示例或优化方法,比如如何在自定义数据集上微调模型,或者进行模型压缩。这些可以作为扩展内容提供给用户,但需要基于他们的实际需求。 总结一下,回答的结构应该包括环境配置、数据准备、模型训练、测试评估、部署应用以及常见问题解决。每个步骤需要具体说明,并引用官方文档和提供的参考资料,确保用户能够逐步操作。同时,生成的相关问题可以帮助用户深入理解UniFormer模型的其他方面,比如与CNN的对比、优化方法、适用场景等。</think>以下是关于UniFormer模型在视频分类任务上的复现方法及教程的详细说明: --- ### **1. 环境配置与代码获取** **步骤1:克隆官方代码库** UniFormer的官方实现位于GitHub仓库(引用[4]): ```bash git clone https://gitcode.com/gh_mirrors/un/UniFormer.git ``` **步骤2:安装依赖** 根据仓库中的`requirements.txt`安装Python依赖,需确保以下环境: - Python 3.6+ - PyTorch 1.8+ - CUDA 11.1+ - 支持时空Transformer的扩展库(如`timm`、`einops`) --- ### **2. 数据准备与预处理** **数据集要求** - 常用数据集:Kinetics-400(K400)、Something-Something V2(SSv2) - 数据格式:视频文件需转换为帧序列或直接使用抽帧后的图像存储。 **预处理脚本示例** ```python # 视频抽帧脚本(需FFmpeg支持) import subprocess subprocess.call(f"ffmpeg -i input_video.mp4 -vf fps=30 output_frames/%04d.jpg", shell=True) ``` 需按官方要求调整分辨率(如$224 \times 224$)和帧数(如$16 \times 4$)[^2]。 --- ### **3. 模型训练** **配置文件修改** 参考`exp/uniformer_b16x4_k400/test.yaml`(引用[3]),修改以下参数: ```yaml DATA: DATA_PATH: /path/to/dataset NUM_FRAMES: 16 # 输入帧数 MODEL: PRETRAINED: True # 使用预训练权重 TRAIN: BATCH_SIZE: 64 # 根据GPU显存调整 ``` **启动训练** ```bash python main.py --cfg path/to/config.yaml ``` 支持多卡分布式训练(添加`--multiprocessing-distributed`参数)。 --- ### **4. 模型测试与评估** **加载预训练模型** 官方提供预训练权重(Kinetics-400上准确率约80.6%[^5]),下载后通过以下代码加载: ```python from models.uniformer import uniformer_small model = uniformer_small(pretrained=True) ``` **评估脚本** ```bash python test.py --cfg path/to/test.yaml --resume path/to/checkpoint.pth ``` --- ### **5. 模型导出与应用** **转ONNX格式(引用[3])** 使用提供的`p2o.py`脚本: ```bash python p2o.py --cfg path/to/test.yaml --onnx_output uniformer.onnx ``` 需注意输入张量形状(如$batch \times 3 \times 16 \times 224 \times 224$)。 --- ### **6. 常见问题与解决** - **显存不足**:减小`BATCH_SIZE`或使用梯度累积。 - **数据集格式错误**:检查帧序列命名是否符合`%04d.jpg`格式。 - **依赖冲突**:建议使用Docker镜像隔离环境。 --- ### **
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值