3D目标检测实战 | 图解KITTI数据集与数据格式

news2024/10/7 1:33:50

目录

  • 1 数据集简介
  • 2 传感器坐标系
  • 3 数据集下载与组织
  • 4 数据内容说明
    • 4.1 矫正文件calib
    • 4.2 图像文件image
    • 4.3 点云文件velodyne
    • 4.4 标签文件label
    • 4.5 平面文件plane

1 数据集简介

KITTI数据集是一个广泛应用于自动驾驶和计算机视觉领域的公开数据集。该数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院共同创建,旨在提供丰富的场景和多种类型的传感器数据,包括立体摄像头、激光雷达和GPS/IMU定位。该数据集用于评测

  • 立体图像(stereo)
  • 光流(optical flow)
  • 视觉测距(visual odometry)
  • 3D物体检测(object detection)
  • 3D跟踪(tracking)

等计算机视觉技术在车载环境下的性能。KITTI包含市区、乡村和高速公路等场景采集的真实图像数据

3D目标检测旨在从传感器数据中准确地定位和识别三维空间中的物体。KITTI数据集针对3D目标检测任务提供了14999张图像以及对应的点云,其中7481组用于训练,7518组用于测试,针对场景中的汽车、行人、自行车三类物体进行标注,共计80256个标记对象。

KITTI数据集的广泛使用推动了3D目标检测算法的发展,为自动驾驶技术的进步做出了重要贡献。同时,这个数据集也成为了研究人员之间共享和比较算法性能的标准基准,促进了该领域的研究和创新。

2 传感器坐标系

KITTI数据集使用的数据采集车如下所示,该图展示了传感器传感器之间的变换,以及车体在地面上方的高度

在这里插入图片描述

其中的传感器配置为

  • 2个一百四十万像素的PointGray Flea2灰度相机
  • 2个一百四十万像素的PointGray Flea2彩色相机
  • 1个64线的Velodyne激光雷达,10Hz,角分辨率为0.09度,每秒约一百三十万个点,水平视场360°,垂直视场26.8°,至多120米的距离范围
  • 4个Edmund的光学镜片,水平视角约为90°,垂直视角约为35°
  • 1个OXTS RT 3003的惯性导航系统(GPS/IMU),6轴,100Hz,分别率为0.02米,0.1°

主要传感器的坐标系定义如下所示,后续进行数据可视化时,需要根据车体信息和坐标系定义进行数据转换

在这里插入图片描述

3 数据集下载与组织

主要下载资源如下

  • KITTI官网:3D目标检测
  • AVOD:道路平面信息

在这里插入图片描述

下载完成主要的数据集后,可以按训练集和测试集组织为如下格式

.data
└── kitti
    ├── test
    │   ├── calib
    │   ├── image_2
    │   └── velodyne
    └── train
        ├── calib
        ├── image_2
        ├── label_2
        ├── planes
        └── velodyne

4 数据内容说明

4.1 矫正文件calib

calib是相机、雷达、惯导等传感器的矫正数据或变换关系,以train/calib/000000.txt文件为例

P0: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 0.000000000000e+00 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00
P1: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 -3.875744000000e+02 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00
P2: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 4.485728000000e+01 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 2.163791000000e-01 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 2.745884000000e-03
P3: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 -3.395242000000e+02 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 2.199936000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 2.729905000000e-03
R0_rect: 9.999239000000e-01 9.837760000000e-03 -7.445048000000e-03 -9.869795000000e-03 9.999421000000e-01 -4.278459000000e-03 7.402527000000e-03 4.351614000000e-03 9.999631000000e-01
Tr_velo_to_cam: 7.533745000000e-03 -9.999714000000e-01 -6.166020000000e-04 -4.069766000000e-03 1.480249000000e-02 7.280733000000e-04 -9.998902000000e-01 -7.631618000000e-02 9.998621000000e-01 7.523790000000e-03 1.480755000000e-02 -2.717806000000e-01
Tr_imu_to_velo: 9.999976000000e-01 7.553071000000e-04 -2.035826000000e-03 -8.086759000000e-01 -7.854027000000e-04 9.998898000000e-01 -1.482298000000e-02 3.195559000000e-01 2.024406000000e-03 1.482454000000e-02 9.998881000000e-01 -7.997231000000e-01

