今日打算开始对广被使用的mmDetection3D框架进行学习。mmdetection3d可以支持目前主流的三维目标检测算法,方便用户进行学习、部署、算法开发等工作。本文为mmdetection3d的配置文档。
- 环境:
Ubuntu20.04; GPU-Nvidia 3090
CUDA 11.3;
一、介绍
伴随着自动驾驶科技的飞速发展和激光雷达的普及,3D目标检测近年来逐渐成为业界和学术界的研究热点。然而,目前在3D目标检测领域却不像2D目标检测那样,有着像MMDetection这样简单通用的代码库和benchmark。所以发布MMDetection3D(简称MMDet3D)来弥补这一空白。
太长不看版:
- MMDetection3D 支持了VoteNet, MVXNet, Part-A2,PointPillars等多种算法,覆盖了单模态和多模态检测,室内和室外场景SOTA; 还可以直接使用训练MMDetection里面的所有300+模型和40+算法,支持算法的数量和覆盖方向为3D检测代码库之最。
- MMDetection3D 支持了SUN RGB-D, ScanNet, nuScenes, Lyft, 和KITTI共5个主流数据集,支持的数据集数量为3D检测代码库之最。
- MMDetection3D 拥有最快的训练速度,支持pip install一键安装,简单易用。
官方链接:https://mmdetection3d.readthedocs.io/zh_CN/latest/
github:https://github.com/open-mmlab/mmdetection3d/
支持多模态/单模态3D检测
3D检测领域的多套codebase大多聚焦在基于点云的单模态检测上,而多模态检测的代码库也不怎么支持单模态的检测。由于多模态3D检测任务的重要性愈发凸显,我们在MMDetection3D里面支持了多模态(图像+点云)的3D检测,目前已经支持了MVX-Net在KITTI 上的模型。从此,新的工作可以基于MMDetection3D和其他单模态或者多模态方法进行直接的比较,减轻了不少codebase迁移和文章复现等带来的负担。
支持室内/室外主流数据集
由于室内和室外3D检测数据集的差异性,一直以来很少有工作会同时在这两类数据集上进行实验和比较,因此目前也没有codebase能较好地同时支持室内外的数据集及相关方法。 MMDetection3D目前支持了ScanNet和SUNRGBD两个主流室内数据集,还同时支持了KITTI,nuScenes和Lyft三个室外数据集。在模型层面,我们复现了VoteNet 这一室内数据集中的state of the art,以及PartA2-Net,PointPillars 等室外数据集中的常见方法。MMDetection3D将室内外数据集的预处理流程抽象成了一套data pipeline,同时在模型层面已经实现了部分model是与坐标系无关的。我们的目标是以后新的工作可以较轻松地同时在室内和室外数据集上进行试验和比较,以验证方法的普适性并提高其影响力。
直接支持MMDetection的model zoo
目前,还没有哪套3D检测的codebase可以直接在自己的codebase里支持2D检测的SOTA,但MMDetection3D 就做到了这一点。MMDetection3D基于MMDetection和MMCV,使用了和MMDetection一致的外层API并直接使用了很多MMDetection的代码(例如,训练相关的hook都实现在MMCV里面了,而train_detector等函数因为都是检测所以MMDetection3D 压根不用写),所以只要有正确的config文件, MMDetection model zoo里的300+模型和40+算法都可以在MMDetection3D里面正常使用(考虑到MMDetection不支持3D检测,MMDetection3D支持的模型和算法其实比MMDetection多,MMDetection3D可以claim是目前圈内最大、最全的检测算法库了嗯…)。
二、安装与环境配置
本人使用ubuntu20.04, cuda-11.1,pytoch-1.9
安装教程参照https://github.com/open-mmlab/mmdetection3d/blob/master/docs/zh_cn/getting_started.md
创建虚拟环境安装pytorch
重新创建一个新的虚拟环境,毕竟需要安装的东西很多:
conda create -n openmmlab python3.9
接着,安装pytorch,此处建议去官网安装对应cuda版本的pytorch
pip install torch1.9.0+cu111 torchvision0.10.0+cu111 torchaudio0.9.0 -f https://download.pytorch.org/whl/torch_stable.html
注意:此处的torchaudio自己安装时没有成功,所有没有安装。
安装mmcv-full
https://mmcv.readthedocs.io/zh_CN/latest/
mmcv有简单版和完全版,此处强烈建议安装完全版,即mmcv-full
安装命令:
pip install mmcv-full=={mmcv_version} -f https://download.openmmlab.com/mmcv/dist/{cu_version}/{torch_version}/index.html
pip install mmcv-full==1.3.9 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html
本人亲测在实践过程中会出现很多次的安装失败,并提示并不是版本的原因等。安装不成功的主要原因是因为pytorch版本+cuda版本组合不匹配,强烈建议按照如下图中个的搭配安装。注意:此处mmcv的版本最好选择大于1.5.2 小于1.7.0(本人选择的是1.6.0),不然之后的mmdet3d安装也会出现错误提示。
安装MMDection
方式一:
pip install mmdet
方式二:
同时,如果你想修改这部分的代码,也可以通过以下命令从源码编译 MMDetection:
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection git checkout v2.24.0 # switch to v2.24.0 branch
pip install -r requirements/build.txt
pip install -v -e . # or “python setup.py develop”
安装 MMSegmentation.
pip install mmsegmentation
同时,如果你想修改这部分的代码,也可以通过以下命令从源码编译 MMSegmentation:
git clone https://github.com/open-mmlab/mmsegmentation.git
cd mmsegmentation git checkout v0.20.0 # switch to v0.20.0 branch
pip install -e . # or “python setup.py develop”
步骤 3. 克隆 MMDetection3D 代码仓库.
git clone https://github.com/open-mmlab/mmdetection3d.git
cd mmdetection3d
步骤 4. 安装依赖包和 MMDetection3D.
pip install -v -e . # or “python setup.py develop”
注意:
- Git 的 commit id 在步骤 d 将会被写入到版本号当中,例 0.6.0+2e7045c 。版本号将保存在训练的模型里。推荐在每一次执行步骤 d 时,从 github 上获取最新的更新。如果基于 C++/CUDA 的代码被修改了,请执行以下步骤;重要: 如果你重装了不同版本的 CUDA 或者 PyTorch 的 mmdet,请务必移除 ./build 文件。pip uninstall mmdet3d rm -rf ./build find . -name “*.so” | xargs rm
- 按照上述说明,MMDetection3D 安装在 dev 模式下,因此在本地对代码做的任何修改都会生效,无需重新安装;
- 如果希望使用 opencv-python-headless 而不是 opencv-python, 可以在安装 MMCV 之前安装;
- 一些安装依赖是可以选择的。例如只需要安装最低运行要求的版本,则可以使用 pip install -v -e . 命令。如果希望使用可选择的像 albumentations 和 imagecorruptions 这种依赖项,可以使用 pip install -r requirements/optional.txt 进行手动安装,或者在使用 pip 时指定所需的附加功能(例如 pip install -v -e .[optional]),支持附加功能的有效键值包括 all、tests、build 以及 optional 。我们已经支持 spconv2.0. 如果用户已经安装 spconv 2.0, 代码会默认使用 spconv 2.0。它可以比原生 mmcv spconv 使用更少的内存。 用户可以使用下列的命令来安装 spconv 2.0.
pip install cumm-cuxxx
pip install spconv-cuxxxxxx
表示 CUDA 的版本。例如, 使用 CUDA 10.2, 对应命令是 pip install cumm-cu102 && pip install spconv-cu102.支持的 CUDA 版本包括 10.2, 11.1, 11.3, and 11.4.
- 代码目前不能在只有 CPU 的环境(CUDA 不可用)下编译运行。