内容简介:本文转载自知乎,已获作者授权转载。
本文转载自知乎,已获作者授权转载。
链接: 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 3 D目标检测框架介绍
数据-模型分离的顶层代码框架设计思想
不同于图像处理,点云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角度增加)。
灵活全面的模块化模型拓扑设计
基于图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
在看,让更多人看到
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- CVPR2019| 9篇CVPR论文开源代码(行人检测/物体检测/3D Face等)
- 目标检测的稀疏对抗攻击,代码已开源
- 牧云(CloudWalker)开源手记 | Webshell 监控检测策略初探
- 绝对不能错过的5款开源入侵检测工具
- 亚马逊提出目标检测训练秘籍(代码已开源)
- Facebook开源其Java竞争条件检测工具RacerD
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Android 源码设计模式解析与实战
何红辉、关爱民 / 人民邮电出版社 / 2015-11 / 79.00元
本书专门介绍Android源代码的设计模式,共26章,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。主要内容为:优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、单例模式、Builder模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器模式、命令模式、观察者模式、备忘录模式、迭代器模式、模板方法模式、访问者模式、中介......一起来看看 《Android 源码设计模式解析与实战》 这本书的介绍吧!