CenterPoint-KITTI:环境配置、模型训练、效果展示;KITTI 3D 目标检测数据集下载

news2024/11/13 9:14:27

目录

前言

Python虚拟环境创建以及使用

KITTI3D目标检测数据集

CenterPoint-KITTI编译遇到问题合集

ImportError: cannot import name 'VoxelGenerator' from 'spconv.utils

失败案例

最终解决方案

对于可选参数,road plane的处理

E: Unable to locate package libboost-all-dev

TypeError: load() missing 1 required positional argument: ‘Loader‘

 GPU内存不足如何解决:

训练效果

2024-09-13更新


前言

        最近在做基于雷达的目标检测跟踪实现,阅读了同济大学最新的论文LIMOT,但论文复线时需要自己训练Detector,下面记录自己在编译CenterPoint-KITTI过程中遇到的问题以及解决方法。

LIMOT论文官方Github仓库:

GitHub - tiev-tongji/LIMOT: A Tightly-Coupled System for LiDAR-Inertial Odometry and Multi-Object Tracking.

CenterPoint-KITTI官方Github仓库:

​​​​​​GitHub - tianweiy/CenterPoint-KITTI

Python虚拟环境创建以及使用

        官方编译运行CenterPoint时并没有使用Python的虚拟环境,但自己考虑之后处于虚拟环境的便捷性,还是选择使用虚拟环境实现。

  • Python中虚拟环境的使用:
  • 创建虚拟环境ptython3 -m virtualenv venv
  • 激活虚拟环境source venv/bin/activate
  • 退出虚拟环境deactivate
  • Linux中如何彻底删除虚拟环境以及虚拟环境中安装的软件,记住一个原则,虚拟环境里面安装的软件全部存在于此虚拟环境中,当执行命令rm -rf venv删除对应的虚拟环境后,安装的软件也就被删除了。

        最终自己创建并使用虚拟环境如下:

KITTI3D目标检测数据集

  • KITTI原始3D对象预测数据集:
    • KITTI 3D目标检测数据集解析(完整版)_kitti数据集-CSDN博客
    • 百度网盘 请输入提取码 提取码:hsg5.
    • KITTI数据集下载(百度云)-CSDN博客

CenterPoint-KITTI编译遇到问题合集​​​​​​​

ImportError: cannot import name 'VoxelGenerator' from 'spconv.utils

失败案例

         搜索上述错误,有很多种其他参考参考,但修改代码后,又报了很多错误,如下:最终也是卸载,并安装对应版本解决。

第一次参考这篇博客,修改对应代码,大错特错,随后错误一个接着一个,直接干沉默了。

SSD 复现过程报错_importerror: cannot import name ‘voxelgenerator’ f-CSDN博客

ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 2 dimensions. The detected shape was (1, 4) + inhomogeneous part. · Issue #1109 · theislab/scvelo

​​​​​​​​​​​​​​成功解决ValueError: setting an array element with a sequence. The requested array has an...-CSDN博客

最终解决方案

如何解决,最终卸载了cuda11.8对应的spconv,将其替换为Git官网上对应的v1.1版本完美解决。

        自己搜索过程中查询到另一篇Github博客所讲,将低版本在这里也就是v1.1版本的VoxelGeneratorV2的相关文件复制一份放到你安装的spconv文件中,这种方式我并没有尝试,使用重新安装v1.1的方式。 

        1. 查看并卸载已经安装的spconv:

#通过pip list命令查看安装的spconv以及cumm
pip list | grep spconv
pip list | grep cumm
#查询到对应的spconv以及cumm版本后使用uninstall命令卸载(这种方式仅针对于使用pip方式安装的)
pip uninstall spconv
pip uninstall cumm
#卸载后再次查看已经没有安装的spconv以及cumm

        根据官方网站查看:对于cuda11.8如果使用下述方式安装是会有cumm的,自己第一次安装了cuda11.8对应的spconv,下面安装了v1.1版本就没有cumm了,所有安装后验证是否安装正确,没有出现cumm也不用慌,可以正常使用。

        2. 从sponv官网拉取对应v1.1版本的spconv:

