使用OpenPCDet训练与测试Transformer模型:如何加载自己的数据集
引言
Transformer架构因其强大的序列处理能力和长距离依赖捕捉能力,在自然语言处理领域取得了巨大成功。近年来,这一架构也被引入3D物体检测领域,如Voxel Transformer等,显著提升了模型在复杂场景下的检测性能。OpenPCDet整合了多种先进的检测模型,包括基于Transformer的架构,为用户提供了丰富的选择。
环境搭建与数据准备
-
安装OpenPCDet: 确标Python环境,确保安装PyTorch及OpenPCDet。克隆仓库后,执行依赖安装。
参考:安装、测试和训练OpenPCDet:一篇详尽的指南
-
nuScenes数据集: 从官方网站下载数据集,包含LiDAR、相机图像、雷达等多模态数据,为训练和评估准备。存放到相应的路径。
参考:nuscenes生成数据信息info
模型训练
python train.py --cfg_file ./cfgs/nuscenes_models/transfusion_lidar.yaml
模型测试
python test.py --cfg_file ./cfgs/nuscenes_models/transfusion_lidar.yaml --batch_size 4 --ckpt ../checkpoints_office/cbgs_transfusion_lidar.pth
mAP: 0.5563
mATE: 0.3980
mASE: 0.4401
mAOE: 0.4530
mAVE: 0.4337
mAAE: 0.3143
NDS: 0.5743
Per-class results:
Object Class AP ATE ASE AOE AVE AAE
car 0.908 0.172 0.156 0.119 0.110 0.065
truck 0.771 0.151 0.145 0.018 0.092 0.014
bus 0.995 0.146 0.082 0.025 0.609 0.311
trailer 0.000 1.000 1.000 1.000 1.000 1.000
construction_vehicle 0.000 1.000 1.000 1.000 1.000 1.000
pedestrian 0.933 0.123 0.250 0.311 0.208 0.125
motorcycle 0.643 0.182 0.260 0.368 0.051 0.000
bicycle 0.510 0.150 0.181 0.237 0.401 0.000
traffic_cone 0.805 0.056 0.327 nan nan nan
barrier 0.000 1.000 1.000 1.000 nan nan
2024-06-06 18:13:44,866 INFO ----------------Nuscene detection_cvpr_2019 results-----------------
***car error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
0.17, 0.16, 0.12, 0.11, 0.07 | 82.63, 91.75, 93.79, 94.97 | mean AP: 0.907864441295618
***truck error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
0.15, 0.14, 0.02, 0.09, 0.01 | 73.73, 75.99, 78.95, 79.56 | mean AP: 0.7705777235003457
***construction_vehicle error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
1.00, 1.00, 1.00, 1.00, 1.00 | 0.00, 0.00, 0.00, 0.00 | mean AP: 0.0
***bus error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
0.15, 0.08, 0.02, 0.61, 0.31 | 99.49, 99.49, 99.49, 99.49 | mean AP: 0.9949294532627868
***trailer error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
1.00, 1.00, 1.00, 1.00, 1.00 | 0.00, 0.00, 0.00, 0.00 | mean AP: 0.0
***barrier error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
1.00, 1.00, 1.00, nan, nan | 0.00, 0.00, 0.00, 0.00 | mean AP: 0.0
***motorcycle error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
0.18, 0.26, 0.37, 0.05, 0.00 | 60.32, 64.65, 65.63, 66.58 | mean AP: 0.6429236754509353
***bicycle error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
0.15, 0.18, 0.24, 0.40, 0.00 | 50.24, 50.24, 50.24, 53.10 | mean AP: 0.5095299178346822
***pedestrian error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
0.12, 0.25, 0.31, 0.21, 0.12 | 91.35, 92.33, 93.59, 95.76 | mean AP: 0.9326112947913681
***traffic_cone error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
0.06, 0.33, nan, nan, nan | 80.48, 80.51, 80.51, 80.51 | mean AP: 0.805013454499808
--------------average performance-------------
trans_err: 0.3980
scale_err: 0.4401
orient_err: 0.4530
vel_err: 0.4337
attr_err: 0.3143
mAP: 0.5563
NDS: 0.5743
数据准备
- 数据格式: OpenPCDet 支持
.npy
格式的点云数据和.txt
格式的标注文件。 - 标注格式: 标注文件每行代表一个目标框,格式如下:
x y z dx dy dz heading_angle category_name
其中,x, y, z
为目标框中心坐标,dx, dy, dz
为目标框尺寸,heading_angle
为目标框朝向角,category_name
为目标类别名称。
- 文件结构: 数据集文件应按照以下目录结构组织:
OpenPCDet
├── data
│ ├── custom
│ │ │── ImageSets
│ │ │ │── train.txt
│ │ │ │── val.txt
│ │ │── points
│ │ │ │── 000000.npy
│ │ │ │── 999999.npy
│ │ │── labels
│ │ │ │── 000000.txt
│ │ │ │── 999999.txt
├── pcdet
├── tools
ImageSets
目录包含数据集划分文件 train.txt
和 val.txt
,分别用于训练和验证。
注:如果没有数据集,那就先使用kitti数据集。
配置文件修改
- 点云特征: 修改
custom_dataset.yaml
中的POINT_FEATURE_ENCODING
参数,根据自定义数据集的点云特征进行配置。 - 点云范围和体素尺寸: 对于基于体素的检测器,如 SECOND、PV-RCNN 和 CenterPoint,需要设置点云范围和体素尺寸。通常情况下,z 轴范围和体素尺寸为 40,x 和 y 轴范围和体素尺寸为 16 的倍数。
- 类别名称和锚框尺寸: 修改
custom_dataset.yaml
中的CLASS_NAMES
、MAP_CLASS_TO_KITTI
和anchor_sizes
等参数,以匹配自定义数据集的类别名称和锚框尺寸。 - 数据增强: 修改
custom_dataset.yaml
中的PREPARE
和SAMPLE_GROUPS
等参数,进行数据增强和目标采样。
文件路径:如果想自己重新创建一个新的dataset, 那就可以仿着costom数据集合写。
如果没有就可以使用kitti数据集,
pcdet/datasets/custom/custom_dataset.py
创建数据信息文件
运行以下命令创建数据信息文件,用于训练和评估:
python -m pcdet.datasets.custom.custom_dataset create_custom_infos tools/cfgs/dataset_configs/custom_dataset.yaml
训练模型
使用修改后的配置文件,运行以下命令进行模型训练:
python train.py --cfg_file tools/cfgs/dataset_configs/custom_dataset.yaml --batch_size 4 --epochs 24
评估模型
使用训练好的模型,运行以下命令进行评估:
python test.py --cfg_file tools/cfgs/dataset_configs/custom_dataset.yaml --ckpt tools/cfgs/checkpoints/your_model.pth --eval all
结语
通过上述步骤,你不仅能成功地在OpenPCDet框架下训练和测试基于Transformer的3D物体检测模型,还能灵活地加载和处理自定义数据集。这不仅促进了模型的泛化能力,也为特定应用场景的定制化需求提供了可能。随着数据集的多样化和模型的持续优化,未来在3D感知领域的应用将更加广泛且精准。
关注我的公众号auto_drive_ai(Ai fighting), 第一时间获取更新内容。
相关文章:

