文章目录
-
- 1. 数据集介绍
- 2 数据下载及准备
-
- 2.1 下载并整理数据集
- 2.2 传感器及坐标定义
- 2.3 数据的标注
- 3 MMDet3D 中的坐标系规范
- 4 数据的处理及可视化
-
- 4.1 数据处理
- 4.2 点云读取和可视化
-
- 4.2.1 点云的读取
- 4.2.2 点云的可视化
1. 数据集介绍
KITT
I数据集是3D目标检测
中比较基础和常用的数据集,本文以KITTI数据集为例,简单的介绍下数据的标注的格式以及3D坐标系相关知识。
KITTI发布于2012年
,距今也有10多年的历史了。它是针对无人驾驶任务构建的一套数据集和评价体系,其中包括2D和3D检测等一系列具体任务。
数据通过汽车搭载的光学相机、激光雷达等传感器采集而来,具体传感器包括:1个激光雷达,一系列相机,GPS去采集位置信息
等。KITTI针对检测任务一共提供了14999
张图像及对应的点云,其中7481
组用于训练,7518
组用于测试。KITTI标注的数据只有3个
类别,分别是汽车、行人、自行车
三类物体进行标注,在一万5千张图像上标注
了80256
个物体。
官方地址:https://www.cvlibs.net/datasets/kitti/index.php
官方提供了一个视频demo,可以看到随着汽车的驾驶,它把图像数据以及对应场景的点云数据记录下来了。可以看到画面中有两条虚线,它表示前方90
度范围的视角
。视角实际上对应的就是相机能拍摄到的范围,点云即便是360度的,但它的标注也只标注了相机视角范围内
。如果标到相机以外,点云的数据和相机就对应不上,数据就没有意义,因此点云没有提供相机以外的标注。
2 数据下载及准备
2.1 下载并整理数据集
在KITI官网,点击object
标签,然后点击3d object
就会显示出下载的页面,需要注册账号进行下载。
使用mmdet
在KITTI数据集上训练,需要把下载的数据进行简单整理
,整理成上图右侧的结构形式
。
-
可以看到KITTI官网提供了很多项数据,通常我们会下载第一项
Download left color images of object data set (12 GB)
对应为左侧彩色相机拍摄的图像
,一般做视觉任务就会用这个数据。将数据下载下来,划分训练和测试,分别放在testing
和training
下面的image_2
文件夹中。 -
对于
2-4
项数据对应是别的相机采集的图像,通常我们是不用的
。 -
第五项
Download Velodyne point clouds, if you want to use laser information (29 GB)
是点云的数据
,同样数据包含训练和测试,分别放在testing
和trainning
下对应存放点云的文件夹名为velodyne
(和激光雷达传感器同名)。 -
接下来是相机的
calibration数据(
Download camera calibration matrices of object data set (16 MB)),主要包含相机的内外参以及相机和雷达间坐标系转换的矩阵,然后将数据下载下来按照测试和训练分别放在
testing和
training文件夹下的
calib`文件夹下。 -
然后还需要下载
标注
Download training labels of object data set (5 MB),标明了场景中的物体和标注框,标注框只在训练数据上用到,因此下载下来放到
training下面的
label_2`文件夹下。
由于完整的数据集比较大,这边也提供可一个mini
版的kitti
数据集, 下载地址:百度网盘,密码:9niw
, 可以看到分别有3个文件夹:ImageSets
,testing
,training
, 其中testing
包含3个文件夹:calib(标定),image_2(图像),velodyne(标注);trainning
下包含了4个文件夹:calib
(标定),image_2
(图像),velodyne
(标注)以及标注label_2
。数据集中一个文件名对应一个场景,image的文件名和label的文件名以及velodyne点云对应的文件名是一一对应的。
其中calib
中存放的是一系列相机的校准矩阵,以及不同坐标系之间的旋转平移变换矩阵。
ImageSets文件夹下包含4个文件:train.txt
,test.txt
,trainval.txt
,val.txt
是数据集划分的列表。如下图所示:
2.2 传感器及坐标定义
在3D检测任务中坐标系以及坐标系之间的关系是非常复杂的,下图是数据采集KITTI数据的采集车和车身布置的一系类传感器定义以及他们之间的位置关系。
通常我们会关注上图中两个坐标系,一个是上图中蓝色
对应的激光点云坐标系
,另一个是红色
的相机坐标系
。这两个坐标系都是三维的坐标系,从图中可以看出两个坐标系的X,Y,Z
轴的定义是不一样的。对其中蓝色的激光点云坐标系,取x,y平面与地平面平行,z轴垂直向上;对于相机坐标系,会遵循图像坐标系的习惯,以图像平面为x,y
,z
轴向前(与行驶方向一致)。从右侧可以看到,相机坐标系和激光雷达坐标系之间还存在前后0.27m
的位移,以及0.06m
水平方向的位移。如果我们希望把激光点云坐标系中的一个点转换到相机坐标系中,首先需要将x,y,z做旋转然后在平移。
除了X,Y,Z
坐标以外,3D
检测还需要针对每个物体给出它在水平方向的转角。在KITTI
数据集中转角的定义是在相机坐标系下的,当一个物体朝向X轴正半轴,我们定义此时转角为0度。当一个物体朝向相机Z轴正半轴,将其定义-90
度。为什么Z轴的正半轴定义为-90
度呢, 这个是由右手坐标系
来决定的,我们拿出右手,拇指朝向y轴正方向,4指朝向x轴,然后做一个握拳的动作,会发现4指朝向z轴的负半轴转过去。所以实际上朝着Z
轴的负半轴
转角度是增加的,是正角度
, 所以反过来z轴的正半轴对应的就是负的角度。
2.3 数据的标注
一张图片会对应一个标注文件,上图是图片以及它对应的标注。图片中有多个物体,就有多行标注。标注中一行数据对应的含义如下:
第1列
:物体的类别
type第2列
:截断程度
(truncated), 表示处于边缘目标的截断程度,取值范围为0~1,0表示没有截断,取值越大表示截断程度越大。处于边缘的目标可能只有部分出现在视野当中,这种情况被称为截断。第3列
:遮挡程度
(occlude),取值为(0,1,2,3)。0表示完全可见,1表示小部分遮挡,2表示大部分遮挡,3表示未知(遮挡过大)第4列
:观测角度
(alpha),取值范围为
(-pi, pi)`, 在相机坐标系下,以相机原点为中心,相机原点到物体中心的连线为半径,将物体绕相机y轴旋转至相机