作者 | 双愚 编辑 | 汽车人
3D目标检测示例(from Paddle3D)
2D目标检测是一个比较成熟的领域,相关的目标检测框架非常多,比如Detection2,MMDetection等。研究人员基于这些目标检测可以快速实现自己的想法,而不需要耗费大量的精力在工程开发,极大地降低了开发成本。
随着3D目标检测算法的逐渐增多,3D目标检测算法还处于一个比较混乱的状态,使得相关研究者难以在一个统一的框架下进行各种研究组合实验。具体表现在:
- 很多3D数据集没有统一的接口API,KITTI,nuScenes,Waymo,Lyft等不同数据集之间的数据格式,坐标定义,采集方式,评价指标等差别都很大,
- 3D数据的与预处理方式比2D图片预处理要复杂,比如数据增广,调整参数等入门门槛较高
- 没有预训练模型,训练速度慢,评价指标不统一等问题都不利于3D目标检测的发展。
为了有效降低相关研究人员的科研和工程开发成本,建立统一的3D目标检测算法框架变得越来越重要。目前3D目标检测框架主要有4个,分别是:OpenPCDet, mmdetection3d, Det3D, Paddle3D
老规矩,先放一下4个3D目标检测框架对应的github官方链接:
- OpenPCDet:https://github.com/open-mmlab/OpenPCDet
- 个人代码注解笔记:https://github.com/HuangCongQing/pcdet-note
- mmdetection3d:https://github.com/open-mmlab/mmdetection3d
- 官方文档:https://mmdetection3d.readthedocs.io/
- 个人代码注解笔记:https://github.com/HuangCongQing/mmdetection3d-note
- Det3D:https://github.com/poodarchu/Det3D
- 个人代码笔记:TODO
- Paddle3D:https://github.com/PaddlePaddle/Paddle3D
- 个人代码笔记::TODO
小结
这4种目标检测框架算是都接触过,但实际场景中个人主要接触的是OpenPCDet和mmdetection3d,算是更熟悉些。下面说下对各个框架的使用感受,以期对大家入门学习3D目标检测,选择3D检测框架时提供些许帮助!
1.OpenPCDet
链接:https://github.com/open-mmlab/OpenPCDet
- 社区活跃
- 代码轻量化,而且可读性强(近些年的顶刊论文有些是基于这个框架开发的)
- 部署方便相比其他框架方便些,而且有现成的一些部署实现。比如,pointpillars部署可以参考下面一些部署方案:
- https://github.com/NVIDIA-AI-IOT/CUDA-PointPillars
- https://github.com/hova88/PointPillars_MultiHead_40FPS
- https://github.com/hova88/OpenPCDet
- 【建议】个人认为如果初学者要学习目标检测框架,优先学OpenPCDet
2.mmdetection3d
链接:https://github.com/open-mmlab/mmdetection3d
- 社区活跃
- 有官方文档,便于上手
- 相比于OpenPCDet,mmdetection3d包含场景更多,包括图像、点云、多模态数据源的3D检测以及分割等。
- 代码封装比较好,但入门相对OpenPCDet困难些,codeview比较吃力(近些年的顶刊论文有些是基于这个框架开发的)
- 模型部署工具仍在试验阶段
- 【建议】对3D目标检测比较熟悉了之后,再尝试看mmdetection3d,里面内容更丰富,能学到不少东西。
3.Det3D
链接:https://github.com/poodarchu/Det3D
- 很早之前看过 ,但后面开发的时候没怎么用过,了解的同学可以评论下,我会选取有用的信息放在这里,会标注出知乎ID和链接的哈
- 和OpenPCDet框架类似,也比较轻量,但缺点是最近不怎么更新了
- 也有一些已有的基于此框架的部署方案,比如CenterPoint的部署:https://github.com/CarkusL/CenterPoint
- 【建议】学习优先级低于OpenPCDet和mmdetection3d
- Paddle3D:https://github.com/PaddlePaddle/Paddle3D
- (2022年8月份)刚开源出来,暂时不清楚效果
- 前面三种框架都是基于Pytorch,Paddle3D是基于PaddlePaddle框架,适合学过熟悉PaddlePaddle的同学
- 【建议】先观望下吧~
Plus:
- 里面OpenPCDet,mmdetection3d,Det3D都和港中文有关系,确实强啊。而且从每年的CVPR等订刊也能看到3D目标检测论文里面港中文占了很大比重啊!
- Paddle3D是百度(飞桨携手Apollo)开发的框架。了解自动驾驶的同学都知道,工业上,百度是国内最早发展自动驾驶的企业。
1 OpenPCDet
代码链接:https://github.com/open-mmlab/OpenPCDet
个人代码笔记:https://github.com/HuangCongQing/pcdet-note
记得最开始2020年接触这个框架,还是Shaoshuai Shi(港中文)github下的仓库,后面才整体搬迁到OpenMMLab 下。下面介绍下OpenPCDet。知乎上有一个Shaoshuai Shi博士写的入门文档,还是比较清楚,大家可以主要看下这个文档:https://zhuanlan.zhihu.com/p/152120636。
下面截取一部分介绍:
OpenPCDet旨在为学术界和工业界提供一个更灵活、全面、高效的3D目标检测框架。其主要开发人员是PointRCNN,Part-A^2 Net,PV-RCNN论文作者。OpenPCDet基于PyTorch实现,主要特点如下。
- 数据-模型分类的顶层代码框架设计思想:PCDet定义了统一的规范化的3D坐标,并贯穿着整个数据模型中,研究人员无需关心不同数据集的坐标差异,接口差异,可以直接在PCDet中使用统一的数据集接口进行开发,省时高效。
- 统一的3D目标检测定义:不同的3D目标检测数据集在坐标系基准和3D框的定义上都有所不同,PCDet将不同点云数据集坐标系和3D框进行转化,定义为统一的坐标系标准和3D框。便于研究人员开发。
- 灵活全面的模块化模型拓扑设计:PCDet定义了一个config文件,开发人员只需要在config文件中定义自己所需要的模块,PCDet就会根据定义的模块组合为合适的目标检测框架,可以快速训练和测试。
整体框架
下面两张图可以宏观了解下OpenPCDet整体框架:
PCDet模块化的3D目标检测框架,支持不同类型的3D目标检测算法。
PCDet模块化设计可以支持多种3D目标检测框架。
Model Zoo(支持模型)
支持KITTI的Model ZOO,更多其他数据集支持模型,请访问Github README:https://github.com/open-mmlab/OpenPCDet
【入门推荐】pcdet系列笔记:
2 mmdetection3d
代码链接:https://github.com/open-mmlab/mmdetection3d
个人代码笔记:https://github.com/HuangCongQing/mmdetection3d-note
文档链接:https://mmdetection3d.readthedocs.io/
MMDetection3D主要有以下特点:
- MMDetection3D 支持了VoteNet, MVXNet, Part-A2,PointPillars等多种算法,覆盖了单模态和多模态检测,室内和室外场景SOTA; 还可以直接使用训练MMDetection里面的所有300+模型和40+算法,支持算法的数量和覆盖方向为3D检测代码库之最。
- MMDetection3D 支持了SUN RGB-D, ScanNet, nuScenes, Lyft, 和KITTI共5个主流数据集,支持的数据集数量为3D检测代码库之最。
- MMDetection3D 拥有最快的训练速度,支持pip install一键安装,简单易用。
OpenPCDet 和 mmdetection3d 区别
下面选取OpenMMLab官方介绍的OpenPCDet 和 mmdetection3d 区别
OpenPCDet 和 mmdetection3d 是两个不同的团队开发和维护的。
从功能角度上讲,mmdet3d 支持的场景和任务更多(包含室内室外场景的物体检测和点云分割),各种模态设定更全面(多模态,以及点云或图像的单模态),总体支持的模型数量更多,覆盖面更广,可以适应不同用户多样的使用和研发需求。OpenPCDet 主要聚焦在基于点云的 3D 目标检测这一种设定上,代码结构相对简单轻量一些。从更新维护的频率上看,MMDet3D 的更新和维护更加频繁,保持了月度的版本更新。
OpenPCDet 和 mmdetection3d 区别
Model Zoo(支持模型)
Benchmark and model zoo
3 Det3D
代码链接:https://github.com/poodarchu/Det3D
Det3D,这个框架算是我知道最早出来的 3D 目标检测框架了(2020 年初)。很早之前看过 ,但后面开发的时候没怎么用过。这个框架,在知乎上作者【id: 我不寻衅滋事】(才发现也是港中文的同学)也写了一个入门文档,我贴在这里了https://zhuanlan.zhihu.com/p/101346137。
Det3D被认为首个通用的3D目标检测框架,Det3D基于PyTorch实现,代码借鉴了second.pytorch、maskrcnn、benchmark、mmDetection以及mmcv 等开源框架的的设计思路。
目前,Det3D支持的数据集包括KITTI ,nuScenes ,Lyft 三种主流目标检测数据集,支持的模型包括VoxelNet,SECOND,CBGS ,Point Pillars,PIXOR,PointNet++,Point RCNN等目标检测模型。Det3D主要特点包括,支持多GPU支持训练统一的数据集API,训练流程,数据增强pipeline,完备的可视化功能和提供地平面检测等辅助模块。
Model Zoo(支持模型)
Benchmark and model zoo
4 Paddle3D
代码链接:https://github.com/PaddlePaddle/Paddle3D
Paddle3D是最近(2022年8月)才推出来的3D目标检测框架,目前只有基础的数据集(KITTI,NuScenes和SemanticKITTI)和模型(pointpillars和centerpoint),相信后面更新迭代会比较快。具体后面会发展如何,不好说,先观望一阵吧。
不过特别需要说的一点是其是基于深度学习框架PaddlePaddle开发的,特别适合熟悉PaddlePaddle的同学。
这里介绍就主要选取一段官方的介绍:
飞桨携手Apollo开放平台基于大量业务实践经验,针对自动驾驶感知模块提供了一系列能力。其中3D视觉能力是本次发布的重点,飞桨3D视觉开发套件Paddle3D不仅覆盖了单目、点云等多种模态以及检测、分割等多种任务类型,同时支持模型一键预测部署,并与Apollo开放平台实现训练部署无缝衔接,使开发者使用更便捷!
整体框架
Paddle3D全景图
自动驾驶环境感知能力全景
Model Zoo(支持模型)
Model Zoo
最后,大家有问题,欢迎在评论区评论,我看到都会及时回复的。我特别佩服有能力并且善良乐于帮助的人,我也希望成为这样的人ヾ(◍°∇°◍)ノ゙。希望能带大家少走一些弯路,也共同进步~
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、多传感器融合、SLAM、光流估计、轨迹预测、高精地图、规划控制、AI模型部署落地等方向;