CenterPoint 工程复现

CenterPoint 工程复现

注意:本文中使用版本:BEVerse工程下的mmdet3d (MMDet3d v0.17.3)版本,MMDetection3D中其他版本的使用大同小异
欢迎有疑问的同学在下方留言,如果觉得有用的话,可以点赞+收藏,再次表示感谢!

参考
1. nuscenes官方使用举例
2. CenterPoint 论文速读
3. 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 可视化

  1. 离线可视化,适用于服务器
    先在服务器上生成结果文件,再拷贝到本地查看,详情查看可视化
## 生成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检测效果:
在这里插入图片描述

  1. 第二种思路是实时可视化,适用于本机,支持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 评测结果异常可能原因汇总

  1. 预处理数据后,是否执行坐标系重构脚本,非常老的老版本不需要进行坐标系重构。
  2. 注意使用所属数据集版本,如果使用mini版本评测结果,会出现许多类别AP为0的情况,导致最后的mAP比文中的低6-8个点

六. Bug调试可能遇到的问题

Q1: mmdet3d/ops/spconv/src/indice_cuda.cu 124
A1ops 算子错误

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 

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年2月25日 下午4:23
下一篇 2023年2月25日

相关推荐