KITTI 的物体检测基准的 readme

本文档详细介绍了KITTI基准,包括2D和3D物体检测、方向估计、鸟瞰视图基准,涵盖数据格式、评估协议等关键信息,旨在促进自动驾驶领域的物体检测算法发展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

翻译成中文方便查阅。

0. 介绍

此文件描述了KITTI 2D物体检测,方向估计基准,3D物体检测基准和鸟瞰视图基准。
基准包括每项任务的7481个训练图像(和点云)和7518个测试图像(和点云)。
尽管我们已经标记了8个不同的类,但在我们的基准测试中只评估了 CarPedestrian 类,因为只有那些类已经标记了足够的全面评估实例。标记过程分两步进行:首先,我们使用了一组注释器,在点云中标记3D边界框轨迹。由于对于行人轨迹,单个3D边界框轨迹(尺寸已经固定)通常非常合适,我们还通过使用Mechanical Turk标记每个对象的左/右边界。我们还收集了对象遮挡状态的标签,并通过将汽车/行人模型反投影到图像平面来计算对象的截断。

注意:当提交结果时,请将它们存储为和GT数据相同的数据格式(见下文),使用文件名称 000000.txt 000001.txt ...,创建一个ZIP存档并存储您的测试集结果在其根文件夹中。

注意2:如果您打算在训练集上自行评估结果,请仔细阅读本文件最后的内容。

注意3:当提交3D物体检测基准或鸟瞰视图基准(2017年)时,请仔细阅读以下说明。特别是,请务必始终提交2D边界框和3D边界框以及过滤器框,这些框在图像平面上不可见。

1. 数据格式

可以在相应的文件夹中找到用于训练和测试的数据。子文件夹的结构如下:

  • image_02/ 包含左边彩色相机图像(.png))。
  • label_02 包含左边彩色相机标签文件(.txt)。
  • calib/ 包含所以4个相机的校准文件(.txt)。

label 文件包含以下信息,可以使用此devkit中提供的matlab工具(readLabels.mwriteLabels.m)读取和写入。

所有值(数字或字符串)通过空格分隔,每行对应一个对象。 总共15列,含义如下:

ValuesNameDescription
1type对象的类别。‘Car’, ‘Van’, ‘Truck’,‘Pedestrian’, ‘Person_sitting’, ‘Cyclist’, ‘Tram’, ‘Misc’ ,‘DontCare’
1truncated0(无截断)到 1(完全截断)之间的浮点数,截断是指对象超出图像边界
1occluded(0,1,2,3) 表示遮挡的程度:0=完全可见,1=部分遮挡,2=大面积遮挡,3=未知
1alpha物体的观察角度,范围 [-pi, pi]
4bbox图像中对象的2D边界框(基于0的索引):包含左,上,右,下像素坐标
3dimensions3D对象尺寸:高度,宽度,长度(以米为单位)
3location相机坐标中的3D物体位置 x, y, z(以米为单位)
1rotation_y在相机坐标中围绕Y轴旋转的角度,范围 [-pi, pi]
1score只有测试集的结果才包含这个字段:浮点数,表明 p/r 曲线所需的检测可信度,越高越好。

这里,DontCare 标签表示物体未被标记的区域,例如因为它们离激光扫描仪太远。为防止此类对象被视为误报,我们的评估脚本将忽略在测试集的 DntCare 区域中检测到的对象。如果您将训练图像中的非对象区域视为反面示例,则可以使用训练集中的 DntCare 标签来避免对象检测器从这些区域收集困难样本。

可以使用校准文件夹中的 3x4 投影矩阵将摄像机坐标系中的坐标投影到图像中,对于要为其提供图像的左侧彩色摄像机,必须使用 P2。rotation_yalpha 之间的区别在于,rotation_y 直接在摄像机坐标中给出,而 alpha 也考虑从摄像机中心到对象中心的矢量,以计算对象相对于摄像机的相对方向。例如,面向相机坐标系的X轴的汽车对应于 rotation_y = 0,无论它位于 X / Z 平面的哪个位置(鸟瞰图),当此对象位于摄像机的Z轴上时,alpha 才为零。当车辆远离Z轴移动时,观察角度将改变。

要将一个点从Velodyne坐标投影到左侧彩色图像,您可以使用以下公式:

x = P 2 ∗ R 0 _ r e c t ∗ T r _ v e l o _ t o _ c a m ∗ y x = P2 * R0\_rect * Tr\_velo\_to\_cam * y x=P2R0_rectTr_velo_to_camy

对于右侧的彩色图像:

x = P 3 ∗ R 0 _ r e c t ∗ T r _ v e l o _ t o _ c a m ∗ y x = P3 * R0\_rect * Tr\_velo\_to\_cam * y x=P3R0_rectTr_velo_to_camy

