3D点云目标检测:Centerformer训练waymo数据集

一、环境准备

项目地址:centerformer

1.0、基础环境

python == 3.8.0
torch == 1.9.1+cu111
waymo-open-dataset-tf-2-6-0 == 1.4.9
spconv ==1.2.1
其余按照requirement.txt里安装就行

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

由于我本人是在docker容器中训练的,里面的opencv-python和opencv-contrib-python需要替换成headless版本的。
直接pip 安装即可,

pip install opencv-python-headless opencv-contrib-python-headless -i https://pypi.tuna.tsinghua.edu.cn/simple


注意:centerformer项目作者提到除了spconv必须使用1.2.1版本,对其他包的版本没有特别需求,例如我在python==3.6和torch==1.6的环境下也能正常训练centerformer模型
spconv1.2.1的编译方法可以看我以前的文章Ubuntu安装spconv1.2.1,我在编译的时候只加了一句#include 就通过了。
3D点云目标检测:Centerformer训练waymo数据集_第1张图片
编译完直接pip install 这个文件就可以了。

其他

protobuf版本不能太高,我一开始默认装的是4.24.2,降低到3.20.1版本就可以了

pip install protobuf==3.20.1

1.1、编译

bash setup.sh

执行setup前可以在下图所示位置处添加上–user
3D点云目标检测:Centerformer训练waymo数据集_第2张图片
这样做的原因是可以将编译后的MultiScaleDeformableAttention添加到python环境变量中,这样这个包可以被直接import,(python3.6环境下不加也可以)

3D点云目标检测:Centerformer训练waymo数据集_第3张图片

export PYTHONPATH

在~/.bashrc文件中添加 export PYTHONPATH=“${PYTHONPATH}:PATH_TO_CENTERFORMER”,PATH_TO_CENTERFORMER是你自己的centerformer文件夹的路径。

3D点云目标检测:Centerformer训练waymo数据集_第4张图片
添加后执行source ~/.bashrc令其生效。
测试一下,可以看到centerformer的核心组建 det3d能被import。表明整个环境都搭建好了。
3D点云目标检测:Centerformer训练waymo数据集_第5张图片

1.2、存在的问题

1)import tensorflow错误

2)import spconv错误
导入spconv时提示找不到libcuhash.so文件
3D点云目标检测:Centerformer训练waymo数据集_第6张图片
通过find 命令查找这个文件

find / -name libcuhash.so


将该文件所在的路径加入环境变量中

vim ~/.bashrc

3D点云目标检测:Centerformer训练waymo数据集_第7张图片
保存退出后执行 source使其生效。

source ~/.bashrc

重新导入测试

其他:我遇到的一般都是python库版本太高的问题。

二、数据集准备

waymo数据集存储格式时.tfrecord,一个文件包含200帧连续数据,分别放在tfrecord_training,tfrecord_validation,tfrecord_testing里
在这里插入图片描述
分别执行下面的命令解出点云和标签信息。

# train set 
CUDA_VISIBLE_DEVICES=-1 python det3d/datasets/waymo/waymo_converter.py --record_path 'WAYMO_DATASET_ROOT/tfrecord_training/*.tfrecord'  --root_path 'WAYMO_DATASET_ROOT/train/'

# validation set 
CUDA_VISIBLE_DEVICES=-1 python det3d/datasets/waymo/waymo_converter.py --record_path 'WAYMO_DATASET_ROOT/tfrecord_validation/*.tfrecord'  --root_path 'WAYMO_DATASET_ROOT/val/'

# testing set 
CUDA_VISIBLE_DEVICES=-1 python det3d/datasets/waymo/waymo_converter.py --record_path 'WAYMO_DATASET_ROOT/tfrecord_testing/*.tfrecord'  --root_path 'WAYMO_DATASET_ROOT/test/'

train解析后的结果,annos保存的是每一帧的gt信息,lidar保存的是每一帧的点云信息。
3D点云目标检测:Centerformer训练waymo数据集_第8张图片
建立软连接

mkdir data && cd data
ln -s WAYMO_DATASET_ROOT Waymo

WAYMO_DATASET_ROOT是你自己的数据集的实际路径。
生成info信息

python tools/create_data.py waymo_data_prep --root_path=data/Waymo --split train --nsweeps=1

python tools/create_data.py waymo_data_prep --root_path=data/Waymo --split val --nsweeps=1

python tools/create_data.py waymo_data_prep --root_path=data/Waymo --split test --nsweeps=1

最终结果
3D点云目标检测:Centerformer训练waymo数据集_第9张图片

三、训练

4卡

python -m torch.distributed.launch --nproc_per_node=4 ./tools/train.py configs/waymo/voxelnet/waymo_centerformer.py

单卡

python tools/train.py configs/waymo/voxelnet/waymo_centerformer.py

训练输出:
在这里插入图片描述

四、结果

模型训练结束后在work_dir/waymo_centerformer目录下可以看到保存的结果
3D点云目标检测:Centerformer训练waymo数据集_第10张图片
下一步计算评估指标AP和APH,按照centerformer官方代码的指导,执行以下操作:

python -m torch.distributed.launch --nproc_per_node=4 ./tools/dist_test.py CONFIG_PATH --work_dir work_dirs/CONFIG_NAME --checkpoint work_dirs/CONFIG_NAME/latest.pth 

运行完后在输出目录里生成detection_pred.bin文件。
得到模型精度指标有两种方式,一种是提交到waymo官方网站进行评估,第二种是在本地进行评估。我这里用的是第二种方法。
首先需要将gt信息也转换成.bin文件,执行下面的操作

python det3d/datasets/waymo/waymo_common.py --info_path data/Waymo/infos_val_01sweeps_filter_zero_gt.pkl --result_path data/Waymo/ --gt 

运行完后会在data/waymo文件夹下生成gt_preds.bin文件。
3D点云目标检测:Centerformer训练waymo数据集_第11张图片
下面需要用到waymo官方提供的工具来计算精度指标,github地址,clone后切换到r1.3分支。


按照这里的教程编译精度评价工具.
先准备好编译所需的基础环境,这里主要是bazel这个工具。
3D点云目标检测:Centerformer训练waymo数据集_第12张图片
然后执行语句,编译时间特别长,我差不多用了一个多小时,如何能够应该会很快,编译正确的截图忘记保存了。

bazel test waymo_open_dataset/metrics:all

然后执行

bazel build waymo_open_dataset/metrics/tools/compute_detection_metrics_main

编译正确的输出如下图,bazel-bin/waymo_open_dataset/metrics/tools/compute_detection_metrics_main就是编译得到的检测精度评估工具。

执行:

bazel-bin/waymo_open_dataset/metrics/tools/compute_detection_metrics_main detection_pred.bin gt_preds.bin 

最终结果如下:
3D点云目标检测:Centerformer训练waymo数据集_第13张图片

你可能感兴趣的:(3D点云目标检测,点云目标检测,waymo,centerformer)