OpenPCDet:点云3D目标检测开源库
本文转载自知乎,已获作者授权转载。
链接:https://zhuanlan.zhihu.com/p/152120636
随着自动驾驶与机器人技术的不断发展,基于点云表征的3D目标检测领域在近年来取得了不断的发展。然而,层出不穷的点云数据集(KITTI、NuScene、Lyft、Waymo、PandaSet等)在数据格式与3D坐标系上往往定义各不相同,各式各样的点云感知算法(point-based、 voxel-based、one-stage/two-stage等)也形态各异,使得相关研究者难以在一个统一的框架内进行各种组合实验。
为此,我们开源了一套基于PyTorch实现的点云3D目标检测代码库 - OpenPCDet:https://github.com/open-mmlab/OpenPCDet
其主要包括了全新改版的 PCDet (v0.2) 点云3D目标检测框架 (包括我们首次开源的 PV-RCNN 3D目标检测算法)。
接下来,我们主要介绍 PCDet 3D目标检测框架的整体结构设计与优势,以及如何添加新的数据集、如何组合\研发新的model等简要使用说明。
01
PCDet 3D目标检测框架介绍
数据-模型分离的顶层代码框架设计思想
不同于图像处理,点云3D目标检测中不同数据集的繁多3D坐标定义与转换往往使研究者迷失其中。为此,PCDet定义了统一的规范化3D坐标表示贯穿整个数据处理与模型计算,从而将数据模块与模型处理模块完全分离,其优势体现在:
(1) 研究者在研发不同结构模型时,统一使用标准化的3D坐标系进行各种相关处理(比如计算loss、RoI Pooling和模型后处理等),而无需理会不同数据集的坐标表示差异性;
(2) 研究者在添加新数据集时,只需写少量代码将原始数据转化到标准化坐标定义下,PCDet将自动进行数据增强并适配到各种模型中。
PCDet 数据-模型分离的顶层设计,使得研究者可以轻松适配各种模型到不同的点云3D目标检测数据集上,免去研发模型时迷失在3D坐标转换中的顾虑。
统一的3D目标检测坐标定义
不同的点云数据集在坐标系以及3D框的定义上往往不一样(KITTI数据集中的camera和LiDAR两个坐标系的混用也常使新手迷茫),因此在 PCDet 中我们采用了固定的统一点云坐标系(如图1右下角所示),以及更规范的3D检测框定义,贯穿整个数据增强、处理、模型计算以及检测后处理过程。3D检测框的7维信息定义如下(如图2所示):
3D bounding box: (cx, cy, cz, dx, dy, dz, heading)
其中,(cx, cy, cz) 为物体3D框的几何中心位置,(dx, dy, dz)分别为物体3D框在heading角度为0时沿着x-y-z三个方向的长度,heading为物体在俯视图下的朝向角 (沿着x轴方向为0度角,逆时针x到y角度增加)。
图2: PCDet采用的标准化3D检测框示意图 (俯视)。
灵活全面的模块化模型拓扑设计
基于图3所示的灵活且全面的模块化设计,我们在PCDet中搭建3D目标检测框架只需要写config文件将所需模块定义清楚,然后PCDet将自动根据模块间的拓扑顺序组合为3D目标检测框架,来进行训练和测试。
基于图3所示框架,PCDet可以支持目前已有的绝大多数面向LiDAR点云的3D目标检测算法,包括voxel-based,point-based,point-voxel hybrid以及one-stage/two-stage等等3D目标检测算法(参见图4示例图)。
清晰的数据增强与预处理
PCDet全新重构了基于numpy+PyTorch的数据增强模块与数据预处理模块,依托data_augmentor与data_processor两个基类可灵活添加、删除各种数据增强与预处理操作。
更强的3D目标检测性能
作为最早开源二阶段3D点云目标检测代码的团队之一,我们不断提出了PointRCNN、PartA2-Net、PV-RCNN等高性能3D目标检测算法。在这次PCDet代码更新中,我们首次开源了PV-RCNN算法,其目前仍是在KITTI+Waymo榜上性能最强的纯点云3D目标检测算法。
希望我们在PCDet中开源的多个高性能3D目标检测算法可以为各位研究者提供更强的baseline算法,并成为大家的比赛刷榜利器。
02
疑问
如何支持新的数据集?
如之前所说,PCDet的数据-模型分离框架设计与规范化的坐标表示使得其很容易扩展到新的数据集上。具体来说,研究者只需要在自己的dataloader里面做以下两件事:
(1) 在 self._getitem_() 中加载自己的数据,并将点云与3D标注框均转至前述统一坐标定义下,送入数据基类提供的 self.prepare_data();
(2) 在 self.generate_prediction_dicts() 中接收模型预测的在统一坐标系下表示的3D检测框,并转回自己所需格式即可。
如何组合、改进旧模型+支持新的模型?
如图3所示,PCDet中实际上已经支持了绝大部分的模块。对于一个新的(组合的)3D检测模型来说,只要在PCDet框架中实现其所特有的模块(比如新的backbone或新的head)来替换掉原有模块,并修改响应模型配置文件,其他模块以及数据处理部分直接利用PCDet中已有部分即可。
03
总结
OpenPCDet开源项目旨在为学术界和工业界提供一个更灵活、全面、高效的点云3D目标检测代码框架,也希望吸引更多的研究者参与进来支持更多的算法与数据集,从而推动这个领域的不断发展。
END
备注:目标检测
目标检测交流群
2D、3D目标检测等最新资讯,若已为CV君其他账号好友请直接私信。
我爱计算机视觉
微信号:aicvml
QQ群:805388940
微博知乎:@我爱计算机视觉
投稿:amos@52cv.net
网站:www.52cv.net
在看,让更多人看到
OpenPCDet:点云3D目标检测开源库相关推荐
- 点云 3D 目标检测 - PointPillars(CVPR 2019)
点云 3D 目标检测 - PointPillars(CVPR 2019) 摘要 1. 导言 1.1 相关工作 1.1.1 使用CNNs进行目标检测 1.1.2 激光雷达点云中的目标检测 1.2 贡献 ...
- 点云 3D 目标检测 - CenterPoint:Center-based 3D Object Detection and Tracking(CVPR 2021)
点云 3D 目标检测 - CenterPoint: Center-based 3D Object Detection and Tracking - 基于中心的3D目标检测与跟踪(CVPR 2021) ...
- AAAI 2020 Oral论文--TANet:提升点云3D目标检测的稳健性
点击上方"深度学习技术前沿",选择"星标"公众号 资源干货,第一时间送达 来自华中科技大学白翔教授组的刘哲的 AAAI Oral 论文<TANet: Ro ...
- AAAI 2020 Oral | 华科提出TANet:提升点云3D目标检测的稳健性
点击我爱计算机视觉标星,更快获取CVML新技术 本文转自机器之心. 机器之心发布 机器之心编辑部 2020 年 2 月 7 日-2 月 12 日,AAAI 2020 将于美国纽约举办.不久之前,大会官 ...
- 【点云3D目标检测】跑通CIA-SSD过程中的一些报错集锦
前言 本文主要是介绍了在跑通CIA-SSD系列算法过程中遇到的一些bug,下面是对CIASSD算法的一个简单的介绍. CIA-SSD其基本思想是校准单步目标检测中分类和定位两个任务,提出Confide ...
- 点云 3D 目标检测 - VoxelNet(CVPR 2018)
点云 3D 目标检测 - VoxelNet(CVPR 2018) 摘要 1. 引言 1.1 相关工作 1.2 贡献 2. VoxelNet 2.1 VoxelNet架构 2.1.1 特征学习网络 2. ...
- 激光点云3D目标检测算法之PointPillars
前言 <PointPillars: Fast Encoders for Object Detection from Point Clouds>是一篇发表在CVPR 2019上关于激光点云3 ...
- 点云 3D 目标检测 - SECOND(Sensors 2018)
点云 3D 目标检测 - SECOND: Sparsely Embedded Convolutional Detection - 稀疏嵌入卷积检测(Sensors 2018) 摘要 1. 引言 2. ...
- 点云 3D 目标检测 - RangeDet(ICCV 2021)
点云 3D 目标检测 - RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection - 基于LiDAR的3D目标检测 ...
最新文章
- MySQL番外篇:INT、CHAR以及VARCHAR数据类型中M的含义
- R语言使用ggpubr包的ggline函数绘制各种漂亮形式的线图实战
- Hibernate 中Datetime类型属性数据库默认值
- 交换机定时自动备份配置文件的方法
- 用ASP.NET AJAX 开发Web程序 — UpdatePanel篇
- Leetcode 382. 链表随机节点 解题思路及C++实现
- [Reprint] 探寻C++最快的读取文件的方案
- SCCM 2012 SP1系列(九)配置补丁更新-2
- 【完美解决】Could not process result for mapping: ResultMapping{property=‘null‘, column=‘xxx‘, javaType=
- mybatis快速入门(三)
- open_basedir restriction in effect,解决php引入文件权限问题
- python基础判断题汇总_python基础 判断题
- springMVC接受括号乱码
- 一波三折,终于找到src漏洞挖掘的方法了【建议收藏】
- 浅议 Web 表单设计
- 夹水晶头8根网线的顺序
- 15个经典面试问题及回答思路,挥泪整理面经
- 高等代数第3版下 [丘维声 著] 2015年版_3折购书优惠码限时抢(人工智能类)
- Altium_Designer不规则焊盘制作
- 目标主机showmount -e信息泄露(CVE-1999-0554),如何禁止只允许特定主机使用showmount -e查看挂载列表
热门文章
- 手把手教你搭建Nginx-rtmp流媒体服务器+使用ffmpeg推流
- Skywalking-06:OAL基础
- 设计模式学习笔记——装饰(Decorator)模式
- Struts2值栈详解
- 怎么设置vscode界面大小_vscode怎么放大界面
- java自定义方法使用_Java 自定义方法
- java使用ssh下载git代码_使用Java用户名和密码在ssh上克隆git存储库
- C语言中负数补码的方法,c语言里求负数补码的总结不足与优点.docx
- linux修改ip配置文件_协助调试Linux服务器经验分享
- yshon对讲机如何调频率_窄带宽、窄脉宽、高重复频率,主动调Q光纤激光器是如何实现的?...