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

OpenPCDet详细部署与复现

OpenPCDet简介

OpenPCDet是一个用于3D目标检测的开源工具箱,它提供了多种数据集的加载器,支持多种模型,并且易于扩展。

本人使用硬件与环境

Linux操作系统(Ubuntu20.04)
Python环境(Anaconda下独立创建)
CPU: 11th Gen Intel® Core™ i9-11900K @ 3.50GHz × 16
GPU: NVIDIA GeForce RTX 3090
cuda:11.3

配置步骤

创建虚拟环境
conda create -n pcdet python=3.8   
激活进入虚拟环境
conda activate pcdet
安装pytorch

查看cuda版本

 nvcc -V  

查看运行结果
在这里插入图片描述

查看对应版本下载命令行
https://pytorch.org/get-started/previous-versions/
可以使用pip或conda 下载安装,本人选择conda

conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch 

安装完成后验证

python
import torch
torch.cuda.is_available()

若返回True,则证明安装成功
退出python

quit()
安装对应的spconv

根据自己服务器的cuda版本查找对应的spconv版本
https://gitcode.com/gh_mirrors/sp/spconv?utm_source=csdn_github_accelerator&isLogin=1

pip install spconv-cu113

验证spconv是否安装成功

python
import spconv

没有报错则安装成功

下载安装OpenPCDet

在这里插入图片描述

下载后进入OpenPCDet文件夹中

cd OpenPCDet

注意此时要在自己创造的环境中打开该文件夹
在这里插入图片描述

安装OpenPCDet所需环境

pip install -r requirements.txt

运行以上命令行可以一键安装,需要注意的是由于之前已经安装过pytorch,将该文件中pytorch相关的注释掉
在这里插入图片描述

由于pip安装速度太慢,我选择了conda安装
打开该txt文件,对应相关的包conda安装。
安装需要的包后就可以安装OpenPCDet库了

python setup.py develop

安装中报错基本是缺少相应的包或者包的版本过新了,把该包remove,选择一个更低版本的包安装基本就可以解决问题。
运行setup文件无报错后就可以导入数据复现结果了!

导入数据集

这里我使用的是Kitti公开数据集,可以从官网下载The KITTI Vision Benchmark Suite
附一个网盘链接:KITTI链接: https://pan.baidu.com/s/1EaWsLH_ZcGGUDoDfZNEGAA?pwd=3acs 提取码: 3acs

下载完成后将数据导入OpenPCDet中
在这里插入图片描述
在这里插入图片描述

将数据导入为以下格式在这里插入图片描述

之后运行以下代码生成相应的数据集配置文件

python -m pcdet.datasets.kitti.kitti_dataset create_kitti_infos tools/cfgs/dataset_configs/kitti_dataset.yaml

生成了以下配置文件
在这里插入图片描述

模型训练

进入配置文件夹
cd tools

model zoo 几个模型的训练示例

如果运行pointpillars,则输入以下命令
python train.py --cfg_file cfgs/kitti_models/pointpillar.yaml
如果运行pointrcnn,则输入以下命令
python train.py --cfg_file cfgs/kitti_models/pointrcnn.yaml
如果运行second,则输入以下命令
python train.py --cfg_file cfgs/kitti_models/second.yaml

训练报错解决

训练过程中如果报以下相关错误:KeyError: ‘road_plane‘

/home/pc/OpenPCDet/tools/cfgs/kitti_models/pointpillar.yaml
/home/pc/OpenPCDet/tools/cfgs/dataset_configs/kitti_dataset.yaml

则在以上两个文件中修改内容在这里插入图片描述

将此处的True修改为False

训练中可以使用以下命令监测GPU的使用情况

watch -n 0.5 nvidia-smi

在这里插入图片描述

在这里插入图片描述

训练结果

训练完成后,会生成相应的训练文件,位于文件

/home/OpenPCDet/output/kitti_models/pointrcnn/default

在这里插入图片描述

可以在训练日志train 2024xxxxxxxx.log中查看本次模型的训练精度
在这里插入图片描述

结果可视化

