【论文复现】StreamPETR
📝个人主页🌹:Eternity._
🌹🌹期待您的关注 🌹🌹
❀ StreamPETR
- 论文内容详读
- 论文方法
- 方法描述
- 方法改进
- 解决的问题
- 论文实验
- 论文总结
- 文章优点
- 方法创新点
- 代码复现
- 环境设置
- 基础环境
- 分步安装说明
- 数据准备
- 数据集
- 预训练权重
- 在这里插入图片描述
- 训练& 推理
- 训练
- 评估
- Visualize
- 复现过程出现的问题
- 参考材料
论文内容详读
该论文提出了一种名为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.
编程未来,从这里启航!解锁无限创意,让每一行代码都成为你通往成功的阶梯,帮助更多人欣赏与学习!
更多内容详见:这里