git clone -b v1.1 https://github.com/traveller59/spconv.git --recurisve

-b v1.1:指定了拉取对应v1.1版本的spconv。

--recursive: 这个选项用于克隆所有子模块(submodule)。Git 子模块是指在 Git 仓库中嵌套的另一个 Git 仓库。使用 --recursive 选项可以确保在克隆主仓库的同时,也会递归地克隆所有子模块。

        安装步骤:(参考官网)

  • if you are using pytorch 1.4+ and encounter "nvcc fatal: unknown -Wall", you need to go to torch package dir and remove flags contains "-Wall" in INTERFACE_COMPILE_OPTIONS in Caffe2Targets.cmake. This problem can't be fixed in this project (to avoid this, I need to remove all torch dependency in cuda sources and drop half support).
  1. Use git clone xxx.git --recursive to clone this repo.

  2. Install boost headers to your system include path, you can use either sudo apt-get install libboost-all-dev or download compressed files from boost official website and copy headers to include path.

  3. Download cmake >= 3.13.2, then add cmake executables to PATH.

  4. Ensure you have installed pytorch 1.0+ in your environment, run python setup.py bdist_wheel (don't use python setup.py install).

  5. Run cd ./dist, use pip to install generated whl file.

        第5步执行完成后,在dist目录下会生成一个文件(参考如下),执行下述命令安装spconv v1.1:

pip install spconv-1.1-cp38-cp38-linux_x86_64.whl

GitHub - traveller59/spconv at v1.1

        3. 验证是否安装成功:

        由于我使用的时python的虚拟环境,最终安装的软件都位于venv这个虚拟环境中,按照下图第一个方框里的内容找到对应的路径查看有VoxelGeneratorV2这个类,表示成功。

对于可选参数,road plane的处理

进入对应的数据配置文件和模型配置文件,将USE_ROAD_PLANE: 由True改为False。

E: Unable to locate package libboost-all-dev

对于无法定位到软件包的问题,直接使用sudo apt-get update先更新下载源,之后再重试即可。

sudo apt-get update
sudo apt-get install libboost-all-dev

E: Unable to locate package libboost-all-dev_unable to locate package libboost-dev-CSDN博客

TypeError: load() missing 1 required positional argument: ‘Loader‘

解决方案:TypeError: load() missing 1 required positional argument: ‘Loader‘_typeerror: adb() missing 1 required positional arg-CSDN博客

  • 将yaml.load()改为 yaml.safe_load()即可解决。

 GPU内存不足如何解决:

        直接搜索相应博客,我的解决方案就是将batch_size大小指定为2,也就是批量大小指定为2就可以,对于KITTI的CenterPoint的训练。

​​​​​​​​​​​​​​​​​​​​​pytorch: 四种方法解决RuntimeError: CUDA out of memory. Tried to allocate ... MiB_cuda out of memory. tried to allocate 1.38 gib (gp-CSDN博客

  • 如何实时查看GPU使用情况,使用命令:watch -n 0.5 nvidia-smi。
    • watch 是一个在 Unix 和类 Unix 操作系统中常用的命令行工具,它可以用来周期性地执行一个程序,并全屏显示其输出。这对于实时监控某些操作或系统状态非常有用。
    • watch:这是用来执行周期性命令的工具。
    • -n 0.5:这个选项告诉 watch 每 0.5 秒执行一次后面的命令。-n 后面的数字是间隔时间,单位是秒。

训练效果

=========================================================================

2024-09-13更新

         昨天经过漫长时间的训练,模型已经训练成功,但是模型评估的时候出了点小问题:可以参考下面第二个图片,主要是编译的时候修改了numpa好像(具体忘记记录了),但这个问题不大,直接卸载原有的numpy,安装报错指定的numpy就可以。

pip unstall numpy
pip install numpy==1.22.0

        安装新版本的numpy后可以对训练出的.pth结尾的模型进行验证。 

        训练后模型的存放位置:在CenterPouint-KITTI根目录下的output文件夹中,具体参考下图。

        根据官网GETTING_STARTED.md提示测试训练的模型:

        修改了numpy版本后测试没问题了,这里就不贴图片了。

        训练完成之后最重要的也就是按照DEMO.md的提示进行可视化验证:

         按照官网提示安装mayavi的同时需要安装pyqt5工具:

pip install pyqt5

        否则会报如下错误:

        上述工作完成后,执行如下命令:

#官网提示
python demo.py --cfg_file cfgs/kitti_models/pv_rcnn.yaml \
    --ckpt pv_rcnn_8369.pth \
    --data_path ${POINT_CLOUD_DATA}

#example for me
python3 demo.py --cfg_file cfgs/kitti_models/centerpoint.yaml --ckpt ../output/kitti_models/centerpoint/default/ckpt/checkpoint_epoch_51.pth --data_path ~/Lab/object_detector/CenterPoint-KITTI/data/kitti/testing/velodyne

        之后通过可视化界面可以看到如下预测:        

        和官网模型基本一致,非常nice,后续继续探索一下和LIMOT的集成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2140624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

supermap iclient3d for cesium中entity使用

目标将西南石油大学部分区域围起来,然后引个标签显示名称,最后弄个飞机绕学校飞(这个时间有点晚了,明天弄) 围墙: wall:{positions:Cesium.Cartesian3.fromDegreesArrayHeights([104.173,30.822,500,104.178,30.837,500,104.19,3…

数据库之索引<保姆级文章>

目录: 一. 什么是索引 二. 索引应该选择哪种数据结构 三. MySQL中的页 四. 索引分类及使用 一. 什么是索引: 1. MySQL的索引是⼀种数据结构,它可以帮助数据库高效地查询、更新数据表中的数据。 索引通过 ⼀定的规则排列数据表中的记录&#x…

动态内存

动态内存分配函数:在程序运行时为变量或数据结构开辟的内存空间的函数。 有三个重要的动态分配函数:malloc、calloc、realloc。 动态内存分配函数 malloc 这个函数是向内存中申请一块连续的空间,返回一个指向这个块空间的指针。 如果开辟成…

【Elasticsearch系列七】索引 crud

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

测试ASP.NET Core的WebApi项目调用WebService

虚拟机中部署的匿名访问的WebService,支持简单的加减乘除操作。本文记录在WebApi中调用该WebService的方式。   VS2022创建WebApi项目,然后在解决方案资源管理器的Connected Services节点点右键,选择管理连接的服务菜单。 点击下图圈红处…

【STM32 HAL库】IIC通信与CubeMX配置

【STM32 HAL库】IIC通信与CubeMX配置 前言理论IIC总线时序图IIC写数据IIC读数据 轮询模式CubeMX配置应用示例AHT20初始化初始化函数读取说明读取函数 中断模式CubeMX配置状态机图fsm.caht20.c DMA模式CubeMX配置代码 前言 本文为笔者学习 IIC 通信的总结,基于keysk…

评价类——熵权法(Entropy Weight Method, EWM),完全客观评价

目录 一、 熵权法赋权代码说明1.1 介绍 二、 手把手教你运行代码2.1 数据示例2.2 可直接运行代码2.3 shangquanfa_eg_Sheet1.csv数据可视化2.4 代码运行过程截屏2.5 代码运行结果截屏2.6 对熵权法的结果分析 三、 提供的代码如何修改?四、 为什么确定极小化指标&…

算法:计算二叉树的最大深度(Java实现)

思路 定义问题: 最大深度(或称为最大层数)是从根节点到最远叶子节点的路径上的节点数。我们需要找到这个最长路径的节点数。 递归的基本思路: 对于每个节点,我们需要计算其左子树的最大深度和右子树的最大深度。节点的…

54.【C语言】 字符函数和字符串函数(strncpy,strncat,strncmp函数)

和strcpy,strcat,strcmp函数对应的是strncpy,strncat,strncmp函数 8.strncpy函数 *简单使用 cplusplus的介绍 点我跳转 翻译: 函数 strncpy char * strncpy ( char * destination, const char * source, size_t num ); 从字符串中复制一些字符 复制源(source)字符串的前num个…

Redis详细解析

Redis 什么是Redis?关系型与非关系型数据库Redis可以做什么Redis入门安装在Windows系统上安装在Linux系统上安装 Redis在Linux系统上启动运行如何设置redis-server后台运行与关闭如何设置redis客户端登录时需要验证密码**设置允许远程连接redis服务**Redis数据类型Redis常用命…

魔方财务迁移指南

本文将详细介绍如何将魔方财务系统迁移到新的服务器,确保您能够顺利地迁移数据和系统文件。 迁移前的准备 在开始迁移之前,请确保新服务器满足以下配置要求: 操作系统:CentOS/Debian/Ubuntu硬件配置:至少2H2G&#…

RP2040 C SDK ADC功能使用

RP2040 C SDK ADC功能使用 🌿RP2040 ADC功能说明文档:https://www.raspberrypi.com/documentation/pico-sdk/hardware.html#hardware_adc 📗RP2040 ADC介绍 SAR ADC500 kS/s (Using an independent 48MHz clock)12 bit (RP2040 8.7 ENOB, R…

建筑资质与劳务资质的区别

在建筑行业,资质就像是企业的“身份证”,它证明了企业具备承接相应工程的能力和条件。对于刚入行的小白来说,可能会对建筑资质和劳务资质的区别感到困惑。别担心,今天我们就来聊聊这两者之间的不同。 什么是建筑资质? …

git push : RPC failed; HTTP 400 curl 22 The requested URL returned error: 400

git push 出现RPC failed; HTTP 400 curl 22 The requested URL returned error: 400 问题 git push Enumerating objects: 11, done. Counting objects: 100% (11/11), done. Delta compression using up to 8 threads Compressing objects: 100% (10/10), done. error: RPC …

分布式训练:(Pytorch)

分布式训练是将机器学习模型的训练过程分散到多个计算节点或设备上,以提高训练速度和效率,尤其是在处理大规模数据和模型时。分布式训练主要分为数据并行和模型并行两种主要策略: 1. 数据并行 (Data Parallelism) 数据并行是最常见的分布式…

数据结构之树的常用术语

二叉树的常用术语 前言 由于数组在插入、删除上的缺点和链表在查询上的缺点,出现了树的数据结构,可以在增删改查中弥补数组和链表的缺陷。 常用数据 节点:每个节点根节点:最上层的节点,Root节点父节点:相…

基于SSM的宿舍管理系统的设计与实现 (含源码+sql+视频导入教程)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的宿舍管理系统拥有两种角色,分别为管理员和宿管,具体功能如下: 管理员:学生管理、班级管理、宿舍管理、卫生管理、访客管理、用户…

SOT23封装1A电流LDO具有使能功能的 1A、低 IQ、高精度、低压降稳压器系列TLV757P

前言 SOT23-5封装的外形和丝印 该LDO适合PCB空间较小的场合使用,多数SOT23封装的 LDO输出电流不超过0.5A。建议使用时输入串联二极管1N4001,PCB布局需要考虑散热,参考文末PCB布局。 1 特性 • 采用 SOT-23 (DYD) 封装,具有 60.3C/W RθJA •…

双指针算法专题(2)

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: 优选算法专题 想要了解双指针算法的介绍,可以去看下面的博客:双指针算法的介绍 目录 611.有效三角形的个数 LCR 1…

【天池比赛】【零基础入门金融风控 Task2赛题理解】实战进行中……20240915更新至2.3.4.3 查看训练集测试集中特征属性只有一值的特征

2.3 代码示例 2.3.1 导入数据分析及可视化过程需要的库 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import datetime import warnings warnings.filterwarnings(ignore) 2.3.2 读取文件 #读取数据时相对路径载入报错时…