当前位置: 首页 > news >正文

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 <iostream>就通过了。

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

其他

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

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 命令查找这个文件

find / -name libcuhash.so


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

vim ~/.bashrc


保存退出后执行 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保存的是每一帧的点云信息。

建立软连接

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=1python tools/create_data.py waymo_data_prep --root_path=data/Waymo --split val --nsweeps=1python tools/create_data.py waymo_data_prep --root_path=data/Waymo --split test --nsweeps=1

最终结果

三、训练

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目录下可以看到保存的结果

下一步计算评估指标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文件。

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


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

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

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 

最终结果如下:

http://www.lryc.cn/news/174881.html

相关文章:

  • 火山引擎DataLeap推出两款大模型应用: 对话式检索与开发 打破代码语言屏障
  • windows上配置vscode C/C++代码跳转
  • 【Xilinx】基于MPSoC的OpenAMP实现(一)
  • 代码随想录算法训练营总结篇|完结撒花
  • uniapp、vue实现滑动拼图验证码
  • 【ArcGIS】土地利用变化分析详解(矢量篇)
  • VS2022创建控制台应用程序后没有Main了,如何显示Main?
  • 当当网商品详情数据接口
  • ultraEdit正则匹配多行(xml用)
  • Mac上的utools无法找到本地搜索插件
  • win11 administrator 账户运行不提示授权
  • docker部署nginx下日志自动切割方法
  • 3D目标检测实战 | 图解KITTI数据集与数据格式
  • 周界警戒AI算法+视频智能分析在安全生产场景中的应用
  • C++中执行shell命令,popen与system的区别
  • Flink相关
  • 数据结构题型9-顺序栈
  • 时间复杂度、空间复杂度
  • C++---多态
  • Android 滑动事件消费监控,Debug 环境下通用思路
  • Unity中Shader用到的向量的乘积
  • 帆软FineReport决策报表之页面布局
  • [Linux入门]---进程的概念
  • Leetcode—— 20.有效的括号
  • 视频播放器的技术组成
  • Stable Diffusion 系统教程 | 强大的ControlNet 控制网
  • Hadoop-sqoop
  • [论文阅读]YOLOV1:You Only Look Once:Unified, Real-Time Object Detection
  • Ubuntu 20.04 安装MySQL 8.0.34
  • MySQL 高级语句 Part1(进阶查询语句+MySQL数据库函数+连接查询)