1.前言
运行完demo之后,你是不是想自己体验一下训练和测试的过程呢,但是,这一切都是以数据集为前提的,有了数据才能训练,有了数据,才能测试。所以,今天就记录一下数据集的处理过程。
2.mmdetection3d支持的数据集
mmdetection3d支持很多数据集,比如说kitti,NuScenes,waymo,Lyft,S3DIS、ScanNet 和 SUN RGB-D。这里要根据自己的任务去选择相应的数据集,是作2d/3d检测的,还是作分割的,都是不一样的。但是这些数据由于格式和规则的不同,很可能带来麻烦,所以mmdetection准备了一些脚本,来把下载好的数据转换成训练/测试脚本能识别的格式。从而在该数据集上进行后续的工作。
这里以使用较多的kitti数据集作为示例,给大家演示一下怎么进行转换(其他数据集也基本同理)。
KITTI数据集简单介绍:
KITTI数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办,是目前国际上最大的自动驾驶场景下的计算机视觉算法评测数据集。作者收集了长达6个小时的真实交通环境,数据集由经过校正和同步的图像、雷达扫描、高精度的GPS信息和IMU加速信息等多种模态的信息组成。该数据集用于评测立体图像(stereo),光流(optical flow),视觉测距(visual odometry),3D物体检测(object detection)和3D跟踪(tracking)等计算机视觉技术在车载环境下的性能。3D目标检测数据集由7481个训练图像和7518个测试图像以及相应的点云数据组成,包括总共80256个标记对象。具体来看,下图蓝色框标记的为我们需要的数据,分别是:
1.彩色图像数据(12GB)
2.点云数据(29GB)
3. 相机矫正数据(16MB)
4.标签数据(5MB)
其中彩色图像数据、点云数据、相机矫正数据均包含training(7481)和testing(7518)两个部分,标签数据只有training部分。
数据转换
转换过程总体分为两步,1.下载原始数据并按要求划分文件夹;2.运行相应脚本。
(1).下载原始数据并按要求划分文件夹
kitti数据集的下载地址在下面:
下载完成解压之后,建立新文件夹存放kitti数据:结构如下,把对应的数据放在对应的文件夹里面就可以了。区别是kitti原始数据先分传感器后分训练测试,而mmdetection3d是先分训练测试,后分传感器:
mmdetection3d
├── data
│ ├── kitti
│ │ ├── ImageSets
│ │ ├── testing
│ │ │ ├── calib
│ │ │ ├── image_2
│ │ │ ├── velodyne
│ │ ├── training
│ │ │ ├── calib
│ │ │ ├── image_2
│ │ │ ├── label_2
│ │ │ ├── velodyne
然后是下载imageset里的东西,也就是划分数据的文件(在mmdetection3d文件夹下运行)
# 下载数据划分文件
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/test.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/test.txt
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/train.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/train.txt
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/val.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/val.txt
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/trainval.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/trainval.txt
(2).运行相应脚本
最后运行转换脚本:输入输出文件夹默认就行
python tools/create_data.py kitti --root-path ./data/kitti --out-dir ./data/kitti
转换完成之后,文件夹里面变成了这样:
kitti
├── ImageSets
│ ├── test.txt
│ ├── train.txt
│ ├── trainval.txt
│ ├── val.txt
├── testing
│ ├── calib
│ ├── image_2
│ ├── velodyne
│ ├── velodyne_reduced
├── training
│ ├── calib
│ ├── image_2
│ ├── label_2
│ ├── velodyne
│ ├── velodyne_reduced
│ ├── planes (optional)
├── kitti_gt_database
│ ├── xxxxx.bin
├── kitti_infos_train.pkl
├── kitti_infos_val.pkl
├── kitti_dbinfos_train.pkl
├── kitti_infos_test.pkl
├── kitti_infos_trainval.pkl
├── kitti_infos_train_mono3d.coco.json
├── kitti_infos_trainval_mono3d.coco.json
├── kitti_infos_test_mono3d.coco.json
├── kitti_infos_val_mono3d.coco.json
到这里,训练和测试需要的数据就准备好啦。如果需要其他数据集,可以参考官方的文档:mmdetection3d官方文档