Shortcuts

在自定义数据集上进行训练

本文将主要介绍如何使用自定义数据集来进行模型的训练和测试,以 Waymo 数据集作为示例来说明整个流程。

基本步骤如下所示:

  1. 准备自定义数据集;

  2. 准备配置文件;

  3. 在自定义数据集上进行模型的训练、测试和推理。

准备自定义数据集

在 MMDetection3D 中有三种方式来自定义一个新的数据集:

  1. 将新数据集的数据格式重新组织成已支持的数据集格式;

  2. 将新数据集的数据格式重新组织成已支持的一种中间格式;

  3. 从头开始创建一个新的数据集。

由于前两种方式比第三种方式更加容易,我们更加建议采用前两种方式来自定义数据集。

在本文中,我们给出示例将数据转换成 KITTI 数据集的数据格式,你可以参考此处将你的数据集重新组织成 KITTI 格式。关于标准格式的数据集,你可以参考自定义数据集文档

注意:考虑到 Waymo 数据集的格式与现有的其他数据集的格式的差别较大,因此本文以该数据集为例来讲解如何自定义数据集,从而方便理解数据集自定义的过程。若需要创建的新数据集与现有的数据集的组织格式较为相似,如 Lyft 数据集和 nuScenes 数据集,采用对数据集的中间格式进行转换的方式(第二种方式)相比于采用对数据格式进行转换的方式(第一种方式)会更加简单易行。

KITTI 数据集格式

应用于 3D 目标检测的 KITTI 原始数据集的组织方式通常如下所示,其中 ImageSets 包含数据集划分文件,用以划分训练集/验证集/测试集,calib 包含对于每个数据样本的标定信息,image_2velodyne 分别包含图像数据和点云数据,label_2 包含与 3D 目标检测相关的标注文件。

mmdetection3d
├── mmdet3d
├── tools
├── configs
├── data
│   ├── kitti
│   │   ├── ImageSets
│   │   ├── testing
│   │   │   ├── calib
│   │   │   ├── image_2
│   │   │   ├── velodyne
│   │   ├── training
│   │   │   ├── calib
│   │   │   ├── image_2
│   │   │   ├── label_2
│   │   │   ├── velodyne

KITTI 官方提供的目标检测开发工具包详细描述了 KITTI 数据集的标注格式,例如,KITTI 标注格式包含了以下的标注信息:

#  值    名称      描述
----------------------------------------------------------------------------
   1    类型      描述检测目标的类型:'Car','Van','Truck',
                  'Pedestrian','Person_sitting','Cyclist','Tram',
                  'Misc' 或 'DontCare'
   1    截断程度  从 0(非截断)到 1(截断)的浮点数,其中截断指的是离开检测图像边界的检测目标
   1    遮挡程度  用来表示遮挡状态的四种整数(0,1,2,3):
                  0 = 可见,1 = 部分遮挡
                  2 = 大面积遮挡,3 = 未知
   1    观测角    观测目标的角度,取值范围为 [-pi..pi]
   4    标注框    检测目标在图像中的二维标注框(以0为初始下标):包括每个检测目标的左上角和右下角的坐标
   3    维度     检测目标的三维维度:高度、宽度、长度(以米为单位)
   3    位置     相机坐标系下的三维位置 x,y,z(以米为单位)
   1    y 旋转   相机坐标系下检测目标绕着Y轴的旋转角,取值范围为 [-pi..pi]
   1    得分     仅在计算结果时使用,检测中表示置信度的浮点数,用于生成 p/r 曲线,在p/r 图中,越高的曲线表示结果越好。

假定我们使用 Waymo 数据集。

在下载好数据集后,我们需要实现一个函数用来将输入数据和标注文件转换成 KITTI 风格。然后我们可以通过继承 KittiDataset 实现 WaymoDataset,用来加载数据以及训练模型,通过继承 KittiMetric 实现 WaymoMetric 来做模型的评估。

具体来说,首先使用数据转换器将 Waymo 数据集转换成 KITTI 数据集的格式,并定义 Waymo 类对转换的数据进行处理。此外需要添加 waymo 评估类来评估结果。因为我们将 Waymo 原始数据集进行预处理并重新组织成 KITTI 数据集的格式,因此可以比较容易通过继承 KittiDataset 类来实现 WaymoDataset 类。需要注意的是,由于 Waymo 数据集有相应的官方评估方法,我们需要进一步实现新的 Waymo 评估方法,更多关于评估方法参考评估文档。最后,用户可以成功地转换数据并使用 WaymoDataset 训练以及 WaymoMetric 评估模型。

更多关于 Waymo 数据集预处理的中间结果的细节,请参照对应的说明文档

准备配置文件

第二步是准备配置文件来帮助数据集的读取和使用,另外,为了在 3D 检测中获得不错的性能,调整超参数通常是必要的。

假设我们想要使用 PointPillars 模型在 Waymo 数据集上实现三类的 3D 目标检测:vehicle、cyclist、pedestrian,参照 KITTI 数据集配置文件、模型配置文件整体配置文件,我们需要准备数据集配置文件模型配置文件,并将这两种文件进行结合得到整体配置文件

训练一个新的模型

为了使用一个新的配置文件来训练模型,可以通过下面的命令来实现:

python tools/train.py configs/pointpillars/pointpillars_hv_secfpn_sbn-all_16xb2-2x_waymoD5-3d-3class.py

更多的使用细节,请参考案例 1

测试和推理

为了测试已经训练好的模型的性能,可以通过下面的命令来实现:

python tools/test.py configs/pointpillars/pointpillars_hv_secfpn_sbn-all_16xb2-2x_waymoD5-3d-3class.py work_dirs/pointpillars_hv_secfpn_sbn-all_16xb2-2x_waymoD5-3d-3class/latest.pth

注意:为了使用 Waymo 数据集的评估方法,需要参考说明文档并按照官方指导来准备与评估相关联的文件。

更多有关测试和推理的使用细节,请参考案例 1

Read the Docs v: stable
Versions
latest
stable
v1.1.0rc3
v1.1.0rc2
v1.0.0rc6
v0.18.1
dev-1.x
Downloads
epub
On Read the Docs
Project Home
Builds

Free document hosting provided by Read the Docs.