KITTI 3D目标检测数据集下载生成
https://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d
下载以下几项内容 Download point cloud(29GB), images(12 GB), calibration
files(16 MB)和labels(5 MB)。Format the datasets as follows:
下载完成之后解压内容目录如下
kitti
|- training
|- calib (#7481 .txt)
|- image_2 (#7481 .png)
|- label_2 (#7481 .txt)
|- velodyne (#7481 .bin)
|- testing
|- calib (#7518 .txt)
|- image_2 (#7518 .png)
|- velodyne (#7418 .bin)
对KITTI数据生成pkl信息
python -m pcdet.datasets.kitti.kitti_dataset create_kitti_infos tools/cfgs/dataset_configs/kitti_dataset.yaml
生成之后数据格式如下
kitti
|- training
|- calib (#7481 .txt)
|- image_2 (#7481 .png)
|- label_2 (#7481 .txt)
|- velodyne (#7481 .bin)
|- velodyne_reduced (#7481 .bin)
|- testing
|- calib (#7518 .txt)
|- image_2 (#7518 .png)
|- velodyne (#7518 .bin)
|- velodyne_reduced (#7518 .bin)
|- kitti_gt_database (# 19700 .bin)
|- kitti_infos_train.pkl
|- kitti_infos_val.pkl
|- kitti_infos_trainval.pkl
|- kitti_infos_test.pkl
|- kitti_dbinfos_train.pkl
PKL文件生成过程解读 (以kitti_dbinfos_train.pkl 为例 其他思路类似)
dataset = KittiDataset(dataset_cfg=dataset_cfg, class_names=class_names, root_path=data_path, training=False)
dataset.set_split(train_split)
kitti_infos_train = dataset.get_infos(num_workers=workers, has_label=True, count_inside_pts=True)
with open(train_filename, 'wb') as f:
pickle.dump(kitti_infos_train, f)
print('Kitti info train file is saved to %s' % train_filename)
Pkl 文件存储都是以 pickle.dump形式存储的
1. 首先调用KittiDataset 类 生成对象dataset
2. 使用dataset 的 set_split 方法去读取 Imagesets 里面相关的数据分配文件
3. 调用 dataset 的get_infos 方法去读取数据相关信息 生成info dict
4. 将生成的info dict 存储成pkl文件方便用的时候调用它。
PKL 文件内容解读
我们以kitti_dbinfos_train.pkl Car 的一帧为例
import json,os
path_pkl = "/data4/ssl/OpenPCDet/data/kitti/kitti_dbinfos_train.pkl"#
import pickle
import numpy as np
# Open the pickle file for reading
with open(path_pkl, 'rb') as pickle_file: # Note the 'rb' mode for binary reading
data = pickle.load(pickle_file)
print(data.keys())
print(data['Car'][0])
{'name': 'Car', 'path': 'gt_database/000003_Car_0.bin', 'image_idx': '000003', 'gt_idx': 0, 'box3d_lidar': array([13.51070213, -0.98177999, -0.90948981, 4.15 , 1.73 ,
1.57 , -3.19079633]), 'num_points_in_gt': 677, 'difficulty': 0, 'bbox': array([614.24, 181.78, 727.31, 284.77], dtype=float32), 'score': -1.0}
存放了上面一些内容 path 为相对路径
后续讲解模型是如何使用这些PKL文件的