使用OpenPCDet训练与测试Transformer模型:如何加载自己的数据集
引言 Transformer架构因其强大的序列处理能力和长距离依赖捕捉能力,在自然语言处理领域取得了巨大成功。近年来,这一架构也被引入3D物体检测领域,如Voxel Transformer等,显著提升了模型在复杂场景下的检测性能。OpenPCDet整合了多…...
四舍五入问题
单纯输出四舍五入可以用 printf("%.nf",num); 但是这个方法有时候会出错 代表输出n位四舍五入小数 而将数四舍五入赋值给变量可以用round()函数 a round(num); 表示将num四舍五入赋值给a 但是这么些只能转换位四舍五入的整数 可以改…...

零基础入门学用Arduino 第一部分(三)
重要的内容写在前面: 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后,整体感觉是很好的,如果有条件的可以先学习一些相关课程,学起来会更加轻松,相关课程有数字电路…...
C++标准库random
random 完整文档看这里 三步走: 选择一种随机数种子选择一个随机数引擎选择一个随机数分布输出 随机数种子 //生成随机数种子,在Linux的实现中,是读取/dev/urandom设备 std::random_device rd; unsigned seed1 rd();// 获取当前时间点作为随机数种子 unsigned seed2 std:…...

电子电气架构——车载诊断DTC一文通
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标…...

