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

StreamPETR复现详解

作者头像
Srlua
发布于 2024-11-28 00:59:52
发布于 2024-11-28 00:59:52
28800
代码可运行
举报
文章被收录于专栏: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
运行
AI代码解释
复制
conda create -n streampetr python=3.8 -y
conda activate streampetr

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
运行
AI代码解释
复制
pip install flash-attn==0.2.2

d 克隆流PETR

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

e 安装mmdet3d

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
运行
AI代码解释
复制
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
运行
AI代码解释
复制
cd /path/to/StreamPETR
mkdir ckpts

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

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

文件夹结构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
运行
AI代码解释
复制
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
运行
AI代码解释
复制
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
运行
AI代码解释
复制
./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
运行
AI代码解释
复制
python3 tools/visualize.py
# please change the results_nusc.json path in the python file

复现过程出现的问题

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

参考材料

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
BEVFormer详细复现方案
本文介绍了一种新的框架——BEVFormer,用于学习具有时空Transformer的统一BEV表征,以支持多个自动驾驶感知任务。BEVFormer利用空间和时间信息,通过预定的网格状BEV查询向量与空间和时间域交互。为了聚合空间信息,作者设计了一个空间交叉注意力,每个BEV查询向量从跨相机视图的感兴趣区域提取空间特征。对于时间信息,作者提出了一种时间自注意力来递归融合历史BEV信息。实验结果表明,在nuScenes测试集上,BEVFormer的NDS指标达到了最新的56.9%,比之前的最佳技术高出9.0分,与基于lidar的基线性能相当。此外,BEVFormer还显著提高了低能见度条件下目标速度估计和召回率的准确性。
Srlua
2024/12/08
7740
BEVFormer详细复现方案
全面支持激光雷达语义分割!MMDetection3D 新特性抢先看
上周 MMDetection3D v1.1.1 正式发布!在新版本 1.1 中我们相继支持了 3 个 LiDAR Segmentation 方法与 2 个最新的数据增强方法。本次更新,基于上一版本支持的方法,我们在 SemanticKITTI 数据集上构建了一个全面的 LiDAR Semantic Segmentation Benchmark,为社区提供强力的 Baseline 并分享相关经验供大家进一步深入研究!
OpenMMLab 官方账号
2023/08/21
1.2K0
全面支持激光雷达语义分割!MMDetection3D 新特性抢先看
带你玩转 3D 检测和分割 (三):有趣的可视化
小伙伴们好呀,3D 检测和分割系列文章继续更新啦~在第一篇文章中,我们带领大家了解了整个框架的大致流程。第二篇文章我们给大家解析了 MMDetection3D 中的坐标系和核心组件 Box,今天我们将带大家看看 3D 场景中的可视化组件 Visualizer,如何在多个模态数据上轻松可视化并且自由切换?为什么在可视化的时候经常出现一些莫名其妙的问题?
OpenMMLab 官方账号
2022/05/25
3.7K0
带你玩转 3D 检测和分割 (三):有趣的可视化
带你玩转 3D 检测和分割(二):核心组件分析之坐标系和 Box
我们在前文玩转 MMDetection3D (一)中介绍了整个框架的大致流程,从这篇文章开始我们将会带来 MMDetection3D 中各种核心组件的解析,而在 3D 检测中最重要的核心组件之一就是坐标系和 Box 。
OpenMMLab 官方账号
2022/04/08
2.5K0
带你玩转 3D 检测和分割(二):核心组件分析之坐标系和 Box
MMDet3D 1.1:统一易用的 3D 感知平台
自从两年前 MMDetection3D 发布以来,我们收到了很多用户的反馈,其中有不少有价值的建议,同时也有很多吐槽(当然我们非常欢迎大家来吐槽),也有很多社区用户参与到我们代码库的完善中来。
OpenMMLab 官方账号
2022/12/30
1K0
MMDet3D 1.1:统一易用的 3D 感知平台
带你玩转 3D 检测和分割(一):MMDetection3D 整体框架介绍
由于 3D 本身数据的复杂性和 MMDetection3D 支持任务(点云 3D 检测、单目 3D 检测、多模态 3D 检测和点云 3D 语义分割等)和场景(室内和室外)的多样性,整个框架结构相对复杂,新人用户的上手门槛相对较高。所以我们推出新的系列文章,让各个细分方向的用户都能轻松上手 MMDetection3D,基于框架进行自己的研究和开发。在系列文章的初期,我们会先带大家了解整个框架的设计流程,分析框架中的各种核心组件,介绍数据集的处理方法,然后再对各个细分任务及经典模型进行具体细节的代码层级介绍。同时也欢迎大家在评论区提出自己的需求,我们会收集各位的反馈补充更多的文章教程 ~
OpenMMLab 官方账号
2022/04/08
4.4K0
带你玩转 3D 检测和分割(一):MMDetection3D 整体框架介绍
具身智能中的多模态三维感知思考
从驾驶场景到室内场景,具身三维感知系统面对的是更复杂的室内语义,更多样的物体类别和朝向,以及大不相同的感知空间和需求。重新思考其中差异和数据基础,EmbodiedScan 团队构造了一套基于第一视角的多模态全场景三维感知系统/工具包,从数据标注到模型训练,从基准构建到任务评测,以大规模真实场景扫描和面向下游的全面标注为基础,训练出一套可直接部署、且在开放场景表现优异的基础模型,旨在构建一套可量化的、面向通用具身场景的感知系统基准,并希望通过开源推动领域发展。
OpenMMLab 官方账号
2024/03/07
8980
具身智能中的多模态三维感知思考
无监督目标检测最新CVPR解读
今天我们介绍一篇CVPR2024的最新无监督三维目标检测的SOTA工作,这篇论文介绍了一种名为Commonsense Prototype-based Detector(CPD)的方法,用于解决无监督三维目标检测中的挑战。在当前的无监督三维目标检测方法中,通常采用基于聚类的伪标签生成和迭代式自训练过程。然而,由于激光雷达扫描的稀疏性,导致生成的伪标签存在尺寸和位置上的错误,从而影响了检测性能。为了应对这一问题,该论文提出了一种基于常识原型的检测器(CPD),以提高无监督三维目标检测的性能。
Srlua
2024/12/10
2910
无监督目标检测最新CVPR解读
计算机视觉与OpenMMLab开源算法体系
OpenMMLab 2.0 统一20 多个算法任务的训练流程,支持自监督、半监督、少样本学习。
timerring
2023/02/23
4350
计算机视觉与OpenMMLab开源算法体系
MMDetection3D | "3Dfy" A General 2D Detector :纯视觉3D检测再思考
这篇文章将沿着近年来 3D 检测的发展脉络,通过和 2D 检测对比,分析 3D 检测中的核心问题,并着重探讨对于纯视觉 3D 检测的再思考。
OpenMMLab 官方账号
2022/01/18
8360
MMDetection3D | "3Dfy" A General 2D Detector :纯视觉3D检测再思考
【星光04】Mmdetection3dlab 使用指南
✨本文结合官方文档,梳理了基于 mmdet3d 开发人工智能模型的基本流程,整理相关的代码和小工具。如遇任何问题,可以查阅官方文档,MMDetection3D 的官方文档还是写得很好的(就是有一些多模态的代码跑不通,本文会注释部分问题命令)
杨丝儿
2022/04/11
8350
妙啊!MMDetection 训练自定义数据集
上一篇讲到如何安装MMDetection,今天要分享如何使用 MMDetection 训练自定义数据集,其实非常简单!
AI算法与图像处理
2021/03/14
2.3K0
FastBEV论文解读复现
本文介绍了一种名为Fast-BEV的快速且强大的鸟瞰视图感知基线框架,旨在解决现有BEV解决方案在执行车辆内推理时需要大量资源或性能不佳的问题。该框架包括五个部分:一种轻量级部署友好的视角转换方法、一个多尺度图像编码器、一个专门设计用于加速车辆内推断的高效BEV编码器、一种强数据增强策略以及一种多帧特征融合机制。实验结果表明,该框架能够在当前流行的车辆芯片上实现高精度和高速度的鸟瞰视图感知任务,并取得了与先前工作相比更好的性能。
Srlua
2024/11/28
1770
FastBEV论文解读复现
解析激光雷达中时序融合的研究现状和发展方向
在自动驾驶领域,基于激光雷达 (LiDAR) 的3D物体检测和运动行为预测是一种普遍的方案。目前绝大部分关于激光雷达的物体检测算法都是基于单帧的。激光雷达的多帧时序数据,提供了对于检测物体的多视角观测 (multiple views),历史记忆 (history memory),安全冗余 (redundant safty),以及运动特征 (motion kinematics) 等丰富的信息;可用来帮助提高检测速度和精度,并且增加检测结果的可靠性。对于感知的下游模块,例如追踪和预测,时序信息则更为重要。
小白学视觉
2020/06/19
9430
解析激光雷达中时序融合的研究现状和发展方向
重磅!OpenMMLab 更新啦!分类/检测/分割/3D等项目全面升级
历时不知道多久,OpenMMLab又迎来了一次全面的更新。为了方便社区的研究者和开发者能够及时获悉 OpenMMLab 各个项目的进展,我们对近期的更新做一个整体的介绍。本次发布赶在 CVPR 之前,希望 OpenMMLab 的各个项目能够帮助到大家的研究和开发。
深度学习技术前沿公众号博主
2020/11/03
1.6K0
重磅!OpenMMLab 更新啦!分类/检测/分割/3D等项目全面升级
叮咚~欢迎订阅 OpenMMLab 开源社区8月刊
- 添加 gradient cumulative optimizer,可以使用更大的 batch size 训练模型
OpenMMLab 官方账号
2022/01/18
5260
mmdetection使用目标检测工具箱训练,测试
https://github.com/open-mmlab/mmdetection
机器学习AI算法工程
2021/01/12
1.9K0
【开发框架】Mmdetection3dlab Docker 环境改良和制作
✨本文提供了一套完整的基于Docker的目标检测研究环境搭建思路,对官方教程进行了一定的修改和补充。同时随文提供SSH和Jupyter server实践,均为可用状态,提供了可靠资料给小伙伴们探索。
杨丝儿
2022/04/11
1.3K0
【开发框架】Mmdetection3dlab Docker 环境改良和制作
商汤科技提出 SparseLIF | 高性能全稀疏3D目标检测器,性能 & 鲁棒性 达到 SOTA 水平!
在提交之时(2024/03/08),SparseLIF在nuScenes数据集上取得了最先进的性能,在验证集和测试基准上都排名第一,明显优于所有最先进的3D目标检测器。
AIGC 先锋科技
2024/07/08
5890
商汤科技提出 SparseLIF | 高性能全稀疏3D目标检测器,性能 & 鲁棒性 达到 SOTA 水平!
一步一步教你在 docker 容器下使用 mmdetection 训练自己的数据集
这里不再介绍 mmdetection 的安装和配置,使用 mmdetection 较简单的方法是使用已安装 mmdetection 的 docker 容器。这样直接省去了安装 mmdetection 的过程,让重心放在模型训练上!
红色石头
2022/01/12
1.7K0
一步一步教你在 docker 容器下使用 mmdetection 训练自己的数据集
推荐阅读
相关推荐
BEVFormer详细复现方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验