其中数据的含义是:

  • P 0 P_0 P0- P 4 P_4 P4:相机内参矩阵 R 3 × 4 \mathbb{R} ^{3\times 4} R3×4
    P i = [ f u i 0 c u i − f u i b i 0 f v i c v i 0 0 0 1 0 ] P_i=\left[ \begin{matrix} f_{u}^{i}& 0& c_{u}^{i}& -f_{u}^{i}b_i\\ 0& f_{v}^{i}& c_{v}^{i}& 0\\ 0& 0& 1& 0\\ \end{matrix} \right] Pi= fui000fvi0cuicvi1fuibi00
    其中参数 c u c_u cu c v c_v cv用于中心映射——将光轴与归一化成像面的交点,即成像面中心点映射到像素平面中心,其取决于拜耳阵列与光轴如何对齐。参数 f u f_u fu f v f_v fv用于归一化——将矩形的传感器阵列映射为正方形, b i b_i bi是第 i i i个相机沿 x x x方向距离0号相机的位移。序号含义如下
序号相机
0左边灰度相机
1右边灰度相机
2左边彩色相机
3右边彩色相机
  • R 0 r e c t R^{rect}_0 R0rect:立体矫正矩阵 R 3 × 3 \mathbb{R} ^{3\times 3} R3×3,在实际计算时在第四行和第四列添加全为0的向量,扩展为4x4的矩阵。 R 0 r e c t R^{rect}_0 R0rect用于立体视觉中使相机图像共面,详见计算机视觉教程6-1:图解双目视觉系统与立体校正原理
    在这里插入图片描述
  • T r v e l o _ t o _ c a m Tr_{\mathrm{velo\_to\_cam}} Trvelo_to_cam:从雷达到0号相机的旋转平移矩阵 R 3 × 4 \mathbb{R} ^{3\times 4} R3×4,在实际计算时,需要添加一行 [ 0 , 0 , 0 , 1 ] [0,0,0,1] [0,0,0,1]齐次化为 R 4 × 4 \mathbb{R} ^{4\times 4} R4×4的矩阵
  • T r i m u _ t o _ v e l o Tr_{\mathrm{imu\_to\_velo}} Trimu_to_velo:从惯导或GPS装置到0号相机的旋转平移矩阵 R 3 × 4 \mathbb{R} ^{3\times 4} R3×4,在实际计算时,需要添加一行 [ 0 , 0 , 0 , 1 ] [0,0,0,1] [0,0,0,1]齐次化为 R 4 × 4 \mathbb{R} ^{4\times 4} R4×4的矩阵

利用上述矩阵可以将不同坐标系的数据相互转换,例如将雷达坐标系的点 x x x映射到左侧彩色相机可以使用

y = P 2 ⋅ R 0 r e c t ⋅ T r v e l o _ t o _ c a m ⋅ x y=P_2\cdot R^{rect}_0 \cdot Tr_{\mathrm{velo\_to\_cam}} \cdot x y=P2R0rectTrvelo_to_camx

即先将 x x x转换到0号相机,再进行0号相机立体矫正,最后投影到2号相机,即左侧彩色相机

4.2 图像文件image

image是以8位PNG格式存储的图像文件,以train/image_2/000000.png为例

在这里插入图片描述

4.3 点云文件velodyne

velodyne是以浮点二进制格式存储的激光雷达点云文件,每行包含8个浮点数数据,其中每个浮点数数据由四位十六进制数表示且通过空格隔开。一个点云数据由4个浮点数数据构成,分别表示点云的 x x x y y y z z z r r r(其中 x x x y y y z z z表示点云的三维坐标, r r r表示反射强度),以train/velodyne/000000.bin为例

8D97 9241 39B4 483D | 5839 543F 0000 0000 
83C0 9241 8716 D93D | 5839 543F 0000 0000
2D32 4D42 AE47 013F | FED4 F83F 0000 0000
3789 9241 D34D 623E | 5839 543F 0000 0000
E5D0 9241 1283 803E | E17A 543F EC51 B83D
...

4.4 标签文件label

label是标签文件,以train/label_2/000000.txt为例

Pedestrian 0.00 0 -0.20 712.40 143.00 810.73 307.92 1.89 0.48 1.20 1.84 1.47 8.41 0.01

