MMDetection3D 是一个基于 PyTorch 的目标检测开源工具箱, 下一代面向3D检测的平台 对安装 MMDetection3D有问题的同学可以看:【星光02】MMDetection3D 目标检测框架的 Docker 环境制作和改良
✨本文结合官方文档,梳理了基于 mmdet3d 开发人工智能模型的基本流程,整理相关的代码和小工具。如遇任何问题,可以查阅官方文档,MMDetection3D 的官方文档还是写得很好的(就是有一些多模态的代码跑不通,本文会注释部分问题命令)
官方对数据集预处理的文档:3D 目标检测 KITTI 数据集,流程如下:
解压所有 Kitti 数据集,并将文件按如下方式组织:
mmdetection3d
├── data
| ├── kitti
| | ├── ImageSets
| | ├── testing
| │ │ ├── calib
| │ │ ├── image_2
| │ │ ├── velodyne
| | ├── training
| │ │ ├── calib
| │ │ ├── image_2
| │ │ ├── velodyne
| │ │ ├── label_2
执行
mkdir ./data/kitti/ && mkdir ./data/kitti/ImageSets
# 下载数据划分文件
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/test.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/test.txt
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/train.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/train.txt
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/val.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/val.txt
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/trainval.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/trainval.txt
python tools/create_data.py kitti --root-path ./data/kitti --out-dir ./data/kitti --extra-tag kitti
# 单块显卡测试
python
tools/test.py
${CONFIG_FILE}
${CHECKPOINT_FILE}
[--out ${RESULT_FILE}]
[--eval ${EVAL_METRICS}]
[--show]
[--show-dir ${SHOW_DIR}]
# 多块显卡测试
./tools/dist_test.sh
${CONFIG_FILE}
${CHECKPOINT_FILE}
${GPU_NUM}
[--out ${RESULT_FILE}]
[--eval ${EVAL_METRICS}]
可选参数:
RESULT_FILE
:输出结果(pickle 格式)的文件名,如果未指定,结果不会被保存。EVAL_METRICS
:在结果上评测的项,不同的数据集有不同的合法值。具体来说,我们默认对不同的数据集都使用各自的官方度量方法进行评测,所以对 nuScenes、Lyft、ScanNet 和 SUNRGBD 这些数据集来说在检测任务上可以简单设置为 mAP
;对 KITTI 数据集来说,如果我们只想评测 2D 检测效果,可以将度量方法设置为 img_bbox
;对于 Waymo 数据集,我们提供了 KITTI 风格(不稳定)和 Waymo 官方风格这两种评测方法,分别对应 kitti
和 waymo
,我们推荐使用默认的官方度量方法,它的性能稳定而且可以与其它算法公平比较;同样地,对 S3DIS、ScanNet 这些数据集来说,在分割任务上的度量方法可以设置为 mIoU
。--show
:如果被指定,检测结果会在静默模式下被保存,用于调试和可视化,但只在单块GPU测试的情况下生效,和 --show-dir
搭配使用。--show-dir
:如果被指定,检测结果会被保存在指定文件夹下的 ***_points.obj
和 ***_pred.obj
文件中,用于调试和可视化,但只在单块GPU测试的情况下生效,对于这个选项,图形化界面在你的环境中不是必需的。示例:
CONFIG_FILE="configs/mvxnet/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class.py"
CHECKPOINT_FILE="checkpoints/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class_20200621_003904-10140f2d.pth"
RESULT_FILE="assets/result.pickle"
EVAL_METRICS="img_bbox"
SHOW_DIR="assets/kitti_pred/"
python \
tools/test.py \
${CONFIG_FILE} \
${CHECKPOINT_FILE} \
--eval ${EVAL_METRICS} \
--show \
--show-dir ${SHOW_DIR}
注意
图像显示接口还不太稳定,需要大量调试。加上 --show
绘制多模态检测框会报错。如果需要得到检测图像,可以使用 demo/multi_modality_demo.py
生成。
# 使用单块显卡进行训练
python
tools/train.py
${CONFIG_FILE}
[optional arguments]
# 使用多块显卡进行训练
./tools/dist_train.sh
${CONFIG_FILE}
${GPU_NUM}
[optional arguments]
可选参数:
--no-validate
(不推荐):默认情况下,代码在训练阶段每 k(默认值是1,可以像这里一样修改)个周期做一次评测,如果要取消评测,使用 --no-validate
。--work-dir ${WORK_DIR}
:覆盖配置文件中的指定工作目录。--resume-from ${CHECKPOINT_FILE}
:从之前的模型权重文件中恢复。--options 'Key=value'
:覆盖使用的配置中的一些设定。CONFIG_FILE="configs/mvxnet/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class.py"
python \
tools/train.py \
${CONFIG_FILE}
通常把模型的各个组成成分分成6种类型:
在 mmdetection3d/mmdet3d/models/
中创建对应位置的模型组成成分,然后在配置文件中进行配置。
# 显示载入的数据和真值标签
python
tools/misc/browse_dataset.py
${CONFIG_FILE}
--task ${TASK}
--output-dir ${OUTPUT_DIR}
[--online]
可选参数
online
:事实显示结果。需要图形化界面支持,同时需要安装open3d==0.9.0.0
示例:
# 显示 2D 图像以及投影的 3D 边界框,多模态 MVXNET
TASK="multi_modality-det"
CONFIG_FILE="configs/mvxnet/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class.py"
OUTPUT_DIR="assets/kitti_true"
python \
tools/misc/browse_dataset.py \
${CONFIG_FILE} \
--task ${TASK} \
--output-dir ${OUTPUT_DIR}
注意 官方版本的 mvxnet 配置中缺少必要的检测框信息,需要做如下修改:
# 将配置中的 eval_pipeline 中的
dict(type='Collect3D', keys=['points', 'img'])
# 增加 'gt_bboxes_3d'。
dict(type='Collect3D', keys=['points', 'gt_bboxes_3d', 'img'])