CenterPoint 工程复现
注意:本文中使用版本:BEVerse工程下的mmdet3d (
MMDet3d v0.17.3
)版本,MMDetection3D中其他版本的使用
大同小异
。
欢迎有疑问的同学在下方留言,如果觉得有用的话,可以点赞+收藏,再次表示感谢!
参考:
- nuscenes官方使用举例
- CenterPoint 论文速读
- BEVerse 论文速读
一. 下载和安装工程
详细参考:MMdet3d官方文档
pip install openmim
mim install mmcv-full # 此时1.6.1版本
mim install mmdet
mim install mmsegmentation
git clone https://github.com/open-mmlab/mmdetection3d.git
cd mmdetection3d
pip install -e .
注意:
如果需要安装特定版本的mmcv可以参考如下命令,详细请看mmcv官方文档,mmdet3d_v1.1.0
pip install mmcv==2.0.0rc1 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.12.0/index.html
二. 准备nuscenes数据集
参考之前文章Nuscenes 完整版数据集批量下载,如果只是玩玩可以下载nuscenes v1.0-mini版本,但用mini版本数据量太小,训练结果一定不理想。
三. 数据预处理及坐标系变换
python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --version v1.0-mini
注意:
1)如果使用mmdet3d官方的 master分支代码,生成过程中报错FileNotFoundError: NuScenesDataset: [Errno 2] No such file or directory, 原因在于–out-dir路径问题,需要设置./data/nuscenes, 不能自定义路径,为了保证原数据与预处理后数据在一个路径下,即
mmdetection3d
├── mmdet3d
├── tools
├── configs
├── data
│ ├── nuscenes
│ │ ├── maps
│ │ ├── samples
│ │ ├── sweeps
│ │ ├── v1.0-test
| | ├── v1.0-trainval
│ │ ├── nuscenes_database
│ │ ├── nuscenes_infos_train.pkl
│ │ ├── nuscenes_infos_trainval.pkl
│ │ ├── nuscenes_infos_val.pkl
│ │ ├── nuscenes_infos_test.pkl
│ │ ├── nuscenes_dbinfos_train.pkl
│ │ ├── nuscenes_infos_train_mono3d.coco.json
│ │ ├── nuscenes_infos_trainval_mono3d.coco.json
│ │ ├── nuscenes_infos_val_mono3d.coco.json
│ │ ├── nuscenes_infos_test_mono3d.coco.json
2)v1.0.x 以后的MMDet3d版本需要坐标系重构
数据需要进行坐标系重构,尤其是nuscenes数据集,v1.0以后的mmdet3d版本尤其注意,因为官方为了避免歧义,已经将坐标系进行了
统一
。
具体可以参考Coordinate system refactoring,执行脚本如下,新文件保存到/data/nuscenes_convert_infos/下面。
python tools/update_data_coords.py nuscenes --root-dir ./data/nuscenes_infos/ --out-dir ./data/nuscenes_convert_infos/
四. 模型训练
4.1 配置文件名说明
以
centerpoint_02pillar_second_secfpn_4x8_cyclic_20e_nus.py
为例
`{model}`: 模型类型 `centerpoint`.
`{model setting}`:体素尺寸和体素类型 ,如 `01voxel`, `02pillar`.
`{backbone}`: 主干网路,如 `second`.
`{neck}`: neck类型,如 `secfpn`.
`[dcn]`: 是否使用可变卷积.
`[circle]`: 是否使用循环nms
`[batch_per_gpu x gpu]`: 每个gpu上batch数目*gpu数目 , 默认4x8,即4batch×8gpu
`{schedule}`: 训练计划, 可选项 1x, 2x, 20e, etc. 1x = 12epochs , 2x = 24 epochs , 20e = 20 epochs. 对于 1x/2x, 初始化学习率在 8/16th and 11/22th epochs 衰减到0.1 . 对于 20e, 初始化学习率在16th and 19th epochs 衰减到0.1.
`{dataset}`: 数据集,如 nus-3d, kitti-3d, lyft-3d, scannet-3d, sunrgbd-3d. 我们也可制定类别或者使用单一类别,如 kitti-3d-3class and kitti-3d-car。
注意:训练时候使用
centerpoint_02pillar_second_secfpn_4x8_cyclic_20e_nus_novelo.py
会在数据采样器位置报除数为0的bug,暂时不是太明确
novelo
含义?
4.2 执行训练脚本
CUDA_VISIBLE_DEVICES=0,1,2,3 bash tools/dist_train.sh configs/centerpoint/centerpoint_02pillar_second_secfpn_4x8_cyclic_20e_nus.py 8
注意: 默认采用
4batch × 8gpu
的方式,如果并非此配置训练,对应可能需要修改相应的
超参
,如学习率等。
五. 模型评测
5.1 执行评测脚本
注意: 官方在configs/centerpoint/metafile.yml提供了一些预训练模型的下载,可以根据需要自行下载并测试
。
5.1.1 查看mAP, NDS等测评指标
bash tools/dist_test.sh configs/centerpoint/centerpoint_02pillar_second_secfpn_4x8_
cyclic_20e_nus.py work_dirs/centerpoint_02pillar_second_secfpn_4x8_cyclic_20e_nus/epoch_20.pth 4 --eval mAP
注意: 如果一个GPU ,去掉 --mtl
评估指标截图(centerpoint_0075voxel_second_secfpn_circlenms_4x8_cyclic_20e_nus_20200925_230905-358fbe3b.pth):
5.1.2 可视化
- 离线可视化,适用于服务器 先在服务器上生成结果文件,再拷贝到本地查看,详情查看可视化。
## 生成pkl检测结果文件
python tools/test.py configs/centerpoint/centerpoint_02pillar_second_secfpn_4x8_cyclic_20e_nus.py work_dirs/centerpoint_02pillar_second_secfpn_4x8_cyclic_20e_nus/epoch_50.pth --eval 'mAP' --eval-options 'show=False' --out './eval_visualize/mini_test.pkl'
## 针对pkl结果文件进行本地可视化
python tools/misc/visualize_results.py configs/centerpoint/centerpoint_02pillar_second_secfpn_4x8_cyclic_20e_nus.py --result ./data/mini_test.pkl --show-dir ./figs/
可视化pkl检测效果:
- 第二种思路是实时可视化,适用于本机,支持GUI显示,而非服务器,但只能显示
预测值
python tools/test.py configs/centerpoint/centerpoint_02pillar_second_secfpn_4x8_cyclic_20e_nus.py checkpoints/centerpoint_epoch_50.pth --show --show-dir ./figs
在线可视化效果:
5.2 评测结果异常可能原因汇总
- 预处理数据后,是否执行坐标系重构脚本,非常老的
老版本不需要
进行坐标系重构。 - 注意使用所属数据集版本,如果使
用mini版本
评测结果,会出现许多类别AP为0的情况,导致最后的mAP比文中的低6-8个点
。
六. Bug调试可能遇到的问题
Q1: mmdet3d/ops/spconv/src/indice_cuda.cu 124
A1:ops 算子错误
Q2: ImportError: /opt/conda/lib/python3.8/site-packages/mmcv/_ext.cpython-38-x86_64-linux-gnu.so: undefined symbol:
A2: 通常是mmcv版本与torch版本不对应,先卸载mmcv,再重新安装,注意修改下面torch(gpu)后面的版本号。
pip uninstall mmcv-full
pip install mmcv==2.0.0rc1 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.12.0/index.html
Q3: 测试过程中出现 TypeError: ‘DataContainer’ object is not iterable
A3: mmcv版本不对,可以根据区间要求,挨个尝试,推荐mmcv-full 1.6.0,参考Q2安装。
Q4: fatal error: THC/THC.h: No such file or directory
A4: torch版本需要降级。
pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.1 -f https://download.pytorch.org/whl/torch_stable.html
Q5:ImportError: cannot import name ‘ball_query_ext’ from partially initialized module ‘mmdet3d.ops.ball_query’
A5: 忘记torch重新安装后,需要重新编译算子
cd mmdetection3d
python setup.py develop
Q6:mportError: libtorch_cuda_cu.so: cannot open shared object file: No such file or directory 并且 returned non-zero exit status 1
A6:服务器问题,有时候torch 没有安装成功,退出虚拟环境,重新进入安装
pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.1 -f https://download.pytorch.org/whl/torch_stable.html
版权归原作者 Darchan 所有, 如有侵权,请联系我们删除。