3dtest / projects /TPVFormer /tpvformer /nuscenes_dataset.py
giantmonkeyTC
mm2
c2ca15f
# Copyright (c) OpenMMLab. All rights reserved.
import os.path as osp
from typing import Callable, List, Union
from mmengine.dataset import BaseDataset
from mmdet3d.registry import DATASETS
@DATASETS.register_module()
class NuScenesSegDataset(BaseDataset):
r"""NuScenes Dataset.
This class serves as the API for experiments on the NuScenes Dataset.
Please refer to `NuScenes Dataset <https://www.nuscenes.org/download>`_
for data downloading.
Args:
data_root (str): Path of dataset root.
ann_file (str): Path of annotation file.
pipeline (list[dict]): Pipeline used for data processing.
Defaults to [].
test_mode (bool): Store `True` when building test or val dataset.
"""
METAINFO = {
'classes':
('noise', 'barrier', 'bicycle', 'bus', 'car', 'construction_vehicle',
'motorcycle', 'pedestrian', 'traffic_cone', 'trailer', 'truck',
'driveable_surface', 'other_flat', 'sidewalk', 'terrain', 'manmade',
'vegetation'),
'ignore_index':
0,
'label_mapping':
dict([(1, 0), (5, 0), (7, 0), (8, 0), (10, 0), (11, 0), (13, 0),
(19, 0), (20, 0), (0, 0), (29, 0), (31, 0), (9, 1), (14, 2),
(15, 3), (16, 3), (17, 4), (18, 5), (21, 6), (2, 7), (3, 7),
(4, 7), (6, 7), (12, 8), (22, 9), (23, 10), (24, 11), (25, 12),
(26, 13), (27, 14), (28, 15), (30, 16)]),
'palette': [
[0, 0, 0], # noise
[255, 120, 50], # barrier orange
[255, 192, 203], # bicycle pink
[255, 255, 0], # bus yellow
[0, 150, 245], # car blue
[0, 255, 255], # construction_vehicle cyan
[255, 127, 0], # motorcycle dark orange
[255, 0, 0], # pedestrian red
[255, 240, 150], # traffic_cone light yellow
[135, 60, 0], # trailer brown
[160, 32, 240], # truck purple
[255, 0, 255], # driveable_surface dark pink
[139, 137, 137], # other_flat dark red
[75, 0, 75], # sidewalk dard purple
[150, 240, 80], # terrain light green
[230, 230, 250], # manmade white
[0, 175, 0], # vegetation green
]
}
def __init__(self,
data_root: str,
ann_file: str,
pipeline: List[Union[dict, Callable]] = [],
test_mode: bool = False,
**kwargs) -> None:
metainfo = dict(label2cat={
i: cat_name
for i, cat_name in enumerate(self.METAINFO['classes'])
})
super().__init__(
ann_file=ann_file,
data_root=data_root,
metainfo=metainfo,
pipeline=pipeline,
test_mode=test_mode,
**kwargs)
def parse_data_info(self, info: dict) -> Union[List[dict], dict]:
"""Process the raw data info.
The only difference with it in `Det3DDataset`
is the specific process for `plane`.
Args:
info (dict): Raw info dict.
Returns:
List[dict] or dict: Has `ann_info` in training stage. And
all path has been converted to absolute path.
"""
data_list = []
info['lidar_points']['lidar_path'] = \
osp.join(
self.data_prefix.get('pts', ''),
info['lidar_points']['lidar_path'])
for cam_id, img_info in info['images'].items():
if 'img_path' in img_info:
if cam_id in self.data_prefix:
cam_prefix = self.data_prefix[cam_id]
else:
cam_prefix = self.data_prefix.get('img', '')
img_info['img_path'] = osp.join(cam_prefix,
img_info['img_path'])
if 'pts_semantic_mask_path' in info:
info['pts_semantic_mask_path'] = \
osp.join(self.data_prefix.get('pts_semantic_mask', ''),
info['pts_semantic_mask_path'])
# only be used in `PointSegClassMapping` in pipeline
# to map original semantic class to valid category ids.
info['seg_label_mapping'] = self.metainfo['label_mapping']
# 'eval_ann_info' will be updated in loading transforms
if self.test_mode:
info['eval_ann_info'] = dict()
data_list.append(info)
return data_list