注意:所有矩阵都存储为行主序,即第一个值对应于第一行。R0_rect 包含一个3x3矩阵,你需要通过在右下角添加 1 和在其他地方添加 0 来扩展到4x4矩阵。Tr_xxx 是一个3x4矩阵 (R | t),您需要以相同的方式扩展到4x4矩阵!

请注意,虽然所有这些信息都可用于训练数据,但只有特定基准所需的数据才能提供给评估服务器。但是,必须始终提供所有15个值,未使用的值设置为 writeLabels.m 中指定的默认值(=invaild)。另外,必须为特定检测提供第16个值,浮点数,值更高表示检测的置信度更高。您的分数范围将由我们的评估服务器自动确定,您不必将其标准化,但它应该是大致线性的。如果使用 writeLabels.m 来编写结果,则此函数将负责正确存储所有必需的数据。

2. 2D物体检测基准

2D物体检测任务的目标是为 CarPedestrianCyclist 训练物体探测器。物体检测器必须使用上面指定的格式提供图像中的2D边界框(0-based)作为输出,以及指示检测的置信度的检测分数。必须将所有其他值设置为其默认值(=invalid),请参见上文。每个图像一个文本文件,存在一个zip存档中,其中每个文件可以包含许多检测,具体取决于每个图像的对象数。在我们的评估中,我们仅评估图像中大于25像素(高度)的检测/对象,而且不将 Van 视为 Car 的误报或者 将Sitting Person 视为 Pedestrain 的误报,因为他们在外观上很相似(这句翻译有点乱,大家随便看看)。作为评估标准,我们遵循PASCAL并要求边界框的IoU大于50%,以便正确检测对象。

3. 物体方向估计基准

此基准与前一个基准相似,不同之处在于您必须为每次检测另外提供最可能的相对物体观察角度(= alpha)。如我们的论文所述,我们的评分在此同时考虑了算法的检测性能以及方向估计性能。

4. 3D物体检测基准

3D物体检测任务的目标是为 CarPedestrianCyclist 训练物体探测器。物体检测器必须同时提供图像中的2D边界框(0-based)以及3D边界框(以上面指定的格式,即3D尺寸和3D位置)和检测分数/置信度。请注意,2D边界框应对应于3D边界框的投影 ——这是过滤大于25像素(高度)的对象所必需的。我们还注意到并非点云中的所有对象都已被标记。为避免误报,应过滤图像平面上不可见的检测(评估不会处理此问题,请参阅 cpp / evaluate_object.cpp)。与2D物体检测基准相似,我们不将 Van 视为 Car 的误报或者 将Sitting Person 视为 Pedestrain 的误报。评估标准遵循2D对象检测基准(使用3D边界框重叠)。

5. 鸟瞰视图基准

鸟瞰视图检测任务的目标是为 CarPedestrianCyclist 训练物体探测器,探测器必须同时提供图像的2D边界框(0-based)以及鸟瞰图中的3D边界框和检测得分/置信度。这意味着3D边界框不必包括关于高度轴的信息,即边界框的高度和沿高度轴的边界框位置。例如,当仅评估鸟瞰图基准(没有3D物体检测基准)时,可以将边界框的高度设置为等于或小于零的值。类似地,边界框的y轴位置可以设置为-1000(请注意,任意负值都不起作用)。如上所述,我们注意到2D边界框需要过滤大于25像素(高度)的对象,并且为了避免误报,应该过滤在图像平面上看不到的检测。与所有基准一样,我们不将 Van 视为 Car 的误报或者 将Sitting Person 视为 Pedestrain 的误报。评估标准遵循上述基准,使用鸟瞰视图边界框重叠。

*6. 映射到原始数据

请注意,此部分是基准测试的附加部分,并不是解决对象检测任务所必需的。

为了允许使用激光点云,gps数据,右摄像机图像和TRAINING数据的灰度图像,我们提供了训练集到KITTI数据集的原始数据的映射。

此信息保存在 mapping/train_mapping.txttrain_rand.txt 中:

train_rand.txt:随机排列,为来自对象检测训练集的每个图像分配唯一索引。该索引是 1-based 的。

train_mapping.txt:将每个唯一索引(= 1-based 的行号)映射到KITTI原始数据集文件的zip文件。请注意,这些文件在网站上分为几个类别!

7. 评估协议

为了透明化,我们在本开发工具包的子文件夹 cpp 中包含了KITTI评估代码。它可以通过以下方式编译:

g++ -O3 -DNDEBUG -o evaluate_object evaluate_object.cpp

或使用 CMake 和提供的 CMakeLists.txt

重要的提示:
此代码将生成41个值(41个调用离散化步骤)。但是,请注意,为了计算平均精度,我们遵循PASCAL协议并通过累加10%的召回步骤进行平均。用于计算平均精度或方向相似度的伪代码如下:

sum = 0;
for (i=0; i<=40; i+=4)
  sum += vals[i];
average = sum/11.0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值