【论文复现】StreamPETR

发布于:2024-12-07 ⋅ 阅读:(31) ⋅ 点赞:(0)

在这里插入图片描述

📝个人主页🌹:Eternity._
🌹🌹期待您的关注 🌹🌹

在这里插入图片描述
在这里插入图片描述

论文内容详读


该论文提出了一种名为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虚拟环境并激活。

conda create -n streampetr python=3.8 -y
conda activate streampetr

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

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(可选)

pip install flash-attn==0.2.2

d 克隆流PETR

git clone https://github.com/exiawsh/StreamPETR

e 安装mmdet3d

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数据集

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.

预训练权重


cd /path/to/StreamPETR
mkdir ckpts

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

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

文件夹结构

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

在这里插入图片描述

训练& 推理


训练


你训练以下模型:

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/

评估


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

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文件

./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

可视化检测效果:

python3 tools/visualize.py
# please change the results_nusc.json path in the python file

在这里插入图片描述

复现过程出现的问题


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

参考材料


@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.


编程未来,从这里启航!解锁无限创意,让每一行代码都成为你通往成功的阶梯,帮助更多人欣赏与学习!

更多内容详见:这里


网站公告

今日签到

点亮在社区的每一天
去签到