训练成功后可运行以下命令进行结果可视化

python demo.py --cfg_file cfgs/kitti_models/pointrcnn.yaml --data_path ../data/kitti/testing/velodyne/000005.bin --ckpt ../output/kitti_models/pointrcnn/default/ckpt/checkpoint_epoch_80.pth

在这里插入图片描述

如果报错提示缺少包open3d 和mayavi,则选择其中一个下载导入就行,实测open3d比mayavi好用,运行下面命令下载open3d(清华源)

pip install open3d -i https://pypi.tuna.tsinghua.edu.cn/simple

对训练过程中的损失函数等可视化可以运行下面命令

tensorboard --logdir="/home/OpenPCDet/output/kitti_models/pointrcnn/default/tensorboard"

会输出以下结果

TensorFlow installation not found - running with reduced feature set.
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.12.0 at http://localhost:6006/ (Press CTRL+C to quit)

之后在网页上打开该网址即可查看可视化结果
在这里插入图片描述

至此OpenPCDet的部署和复现完毕。

参考博客:
https://zhuanlan.zhihu.com/p/2835189199
https://zhuanlan.zhihu.com/p/685759829
https://blog.csdn.net/jin15203846657/article/details/122735375?spm=1001.2014.3001.5506
https://blog.csdn.net/qq_30653631/article/details/107620137

相关文章:

OpenPCDet详细部署与复现

