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

2023-09-18 17:43:26

一、环境准备

项目地址: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=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卡

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 

最终结果如下:

更多推荐

微信小程序python+nodejs+php+springboot+vue 健身教练私教预约系统

管理员的主要功能有:1.管理员输入账户登陆后台2.个人中心:管理员修改密码和账户信息3.用户管理:对注册的用户信息进行删除,查询4.教练管理:对教练信息进行添加,修改,删除,查询5.教练简介管理:对教练的简介信息进行查询,删除6.在线预约信息:用户对教练的预约信息进行查询,删除7.健身指南管理:对用户查看的健身指南信息

Nginx之防盗链及高可用解读

目录防盗链解读盗链是什么?Nginx中配置防盗链高可用解读KeepalivedNginx中配置高可用防盗链解读盗链是什么?网页的加载顺序是先加载HTML相关的内容,然后解析HTML的内容,那些需要加载图片,那些需要加载文件,是逐步加载的,对于我们线上的图片等静态资源,经常会被其他网站盗用,外面可以我们请求到一个页面后,

LeetCode:2603. 收集树中金币 详解(2023.9.21 C++)

目录2603.收集树中金币题目描述:实现代码与解析:拓扑+bfs原理思路:2603.收集树中金币题目描述:给你一个n个节点的无向无根树,节点编号从0到n-1。给你整数n和一个长度为n-1的二维整数数组edges,其中edges[i]=[ai,bi]表示树中节点ai和bi之间有一条边。再给你一个长度为n的数组coins,

SpringBoot

SpringBoot技术简介SpringBoot是一种用于构建现代化、可扩展的Java应用程序的框架,它的出现极大地简化了Java应用程序的开发流程。本文将介绍SpringBoot的关键特性以及为什么它成为Java开发者的首选工具。什么是SpringBoot?SpringBoot是SpringFramework的一个扩

Spring系列文章:Bean的作⽤域

1、singleton默认情况下,Spring的IoC容器创建的Bean对象是单例的<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.

Linux内核顶层Makefile前期工作分析二

一.Linux内核顶层Makefile前期工作本文继续分析Linux内核源码的顶层Makefile所做的准备工作。本文续上一篇文章,地址如下:Linux内核顶层Makefile前期工作分析一_凌肖战的博客-CSDN博客二.内核顶层Makefile前期工作7.模块编译Linux允许单独编译某个模块,使用命令“makeM=

【C++】STL简介 | string类的常用接口

目录STL简介学string类前的铺垫概念为什么要学string类string类的底层(了解)编码表的故事string类的常用接口与应用3个必掌握的构造赋值访问字符operator[]初识迭代器(iterator)反向迭代器用范围for遍历string类对象的修改操作插字符push_back()插字符串append()

【NCRE 二级Java语言程序设计03】考试环境及考试过程概览

目录前言一、考试环境介绍1.硬件环境2.软件环境二、考试特别说明1.考试时间说明2.考试题型及分值三、考试流程介绍1.登录考试系统2.考试答题界面3.答题交卷操作总结前言📜本专栏主要是分享自己备考全国计算机二级Java语言程序设计所学心得体会、所搜集的资料信息。虽然有Java语言相关基础,但是Java桌面编程、App

虚拟线上发布会带来颠覆性新体验,3D虚拟场景直播迸发品牌新动能

虚拟线上发布会是近年来在数字化营销领域备受关注的形式,而随着虚拟现实技术的不断进步,3D虚拟场景直播更成为了品牌宣传、推广的新选择。可以说,虚拟线上发布会正在以其颠覆性的新体验,为品牌带来全新的活力。1.突破时空限制,拓展潜在用户与传统的线下发布会相比,虚拟线上发布会通过互联网举办,不受地域和时间限制,让所有对品牌或者

Dokcer搭建Apache Guacamole堡垒机

一、什么是堡垒机“堡垒机”这个词通常指的是“堡垒机器”(BastionHost)的简称。堡垒机是一种计算机系统或网络设备,用于增强计算机网络的安全性。它在网络中充当一个重要的安全关口,通过限制对内部网络的访问,帮助保护敏感数据和资源免受未经授权的访问和攻击。堡垒机的主要功能访问控制:堡垒机允许管理员配置哪些用户或系统可

JavaWeb之Listener监听器

文章目录1.什么是监听器?2.监听器有什么用?3.Servlet规范中提供了哪些监听器?3.1jakarta.servlet包下2.2jakarta.servlet.http包下4.实现一个监听器的步骤1.什么是监听器?(1)监听器是Servlet规范中的一员。就像Filter一样。Filter也是Servlet规范中

热文推荐