KITTI(基于MMdet3D)
1、简介
KITTI数据集针对3D目标检测任务提供了14999张图像以及对应的点云,其中7481组用于训练,7518组用于测试,针对场景中的汽车、行人、自行车三类物体进行标注,共计80256个标记对象。
2、采集设备
车辆装配有2个灰度摄像机,2个彩色摄像机,一个Velodyne 64线3D激光雷达,4个光学镜头,以及1个GPS导航系统,在上图中使用了红色标记。
- 4个Edmund的光学镜片,水平视角约为90°,垂直视角约为35°
- 2个一百四十万像素的PointGray Flea2灰度相机
- 2个一百四十万像素的PointGray Flea2彩色相机
- 1个64线的Velodyne激光雷达,10Hz,角分辨率为0.09度,每秒约一百三十万个点,水平视场360°,垂直视场26.8°,至多120米的距离范围。
- 1个OXTS RT 3003的惯性导航系统(GPS/IMU),6轴,100Hz,分别率为0.02米,0.1°
注意:双目相机之间的距离为0.54米,点云到相机之间的距离为0.27米,在上图中使用了蓝色标记

3、kitti数据集结构
# 官方可下载
data_object_calib.zip : # 相机和激光雷达标定参数
data_object_image_2.zip : # 左侧彩色相机图像(.png)
data_object_label_2.zip : # 3D物体标注信息(核心文件)
data_object_prev_3.zip # 前一帧的右侧图像
devkit_object.zip : # 开发工具包和评估代码
data_object_det_2.zip :# 2D检测结果(可选)预计算的2D检测结果,用于某些方法的输入
data_object_image_3.zip :# 右侧彩色相机图像
data_object_prev_2.zip # 前一帧的左侧图像
data_object_velodyne.zip :# 激光雷达点云数据(核心文件)
models_lsvm.zip # 可能是一些预训练模型
ImageSets # 存放kitti数据集train、val、test三步数据划分文档(用于数据处理划分数据,这部分需要单独下载)
# KITTI标签文件中的一行(如000001.txt)
# 格式: 类别 截断 遮挡 alpha 2D框[x1,y1,x2,y2] 3D尺寸[h,w,l] 3D位置[x,y,z] 旋转角ry
"Car 0.00 0 -1.57 587.18 173.33 614.67 200.12 1.65 1.67 3.64 1.84 1.47 8.41 0.27"
# 对应到数据结构的标签
gt_label = {
'type': 'Car', # 类别
'truncated': 0.00, # 截断程度
'occluded': 0, # 遮挡程度
'alpha': -1.57, # 观察角度
'bbox': [587.18, 173.33, 614.67, 200.12], # 2D边界框(图像)
'dimensions': [1.65, 1.67, 3.64], # 3D尺寸 [h, w, l] (相机坐标系)
'location': [1.84, 1.47, 8.41], # 3D位置 [x, y, z] (相机坐标系)
'rotation_y': 0.27 # 偏航角 (相机坐标系)
}
# 数据集类别:’Car’, ’Van’, ’Truck’, ’Pedestrian’, ’Person (sit- ting)’, ’Cyclist’, ’Tram’ 和’Misc’ (e.g., Trailers, Segways)。
# centerpoint训练
# 1、从KITTI标签文件中地区标注信息,包括:相机坐标系下的3D框尺寸、位置和旋转角度
# 2、使用校准矩阵将相机坐标系下的3D框转换到激光雷达坐标系
# 3、注意:在KITTI数据集中,相机坐标系的定义是3d框信息:x: 向右,y: 向下,z: 向前;而激光雷达坐标系的定义是:x: 向前,y: 向左,z: 向上
# 回归目标:对于每个正样本(即热图中高斯峰值处的点),我们计算以下回归目标:
# 1、中心点偏移:由于BEV特征图有下采样,所以需要计算从特征图网格中心到真实中心点的偏移(在BEV平面上,以网格大小为单位)。
# 2、高度:目标中心在激光雷达坐标系下的z坐标(绝对高度)。
# 3、尺寸:目标在激光雷达坐标系下的长、宽、高(l, w, h)。
# 4、旋转:目标在激光雷达坐标系下的偏航角(绕z轴旋转),通常编码为sin和cos。
# Imageets划分文件下载
cd ./data/kitti
mkdir ImageSets
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/test.txt --no-check-certificate --content-disposition -O ./test.txt
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/train.txt --no-check-certificate --content-disposition -O ./train.txt
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/val.txt --no-check-certificate --content-disposition -O ./val.txt
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/trainval.txt --no-check-certificate --content-disposition -O ./trainval.txt
4、开发工具
object_detection任务的文件夹devkit_object为例,其主要由cpp文件夹,matlab文件夹,mapping文件夹和readme.txt组成。
- cpp文件夹:主要包含评估模型的源代码
evaluate_object.cpp。 - mapping文件夹:记录训练集到原始数据集的映射,从而开发者能够同时使用激光雷达点云,gps数据,右边彩色摄像机数据以及灰度摄像机图像等多模态数据。
- matlab文件夹:包含读写标签,绘制2D/3D标注框,运行demo等工具。
- readme.txt文件非常重要,详述介绍了某个子数据集的数据格式,benchmark介绍,结果评估方法等详细内容。
devkit_object
|── cpp
│ |── evaluate_object.cpp
│ └── mail.h
|── mapping
│ |── train_mapping.txt
│ └── train_rand.txt
|── matlab
│ |── computeBox3D.m
│ |── computeOrientation3D.m
│ |── drawBox2D.m
│ |── drawBox3D.m
│ |── projectToImage.m
│ |── readCalibration.m
│ |── readLabels.m
│ |── run_demo.m
│ |── run_readWriteDemo.m
│ |── run_statistics.m
│ |── visualization.m
│ └── writeLabels.m
5、数据集评价指标
数据集评价指标实际含义就是模型评估(即:recall、AP、mAP),该参数主要是用来将模型预测结果与标签数据进行比对来判断当前模型性能。
注:这里千万要与模型训练阶段的损失函数区分开,(很多刚学习深度学习的小伙伴会看到与标签数据对比就会想到损失函数,反向传播,这里不牵扯这些)该过程不参与训练只做模型评估,并且该评估只在val数据集上进行评估。
5.1、指标介绍
在此之前先了解几个指标名词:
-
IOU(交并比):用于衡量预测边界与真实边界框之间的重叠程度。计算公式:
IoU = 交集面积/并集面积 -
TP(真正例):预测框与真实框的IoU大于阈值 and (且)预测的类别正确(如IoU > 0.5),每个真实框最多只能匹配一个预测框(通常选择IoU最大且超过阈值,或者置信度最高的那个)。
-
FP(假正例):预测框与真实框的IoU小于等于阈值 or (或)预测框与真实框的IoU大于阈值但是类别预测错误 or (或)同一个真实框被多个预测框匹配(通常只匹配一个,其余为FP),三种情况说明如下:(假设我们设定阈值为0.5。)
-
1、预测框与真实框的IoU小于等于阈值 :
真实框:表示一辆汽车,坐标为[10,10,50,50](左上角[10,10],右下角[50,50])
预测框:也表示一辆车,坐标[60,60,100,100]
计算IoU:这两个框没有重叠,IoU=0,小于0.5
因此,这个预测框是FP
-
2、预测框与真实框的IoU大于阈值但是类别预测错误
真实框:一辆车,坐标为[10,10,50,50]。
预测框:预测为行人,坐标为[12,12,52,52]。
计算IoU:假设IoU=0.6,大于0.5,但是类别错误(真实是车,预测是行人)。
因此,这个预测框是FP。 -
3、同一个真实框被多个预测框匹配(通常只匹配一个,其余为FP)
真实框:一辆车,坐标为[10,10,50,50]。
模型预测出了两个框:
预测框1:车,坐标为[12,12,52,52],置信度0.9。
预测框2:车,坐标为[11,11,51,51],置信度0.8。
两个预测框与真实框的IoU都大于0.5,且类别正确。首先,预测框1(置信度0.9)与真实框匹配,成为TP。
然后,预测框2(置信度0.8)也与同一个真实框匹配,但是该真实框已经被预测框1匹配了,因此预测框2被视为FP(重复检测)。
-
-
FN(假负例):真实框没有被任何预测框匹配到(即漏检)
-
精确率(Precision):
P = TP / (TP + FP),关注的是模型预测出的目标中,有多少是真正正确的。它衡量的是模型的"准不准"。 -
召回率(Recall):
R = TP / (TP + FN),关注的是所有真实目标中,有多少被模型预测正确了。它衡量的是模型的"全不全"。 -
AP:AP是Precision-Recall曲线下面积,在目标检测中,我们通常通过在不同置信度阈值下计算精确率和召回率,然后绘制P-R曲线,并计算曲线下的面积来得到AP。
-
mAP:预知后事如何,请听下回分解!
&spm=1001.2101.3001.5002&articleId=155190331&d=1&t=3&u=a9c6eefab8f1432d8d583ae66deea1ee)
1387

被折叠的 条评论
为什么被折叠?



