• 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
    
    • 1

    由于我本人是在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
    
    • 1


    注意:centerformer项目作者提到除了spconv必须使用1.2.1版本,对其他包的版本没有特别需求,例如我在python==3.6和torch==1.6的环境下也能正常训练centerformer模型
    spconv1.2.1的编译方法可以看我以前的文章Ubuntu安装spconv1.2.1,我在编译的时候只加了一句#include 就通过了。

    编译完直接pip install 这个文件就可以了。

    其他

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

    pip install protobuf==3.20.1
    
    • 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 命令查找这个文件

    find / -name libcuhash.so
    
    • 1


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

    vim ~/.bashrc
    
    • 1


    保存退出后执行 source使其生效。

    source ~/.bashrc
    
    • 1

    重新导入测试

    其他:我遇到的一般都是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/'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    train解析后的结果,annos保存的是每一帧的gt信息,lidar保存的是每一帧的点云信息。

    建立软连接

    mkdir data && cd data
    ln -s WAYMO_DATASET_ROOT Waymo
    
    • 1
    • 2

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    最终结果

    三、训练

    4卡

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

    单卡

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

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

    四、结果

    模型训练结束后在work_dir/waymo_centerformer目录下可以看到保存的结果

    下一步计算评估指标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 
    
    • 1

    运行完后在输出目录里生成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 
    
    • 1

    运行完后会在data/waymo文件夹下生成gt_preds.bin文件。

    下面需要用到waymo官方提供的工具来计算精度指标,github地址,clone后切换到r1.3分支。


    按照这里的教程编译精度评价工具.
    先准备好编译所需的基础环境,这里主要是bazel这个工具。

    然后执行语句,编译时间特别长,我差不多用了一个多小时,如何能够翻墙应该会很快,编译正确的截图忘记保存了。

    bazel test waymo_open_dataset/metrics:all
    
    • 1

    然后执行

    bazel build waymo_open_dataset/metrics/tools/compute_detection_metrics_main
    
    • 1

    编译正确的输出如下图,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 
    
    • 1

    最终结果如下:

  • 相关阅读:
    MySQL 锁机制全面解析
    UE4 C++联网RPC教程笔记(三)(第8~9集)完结
    大家都说Java有三种创建线程的方式!并发编程中的惊天骗局!
    WebGPU学习(10)---如何利用 WebGPU 实现高性能
    uniapp调起拨打手机号
    P1868 饥饿的奶牛
    redis-cli报错Could not connect to Redis at 127.0.0.1:6379: Connection refused
    CSS常见用法 以及JS基础语法
    Java8 根据List实体中一个字段去重取最大值,并且根据该字段进行排序
    简单秒表设计仿真verilog跑表,源码/视频
  • 原文地址:https://blog.csdn.net/u014311125/article/details/132861286