OpenPCDet简介 OpenPCDet是一个用于3D目标检测的开源工具箱,它提供了多种数据集的加载器,支持多种模型,并且易于扩展。 本人使用硬件与环境 Linux操作系统(Ubuntu20.04) Python环境(Anaconda下独立创建&…...

同旺科技USB to I2C 适配器 ---- 指令之间延时功能

所需设备: 内附链接 1、同旺科技USB to I2C 适配器 1、指令之间需要延时发送怎么办?循环过程需要延时怎么办?如何定时发送?现在这些都可以轻松解决; 2、只要在 “发送数据” 栏的Delay单元格里面输入相应的延迟时间就…...

网络华为HCIA+HCIP NFV

目录 NFV关键技术:虚拟化 NFV关键技术:云化 NFV架构 NFV标准架构 ​编辑 NFV架构功能模块 NFV架构接口 NFV关键技术:虚拟化 在NFV的道路上,虚拟化是基础,云化是关键。传统电信网络中,各个网元都是…...

MySQL0基础学习记录-下载与安装

下载 下载地址: (Windows)https://dev.mysql.com/downloads/file/?id536787 安装 直接点next,出现: 点execute 然后一直next到这页: next 然后需要给root设置一个密码: 在next。。很多页…...

【万字总结】前端全方位性能优化指南(五)——HTTP/3+QUIC、0-RTT会话恢复、智能压缩决策树

前言 在5G与边缘计算重塑网络格局的今天,传统TCP协议已成为性能跃迁的最后瓶颈。HTTP/3凭借QUIC协议实现传输层革新,通过UDP多路复用+零RTT握手,在弱网环境下仍可保持90%以上的传输效率,头部企业实测首屏加载时间降低40%。本章聚焦三大突破性实践:从Nginx/K8s集群的HTTP/3…...

集成学习(下):Stacking集成方法

一、Stacking的元学习革命 1.1 概念 Stacking(堆叠法) 是一种集成学习技术,通过组合多个基学习器(base learner)的预测结果,并利用一个元模型(meta-model)进行二次训练&#xff0c…...

centos 7 搭建FTP user-list用户列表

在 CentOS 7 上搭建基于 user_list 的 FTP 用户列表,你可以按以下步骤操作: 1. 安装 vsftpd 服务 若还未安装 vsftpd,可以使用以下命令进行安装: bash yum install -y vsftpd2. 启动并设置开机自启 vsftpd 服务 bash systemctl…...

CUDA编程面试高频30题

1. 什么是CUDA?它与GPU的关系是什么? 答: CUDA(Compute Unified Device Architecture)是由NVIDIA开发的一种并行计算平台和应用程序接口模型。它允许开发者利用NVIDIA GPU进行通用计算任务,而不仅仅是图形渲染。CUDA提…...

PageHelper插件依赖引入不报错,但用不了

情况: 父模块pom. Xml 引入1. 4. 0以上版本的pagehelper-spring-boot-starter。 要用到插件的子模块,去掉版本号,引入和父模块一样的依赖。 引入成功,没有报错,但是打开右边的maven里面没有找到PageHelper插件。 终端清空并重…...

背包问题——动态规划的经典问题包括01背包问题和完全背包问题

01背包问题:给你多个物品每个物品只能选一次,要你在不超过背包容积(或者恰好等于)的情况下选择装价值最大的组合。如果没有动态规划的基础其实是很难理解这个问题的,所以看这篇文章之前先去学习一下动态规划的基本思想…...

MyBatis 面试专题

MyBatis 面试专题 基础概念MyBatis中的工作原理MyBatis 与 Hibernate 的区别?#{} 和 ${} 的区别?MyBatis 的核心组件有哪些? 映射与配置如何传递多个参数?ResultMap 的作用是什么?动态 SQL 常用标签有哪些?…...

Animation - AI Controller控制SKM_Manny的一些问题

一些学习笔记归档; 在UE5中,使用新的小白人骨骼:SKM_Manny,会跟UE4中的小白人有一些差别; 比如在用AI Controller控制使用该骨骼(配置默认的ABP_Manny Animation BP)角色的时候,需要…...

安科瑞新能源防逆流解决方案:守护电网安全,赋能绿色能源利用

随着光伏、储能等新能源在用户侧的快速普及,如何避免电力逆流对电网造成冲击,成为行业关注的焦点。安科瑞凭借技术实力与丰富的产品矩阵,推出多场景新能源防逆流解决方案,以智能化手段助力用户实现安全、经济的能源管理&#xff0…...

filebeat和logstash区别

Filebeat 角色: 轻量级日志收集器。 功能: 从指定的日志文件中读取日志数据。 可以从多个源(如文件、系统日志、容器日志等)收集日志。 将收集到的日志数据传输到 Logstash、Elasticsearch 或其他支持的输出端点。 性能: 由于是轻量级的,File…...

【一起学Rust | Tauri2.0框架】基于 Rust 与 Tauri 2.0 框架实现全局状态管理

前言 在现代应用程序开发中,状态管理是构建复杂且可维护应用的关键。随着应用程序规模的增长,组件之间共享和同步状态变得越来越具有挑战性。如果处理不当,状态管理可能会导致代码混乱、难以调试,并最终影响应用程序的性能和可扩…...

扩散模型算法实战——三维重建的应用

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​ ​​​​​​ ​ ​ 1. 引言 三维重建是计算机视觉和图形学中的一个重要研究方向,旨在从二维图像或其他传感器数据中恢复…...

社群经济4.0时代:开源链动模式与AI技术驱动的电商生态重构

摘要:在Web3.0技术浪潮与私域流量红利的双重驱动下,电商行业正经历从"流量收割"到"用户深耕"的范式转变。本文基于社群经济理论框架,结合"开源链动21模式"、AI智能名片、S2B2C商城小程序源码等创新工具&#x…...

【Linux系统】进程等待:告别僵尸进程深入理解Linux进程同步的核心密码

Linux系列 文章目录 Linux系列前言一、进程等待的核心目的二、进程等待的实现方式2.1 wait()函数2.2 waitpid()函数 总结 前言 在Linux系统中,进程等待(Process Waiting)是多进程编程中的核心机制,指父进程…...

根据文件名称查询文件所在位置

在 Linux 中,根据文件名称查询文件所在位置主要通过命令行工具实现,以下是几种常用方法: --- ### **1. 使用 find 命令(最灵活)** find 命令可以递归搜索指定目录下的文件,支持按名称、类型、时间等条件过…...

六十天前端强化训练之第二十五天之组件生命周期大师级详解(Vue3 Composition API 版)

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗,谢谢大佬! 目录 一、生命周期核心知识 1.1 生命周期全景图 1.2 生命周期钩子详解 1.2.1 初始化阶段 1.2.2 挂载阶段 1.2.3 更新阶段 1.2.4 卸载阶段 1.3 生命周期执行顺序 1.4 父子组…...

Pytorch使用手册(专题五十)—自定义运算符

1. PyTorch 自定义运算符 PyTorch 提供了一个庞大的运算符库,这些运算符可以对张量进行操作(例如 torch.add、torch.sum 等)。然而,您可能希望向 PyTorch 引入一个新的自定义操作,并使其能够与诸如 torch.compile、autograd 和 torch.vmap 等子系统协同工作。为此,您必须…...

springboot整合mybatis-plus(保姆教学) 及搭建项目

一、Spring整合MyBatis (1)将MyBatis的DataSource交给Spring IoC容器创建并管理,使用第三方数据库连接池(Druid,C3P0等)代替MyBatis内置的数据库连接池 (2)将MyBatis的SqlSessionFactory交给Spring IoC容器创建并管理,使用spring-mybatis整…...

VSCode创建VUE项目(三)使用axios调用后台服务

1. 安装axios,执行命令 npm install axios 2. 在 main.ts 中引入并全局挂载 Axios 实例 修改后的 代码(也可以单独建一个页面处理Axios相关信息等,然后全局进行挂载) import { createApp } from vue import App from ./App.vue import rou…...

JVM常用垃圾回收器

Serial 和Serial Old收集器 Serial 系列的垃圾收集器采用了简单高效、资源消耗最少、单线程收集的设计思路。 简单高效:由于硬件资源有限,垃圾回收器需要设计得简单高效,以减少系统资源的占用。Serial 系列的垃圾收集器实现简单&#xff0c…...

车辆模型——运动学模型

文章目录 约束及系统移动机器人运动学模型(Kinematic Model)自行车模型含有加速度 a a a 的自行车模型系统偏差模型 在机器人的研究领域中,移动机器人的系统建模与分析是极为关键的基础环节,本文以非完整约束的轮式移动机器人为研…...

EJS缓存解决多页面相同闪动问题

基于 EJS 的模板引擎特性及其缓存机制,以下是关于缓存相同模块的详细解答: 一、EJS 缓存机制的核心能力 模板编译缓存 EJS 默认会将编译后的模板函数缓存在内存中,当相同模板文件被多次渲染时,会直接复用已编译的模板函数&#x…...

<details>和<summary>标签的用途,如何使用它们实现可折叠内容

大白话和标签的用途&#xff0c;如何使用它们实现可折叠内容 <details> 和 <summary> 标签用途 <details> 和 <summary> 标签是 HTML 里的实用标签&#xff0c;二者配合能创建出可折叠内容。 <details> 标签就像是一个容器&#xff0c;能把那…...

HUGO介绍、安装、以及使用

HUGO官方网站&#xff0c;文章内容的简介大部分来自官网的翻译&#xff0c;官网是纯英文描述&#xff0c;英语好的可以前往官方网站&#xff0c;博主在这里简介中简单翻译处理包括一些链接的引用&#xff0c;主要是讲解一下如何安装和使用。 这里再粘贴一个三方网站opendocs.i…...

【STM32实物】基于STM32的太阳能充电宝设计

基于STM32的太阳能充电宝设计 演示视频: 基于STM32的太阳能充电宝设计 硬件组成: 系统硬件包括主控 STM32F103C8T6、0.96 OLED 显示屏、蜂鸣器、电源自锁开关、温度传感器 DS18B20、继电器、5 V DC 升压模块 、TB4056、18650锂电池、9 V太阳能板、稳压降压 5 V三极管。 功能…...

【Netty】长连接与短连接的不同实现

长连接与短连接的不同实现 配置层面 // 长连接配置 bootstrap.option(ChannelOption.SO_KEEPALIVE, true) // 启用 TCP keepalive.option(ChannelOption.TCP_NODELAY, true); // 禁用 Nagle 算法// 短连接不需要这些配置心跳机制 // 长连接需要心跳 pipeline.addLast(new Idl…...