Golang | Leetcode Golang题解之第129题求根节点到叶节点数字之和
题目: 题解: type pair struct {node *TreeNodenum int }func sumNumbers(root *TreeNode) (sum int) {if root nil {return}queue : []pair{{root, root.Val}}for len(queue) > 0 {p : queue[0]queue queue[1:]left, right, num : p.node.Left, …...

工业信息化SCI期刊,中科院1区TOP,IF=12.3,收稿范围广泛
一、期刊名称 IEEE Transactions on Industrial Informatics 二、期刊简介概况 期刊类型:SCI 学科领域:工程工业 影响因子:12.3 中科院分区:1区TOP 三、期刊征稿范围 IEEE工业信息学汇刊是一本多学科期刊,发表技…...
Spring Boot整合Redis
Spring Boot整合Redis Spring Boot 整合 Redis 是一种常见的做法,用于在 Spring Boot 应用程序中添加缓存、会话管理分布式锁等功能。 浅谈Redis Redis用于存储数据,且在内存当中进行存储。 但是在日常编写代码时,定义一个变量也就是属于在内…...

kafka的leader和follower
leader和follower kafka的leader和follower是相对于分区有意义的,不是相对于broker。 因为每个分区都有leader和follower, leader负责读写数据。 follower负责复制leader的数据保存到自己的日志数据中,并在leader挂掉后重新选举出leader。 kafka会再…...
git 空仓库笔记
标识身份,建议先完成 Git 全局设置 git config --global user.name “账号” git config --global user.email “email” 方式一:克隆仓库 git clone https://url/your.git cd your_path touch README.md git add README.md git commit -m "add …...
字母异位词分组(charyw)
字母异位词分组 题目描述 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 输入格式 第一行正整数n,表示有n个字符串(1<n<1000) 第二行n个字符串,空格隔开 输出格式 多组字母…...
力扣 41.缺少的第一个正整数
题目描述: 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3 解释:范围 …...

Git从入门到放弃
由于我的Git学的不太好,所以为了能够将以后我的学习笔记能够整理的更好,我先要系统的学习一下git,文章由此产生。 文章笔记源自尚硅谷Git入门到精通全套教程视频内容 1 进入官网 学习新技术的第一步需要熟悉官网,Git也不例外。ht…...

003.数据分析_PandasSeries对象
我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…...

【介绍下什么是Kubernetes编排系统】
🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...
linux防止nmap扫描
1、首先关闭Centos7自带的firewalld [rootnode ~]# systemctl disable firewalld.service && systemctl stop firewalld.service 2、安装iptables服务 [rootnode ~]# yum install iptables-services iptables-devel -y [rootnode ~]# systemctl enable iptables …...
基于SpringBoot的装饰工程管理系统源码数据库
如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统装饰工程项目信息管理难度大,容错率低,管…...
2024前端面试准备2-JS基础知识回顾
变量类型和计算 1.值类型和引用类型的区别 常见值类型:undefined(定义undefined只能用let,不能用const)、字符串、bool、number、 Symbol; 常见引用类型: 对象, 数组、null(特殊引用类型,指针指向为空地址) 、function(特殊引用类型); 值类型的值直接存储在栈中;引用类型值存储…...
C++ 环形链表(解决约瑟夫问题)
约瑟夫问题描述: 编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。下一个人继续从 1 开始报数。n-1 轮结束以后,只剩下一个人,问最后留下的这个人编号是多少? 约瑟夫问题例子:…...

【微信小程序】模板语法
数据绑定 对应页面的 js 文件中 定义数据到 data 中: 在页面中使用 {{}} 语法直接使用: 事件绑定 事件触发 常用事件: 事件对象的属性列表(事件回调触发,会收到一个事件对象 event,它的详细属性如下&…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...