nuScenes数据集在mmdetection3d中的使用

nuScenes数据集在mmdetection3d中的使用

(一)nuScenes数据集下载

博客:nuScenes数据集使用
mmdetection3d官方对数据集下载和使用的指南
写在前面:
1.完整的nuScenes数据集约有300G,我在实际使用时仅下载了Part1数据集(约30G)。但是在应用nuScenes官方代码时,不完整的数据集会导致报错。因此,我做了部分修改。
2.目前主要针对基于激光雷达的3D目标检测,因此Camera数据仅用于可视化,Radar数据未做使用。【后续使用时,再做更新】

1. 目录结构
# 官方
mmdetection3d
├── data
│   ├── nuscenes
│   │   ├── maps
│   │   ├── samples
│   │   ├── sweeps
│   │   ├── v1.0-test
|   |   ├── v1.0-trainval

我的目录结构
nuScenes数据集在mmdetection3d中的使用_第1张图片

2. 下载指南

nuScenes下载地址
针对nuScenes下载数据集各部分的内容,在博客中有做简要讲述。在此处,我仅下载了下述三个部分。

nuScenes数据集在mmdetection3d中的使用_第2张图片

  • MetaData
    包含v1.0-trainval文件夹,该文件夹中包含所有850个场景的配置文件。
  • Keyframe blobs only for part 1
    包含samples文件夹,该文件夹中包含12个文件夹,分别为6路摄像头数据,1路激光雷达数据,5路毫米波雷达数据。samples表示各传感器时间轴对应时的数据。
  • Lidar blobs only for part 1
    包含samples/LIDAR_TOPsweeps/LIDAR_TOP文件夹。其中,samples/LIDAR_TOP在上一部分已经存在,因此,仅需要sweeps/LIDAR_TOP文件夹。

(二)数据处理

1. 目标结果

利用tools/create_data.py将会生成三个pkl文件和nuscenes_gt_database文件夹,用于训练和评价。
但是,由于我仅下载了Part1数据集,因此需要对代码进行部分修改。
nuScenes数据集在mmdetection3d中的使用_第3张图片

2. 代码修改

文件:mmdetection3d/tools/data_converter/nuscenes_converter.py
函数:_fill_trainval_infos

    # update for part1_dataset
    # for sample in mmcv.track_iter_progress(nusc.sample):
    for sample in mmcv.track_iter_progress(nusc.sample[0:3376]):
3. 数据处理
# 官方
python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes

至此,数据处理部分完成。

(三)训练评价

这里以CenterPoint举例【单GPU】

训练

python tools/train.py configs/centerpoint/centerpoint_02pillar_second_secfpn_4x8_cyclic_20e_nus.py

评价

  • out: 存储预测结果
  • eval: 调用nuscenes官方评价方法NuScenesEval,因此仅包含Part1部分数据集,会导致报错。
python tools/test.py configs/centerpoint/centerpoint_02pillar_second_secfpn_4x8_cyclic_20e_nus.py work_dir/centerpoint/epoch_10.pth --eval bbox --out ./eval_results/centerpoint.pkl
1. 报错分析
File "/home/ch511/anaconda3/envs/open-mmlab/lib/python3.7/site-packages/nuscenes/eval/detection/evaluate.py", line 87, in __init__
    "Samples in split doesn't match samples in predictions."
AssertionError: Samples in split doesn't match samples in predictions.

报错代码:

# evaluate.py
assert set(self.pred_boxes.sample_tokens) == set(self.gt_boxes.sample_tokens), \
            "Samples in split doesn't match samples in predictions."

报错原因:

self.pred_boxes.sample_tokens = 914self.gt_boxes.sample_tokens = 6019

真实值包括整个数据集,但我仅使用了part1数据集.

2. 代码修改:

文件:/home/ch511/anaconda3/envs/open-mmlab/lib/python3.7/site-packages/nuscenes/eval/common/loaders.py
函数:load_gt

sample_tokens_all = [s['token'] for s in nusc.sample[0:3376]]

修改源码并非一个好办法,最好是self.nusc仅包括part1部分,这样加载数据时也会更快一些。【待更新】

(四)其他说明

nusc = NuScenes(version=self.version, dataroot=self.data_root, verbose=False)

上述操作较为耗费时间,因此我把它存储为outputs/nusc/data_false_verbose.pkl文件。每次使用时读取即可。

你可能感兴趣的:(3D目标检测,nuScenes数据集)