训练数据共15列,每列的含义如下

  • 第1列 字符串:代表物体类别,总共有9类,分别是CarVanTruckPedestrianPerson_sittingCyclistTramMiscDontCare。其中DontCare表示该区域没有被标注,比如由于目标物体距离激光雷达太远。为了防止在评估过程中(主要是计算精确度precision),将本来是目标物体但因某些原因而没有标注的区域统计为假阳性,评估脚本会自动忽略DontCare区域的预测结果
  • 第2列 浮点数:代表物体是否被截断(truncated),数值在0(非截断)到1(截断)间浮动,数字表示指离开图像边界的程度
  • 第3列 整数:代表物体是否被遮挡(occluded),离散值0、1、2、3分别表示被遮挡的程度
  • 第4列 弧度:物体的观察角度(alpha),取值范围为 [ − π , π ] [-\pi, \pi ] [π,π],它表示在相机坐标系下,以相机原点为中心,相机原点到物体中心的连线为半径,将物体绕相机 y y y轴旋转至相机 z z z轴,此时物体方向与相机 x x x轴的夹角

在这里插入图片描述

  • 第5~8列 浮点数:物体的2D边界框大小(bbox),四个数分别是xmin、ymin、xmax、ymax(单位:pixel),表示2D边界框的左上角和右下角的坐标
  • 第9~11列 浮点数: 3D物体的尺寸(dimensions),三个数分别是高、宽、长(单位:米)
  • 第12-14列 浮点数: 3D物体在相机坐标系下的位置(location),三个数分别是 x x x y y y z z z(单位:米),特别注意的是,这里的xyz是在相机坐标系下3D物体的中心点位置,这里中心点位于底面中心
  • 第15列 弧度:3D物体的方向角(rotation_y),取值范围为 [ − π , π ] [-\pi, \pi ] [π,π],它表示在相机坐标系下,物体的全局方向角,也就是物体前进方向与相机坐标系x轴的夹角
  • 第16列 浮点数:目标检测的置信度(score),只在测试集中有

4.5 平面文件plane

planes是由AVOD生成的道路平面信息,其在训练过程中作为一个可选项,用来提高模型的性能,例如限制物体在道路平面上。以train/planes/000000.txt文件为例

# Matrix
WIDTH 4
HEIGHT 1
-7.051729e-03 -9.997791e-01 -1.980151e-02 1.680367e+00 

四个系数代表了平面方程系数 A A A B B B C C C D D D,即

A x + B y + C z + D = 0 Ax+By+Cz+D=0 Ax+By+Cz+D=0


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

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

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

相关文章

shell脚本自动化执行jar包

需要用shell脚本来自动化执行jar包,以后可以用jenkins来CI/CD,记录一下对应实现。 实现需求 以命令行执行shell传入的第一个参数为jar名进行执行。对应jar已存在执行进程,关闭对应进程后再执行。以后台方式执行对应的jar包,输出…

pymysql执行非查询语句会自动提交事务,关闭事务自动提交

