一、环境准备
项目地址: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里安装就行
bash
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
由于我本人是在docker容器中训练的,里面的opencv-python和opencv-contrib-python需要替换成headless版本的。
直接pip 安装即可,
bash
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 <iostream>
就通过了。
编译完直接pip install 这个文件就可以了。
其他
protobuf版本不能太高,我一开始默认装的是4.24.2,降低到3.20.1版本就可以了
bash
pip install protobuf==3.20.1
1.1、编译
bash setup.sh
执行setup前可以在下图所示位置处添加上--user
这样做的原因是可以将编译后的MultiScaleDeformableAttention添加到python环境变量中,这样这个包可以被直接import,(python3.6环境下不加也可以
)
export PYTHONPATH
在~/.bashrc文件中添加 export PYTHONPATH="${PYTHONPATH}:PATH_TO_CENTERFORMER",PATH_TO_CENTERFORMER是你自己的centerformer文件夹的路径。
添加后执行source ~/.bashrc令其生效。
测试一下,可以看到centerformer的核心组建 det3d能被import。表明整个环境都搭建好了。
1.2、存在的问题
1)import tensorflow错误
2)import spconv错误
导入spconv时提示找不到libcuhash.so文件
通过find 命令查找这个文件
bash
find / -name libcuhash.so
将该文件所在的路径加入环境变量中
bash
vim ~/.bashrc
保存退出后执行 source使其生效。
bash
source ~/.bashrc
重新导入测试
其他:我遇到的一般都是python库版本太高的问题。
二、数据集准备
waymo数据集存储格式时.tfrecord,一个文件包含200帧连续数据,分别放在tfrecord_training,tfrecord_validation,tfrecord_testing里
分别执行下面的命令解出点云和标签信息。
bash
# 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保存的是每一帧的点云信息。
建立软连接
bash
mkdir data && cd data
ln -s WAYMO_DATASET_ROOT Waymo
WAYMO_DATASET_ROOT是你自己的数据集的实际路径。
生成info信息
bash
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
最终结果
三、训练
4卡
bash
python -m torch.distributed.launch --nproc_per_node=4 ./tools/train.py configs/waymo/voxelnet/waymo_centerformer.py
单卡
bash
python tools/train.py configs/waymo/voxelnet/waymo_centerformer.py
训练输出:
四、结果
模型训练结束后在work_dir/waymo_centerformer目录下可以看到保存的结果
下一步计算评估指标AP和APH,按照centerformer官方代码的指导,执行以下操作:
bash
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文件,执行下面的操作
bash
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文件。
下面需要用到waymo官方提供的工具来计算精度指标,github地址,clone后切换到r1.3分支。
按照这里的教程编译精度评价工具.
先准备好编译所需的基础环境,这里主要是bazel这个工具。
然后执行语句,编译时间特别长,我差不多用了一个多小时,如何能够翻墙应该会很快,编译正确的截图忘记保存了。
bash
bazel test waymo_open_dataset/metrics:all
然后执行
bash
bazel build waymo_open_dataset/metrics/tools/compute_detection_metrics_main
编译正确的输出如下图,bazel-bin/waymo_open_dataset/metrics/tools/compute_detection_metrics_main就是编译得到的检测精度评估工具。
执行:
bash
bazel-bin/waymo_open_dataset/metrics/tools/compute_detection_metrics_main detection_pred.bin gt_preds.bin
最终结果如下: