前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >StreamPETR复现详解

StreamPETR复现详解

作者头像
Srlua
发布2024-11-28 08:59:52
发布2024-11-28 08:59:52
34100
代码可运行
举报
文章被收录于专栏:CSDN社区搬运CSDN社区搬运
运行总次数:0
代码可运行

论文内容详读

该论文提出了一种名为StreamPETR的长序列建模框架,用于多视角三维物体检测。该模型基于PETR系列中的稀疏查询设计,并系统地开发了一个对象中心的时序机制。该模型在线执行,并通过对象查询帧传递长期历史信息。此外,引入了运动感知层归一化以建模物体的移动。StreamPETR仅需微小的计算成本即可实现显著的性能提升,与单帧基线相比,取得了更好的效果。在标准nuScenes基准上,它是第一个在线多视角方法,实现了与激光雷达方法相当的表现(67.6%NDS和65.3%AMOTA)。轻量级版本实现了45.0%mAP和31.7FPS,优于最先进的方法(SOLOFusion)2.3%mAP和1.8倍更快的FPS。代码已在https://github.com/exiawsh/StreamPETR.git中提供。

论文方法

方法描述

该论文提出了一种基于对象查询的时空交互网络(StreamPETR),用于多视图三维目标检测任务。该方法利用存储在内存队列中的历史信息来预测当前帧的目标状态,并通过全局注意力机制将这些信息传播到后续帧中。具体来说,该方法使用了图像编码器、记忆队列和传播变换器三个组件,其中记忆队列用于存储历史信息,传播变换器则负责处理空间和时间上的交互。

方法改进

相比于传统的时空交互网络,StreamPETR引入了对象查询的概念,使得运动补偿更加方便。同时,该方法还采用了混合注意力层,以实现更高效的重复预测去除和特征聚合。此外,该方法还设计了一个灵活的记忆队列,可以根据需要自由控制最大内存大小和保存间隔。

解决的问题

该方法解决了传统时空交互网络存在的计算复杂度高、难以处理动态场景等问题,能够在实时性和准确性之间取得平衡。实验结果表明,StreamPETR相对于其他方法具有更好的性能表现。

论文实验

本文主要介绍了作者在大规模数据集上对StreamPETR方法的实验结果和分析。该方法是一种基于稀疏物体查询的时空交互模型,旨在提高3D目标检测的精度和效率。

在实验中,作者使用了两个大规模数据集:nuScenes和Waymo Open。他们比较了StreamPETR与之前的一些最先进的视觉3D检测器在这些数据集上的表现,并提供了详细的实验结果和分析。

具体来说,在nuScenes数据集上,作者将StreamPETR与其他一些方法进行了比较,包括单帧基线Focal-PETR以及密集BEV方法SOLOFusion等。他们在不同的网络架构和预训练策略下进行了实验,并给出了不同指标下的性能分数。例如,在mAP和NDS指标下,StreamPETR相对于单帧基线Focal-PETR有显著的提升,同时速度也更快。此外,当使用更小的V2-99骨干时,StreamPETR也可以超越其他方法的表现。

在3D多目标跟踪任务方面,作者将CenterPoint的多目标跟踪方法扩展到多视图设置,并通过与ByteTrackv2和其他方法的比较来证明StreamPETR的优势。

在Waymo Open数据集上,作者同样将StreamPETR与其他密集BEV方法进行了比较,如BEVFormer和MV-FCOS3D等。结果显示,StreamPETR在官方指标下具有明显优势,并且相对于其他方法具有更好的定位能力和纵向预测能力。

总的来说,作者通过对多个实验的比较和分析,证明了StreamPETR在大规模数据集上的优异表现,并提出了一些有益的结论和建议。

论文总结

文章优点
  • 提出了一种有效的长序列3D物体检测方法StreamPETR,该方法采用了对象查询传播的方式,引入了运动信息,并且在计算存储方面具有较低的成本。
  • 在多个数据集上进行了实验验证,包括Waymo Open Dataset、Objects365等,结果表明StreamPETR相比于其他方法有更高的精度和效率。
  • 该研究为多视角3D物体检测领域提供了一个新的思路和解决方案,具有一定的理论意义和实际应用价值。
方法创新点
  • 利用了对象查询传播的思想,将时间信息通过对象查询传播到每一帧中,从而实现了长序列的3D物体检测。
  • 引入了运动信息,利用时空注意力机制来学习不同位置之间的相关性,提高了检测精度。
  • 在计算存储方面采用了低开销的方法,减少了模型复杂度和计算量。

代码复现

环境设置

基础环境

Python >= 3.8 CUDA == 11.1 PyTorch == 1.9.0 mmdet3d == 1.0.0rc6 flash-attn == 0.2.2

分步安装说明