一、前置条件 在mysql数据库生成数据: CREATE DATABASE mydatabase;CREATE TABLE Course (CourseID INT PRIMARY KEY,CourseName VARCHAR(100),Instructor VARCHAR(100),Credits INT,StudentID INT,FOREIGN KEY (StudentID) REFERENCES StudentInformation(Studen…

基于微信小程序四六级助手系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言用户微信小程序端的主要功能有:管理员的主要功能有:具体实现截图为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考论文参考源码获取 前言 💗博主介绍:✌全网粉丝10W…

【C++prime plus中文第六版勘误记录】

P219-P220 这里对未进行初始化的指针pt进行了解引用的操作,这是不合理的,此问题在 stack overflow上也有人提出疑问,下面是问题与解答:

基于微信小程序的校园维修平台设计与实现(源码+lw+部署文档+讲解等

文章目录 前言学生微信小程序端的主要功能有:维修员微信小程序的主要功能有:管理员的主要功能有:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取…

Android 实现椭圆形中心发散渐变绘制

1. 前言 工作中有一个需求,需要实现一个椭圆形的中心发散渐变效果,并且可以自由指定椭圆比例,旋转角度等。 Android中实现椭圆形的绘制很简单,只需要调用canvas.drawOval()就可以了,圆形的中心发散渐变可以使用RadialGradient,但是椭圆形的中心发散渐变效果Android自带的…

Leetcode算法入门与数组丨6. 数组双指针、滑动窗口

文章目录 1 双指针基础知识1.1 双指针简介1.2 左右指针(对撞指针)1.3 快慢指针1.4 分离双指针 2 滑动窗口基础知识2.1 滑动窗口算法介绍2.2 滑动窗口适用范围2.3 固定长度滑动窗口2.4 不固定长度滑动窗口 1 双指针基础知识 1.1 双指针简介 双指针&…

LeetCode算法心得——美丽塔 I(HashMap)

大家好,我是晴天学长,hashmap的灵活应用,然后边界的细节处理,需要的小伙伴可以关注支持一下哦!后续会继续更新的。 1) .美丽塔 美丽塔 I 给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。 你的任务是在坐标轴…

SpringBoot项目(百度AI整合)——如何在Springboot中使用文字识别OCR入门

前言 前言:本系列博客尝试结合官网案例,阐述百度 AI 开放平台里的组件使用方式,核心是如何在spring项目中快速上手应用。 本文介绍如何在Springboot中使用百度AI的文字识别OCR 其他相关的使用百度AI的文章列表如下: 如何在Spri…

【SpringBoot】-SpringBoot配置文件

作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【Framework】 主要内容:.properties 配置文件和 .yml 配置文件中 配置信息的设置和获取。关于IDEA乱码的解决。.yml 配置文件的 方式语法分析和演示。 .yml配置文件 …

芯片验证就是一次旅行

如果你国庆希望去一个你不曾去过的城市旅行,比如“中国苏州”。对游客来说,它是个蛮大的城市,有许多景点可以游玩,还有许多事情可以做。但实际上,即使最豪也最清闲的游客也很难看苏州的所有方方面面。同样的道理也适用…

第 4 章 串(文本行编辑实现)

1. 背景说明 该文本编辑器利用串的堆实现,其中对串的原始存储方式基本不作修改(有部分修改之处),优化之处在于在串的末尾加上了一个空字符,目的是区分字符串结尾,便于将串保存在文件中,且该优化…

JavaScript入门——(2)基础语法(上)

一、JavaScript介绍 1.1 JavaScript是什么 1.1.1 JavaScript是什么? JavaScript是一种运行在客户端(浏览器)的编程语言,实现人机交互效果。 注意:HTML和CSS是标记语言。 1.1.2 作用(做什么&#xff1f…

8月最新修正版风车IM即时聊天通讯源码+搭建教程

8月最新修正版风车IM即时聊天通讯源码搭建教程。风车 IM没啥好说的很多人在找,IM的天花板了,知道的在找的都知道它的价值,开版好像就要29999,后端加密已解,可自己再加密,可反编译出后端项目源码,已增加启动后端需要google auth双重验证,pc端 web端 wap端 android端 ios端 都有 …

小米机型解锁bl 跳“168小时”限制 操作步骤分析

写到前面的安全提示 了解解锁bl后的风险: 解锁设备后将允许修改系统重要组件,并有可能在一定程度上导致设备受损;解锁后设备安全性将失去保证,易受恶意软件攻击,从而导致个人隐私数据泄露;解锁后部分对系…

老胡的周刊(第109期)

老胡的信息周刊[1],记录这周我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 🎯 项目 lobe-chat[2] LobeChat 是一个开源的、可扩展…

面试题:说说Java并发运行中的一些安全问题

文章目录 1.什么是多线程并发运行安全问题?2.用synchronized修饰的方法3.同步块4.使用Synchronized修饰静态方法5.互斥锁6.死锁现象7.wait()和sleep()的区别 1.什么是多线程并发运行安全问题? 当多个线程并发操作一个数据时,由于线程操作的时…

在Linux上安装Percona Toolkit工具

安装步骤 1. 下载安装包 下载地址:https://www.percona.com/software/database-tools/percona-toolkit 2.上传并解压 上传tar包到服务器,并通过tar -zxvf 文件名.tar.gz解压。工具在bin文件夹中,这个是免安装的。 3. 配置环境变量 配置…

安装OpenSearch

title: “安装opensearch” createTime: 2021-11-30T19:13:4508:00 updateTime: 2021-11-30T19:13:4508:00 draft: false author: “name” tags: [“es”,“安装”] categories: [“OpenSearch”] description: “测试的” 说明 基于Elasticsearch7.10.2 的 opensearch-1.1.…

gRPC之实现TLS通信加密_已设置图床

gRPC之实现TLS通信加密 "crypto/tls"包 “crypto/tls” 是 Go 编程语言中的一个包,用于实现 TLS(传输层安全)协议。TLS 协议用于加密和保护网络通信,通常用于保护敏感数据的传输,如密码、支付信息等。在 G…