A 创建conda虚拟环境并激活。

代码语言:javascript
代码运行次数:0
运行
复制
conda create -n streampetr python=3.8 -y
conda activate streampetr

b 按照官方说明安装 PyTorch 和 torchvision

代码语言:javascript
代码运行次数:0
运行
复制
pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html
# Recommended torch>=1.9

C 安装 flash-attn(可选)

代码语言:javascript
代码运行次数:0
运行
复制
pip install flash-attn==0.2.2

d 克隆流PETR

代码语言:javascript
代码运行次数:0
运行
复制
git clone https://github.com/exiawsh/StreamPETR

e 安装mmdet3d

代码语言:javascript
代码运行次数:0
运行
复制
pip install mmcv-full==1.6.0 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html
pip install mmdet==2.28.2
pip install mmsegmentation==0.30.0
cd ./StreamPETR
git clone https://github.com/open-mmlab/mmdetection3d.git
cd mmdetection3d
git checkout v1.0.0rc6 
pip install -e .

数据准备

数据集

1. 下载 nuScenes

Download the nuScenes dataset to ./data/nuscenes.

2. 创建 infos file

基于mmdetection3d中的数据准备修改,另外还创建了用于训练和评估的2D注释和时间信息。这里使用的nuscenes-mini数据集

代码语言:javascript
代码运行次数:0
运行
复制
python tools/create_data_nusc.py --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes2d --version v1.0-mini

使用上面的代码将生成nuscenes2d_temporal_infos_{train,val}.pkl. 官方也提供了处理后的 train, val and test pkl.

预训练权重

代码语言:javascript
代码运行次数:0
运行
复制
cd /path/to/StreamPETR
mkdir ckpts

将预训练权重下载到./ckpts. 官方提供了 预训练的V2-99 weights. 和DDAD15M (weights)

  • 准备好后,将看到以下目录结构:

文件夹结构

代码语言:javascript
代码运行次数:0
运行
复制
StreamPETR
├── projects/
├── mmdetection3d/
├── tools/
├── configs/
├── ckpts/
├── data/
│   ├── nuscenes/
│   │   ├── maps/
│   │   ├── samples/
│   │   ├── sweeps/
│   │   ├── v1.0-test/
|   |   ├── v1.0-trainval/
|   |   ├── nuscenes2d_temporal_infos_train.pkl
|   |   ├── nuscenes2d_temporal_infos_val.pkl

训练& 推理

训练

你训练以下模型:

代码语言:javascript
代码运行次数:0
运行
复制
tools/dist_train.sh projects/configs/StreamPETR/stream_petr_r50_flash_704_bs2_seq_24e.py 8 --work-dir work_dirs/stream_petr_r50_flash_704_bs2_seq_24e/

评估

你可以评估以下检测模型:

代码语言:javascript
代码运行次数:0
运行
复制
tools/dist_test.sh projects/configs/StreamPETR/stream_petr_vov_flash_800_bs2_seq_24e.py work_dirs/stream_petr_vov_flash_800_bs2_seq_24e/latest.pth 8 --eval bbox

Visualize

生成结果的json文件

代码语言:javascript
代码运行次数:0
运行
复制
./tools/dist_test.sh projects/configs/StreamPETR/stream_petr_vov_flash_800_bs2_seq_24e.py work_dirs/stream_petr_vov_flash_800_bs2_seq_24e/latest.pth 8 --format-only

可视化检测效果:

代码语言:javascript
代码运行次数:0
运行
复制
python3 tools/visualize.py
# please change the results_nusc.json path in the python file

复现过程出现的问题

复现过程见演示视频,一般遵循说明安装没有问题,训练和可视化过程中遇到的问题视频中有解决。

参考材料

代码语言:javascript
代码运行次数:0
运行
复制
@article{wang2023exploring,
  title={Exploring Object-Centric Temporal Modeling for Efficient Multi-View 3D Object Detection},
  author={Wang, Shihao and Liu, Yingfei and Wang, Tiancai and Li, Ying and Zhang, Xiangyu},
  journal={arXiv preprint arXiv:2303.11926},
  year={2023}
}

[1] Wang S, Liu Y, Wang T, et al. Exploring object-centric temporal modeling for efficient multi-view 3d object detection[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2023: 3621-3631.

​​

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 论文内容详读
    • 论文方法
      • 方法描述
      • 方法改进
      • 解决的问题
    • 论文实验
    • 论文总结
      • 文章优点
      • 方法创新点
  • 代码复现
    • 环境设置
      • 基础环境
      • 分步安装说明
  • 数据准备
    • 数据集
    • 2. 创建 infos file
    • 预训练权重
  • 训练& 推理
    • 训练
    • 评估
    • Visualize
  • 复现过程出现的问题
    • 参考材料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档