"...en/git@developer.sourcefind.cn:renzhc/diffusers_dcu.git" did not exist on "0de35e4a5204d2a94edc5ab108b5061a7a7013e8"
Unverified Commit 0287048a authored by ChaimZhu's avatar ChaimZhu Committed by GitHub
Browse files

[Enhance] Update Registry in MMDet3D (#1412)

* Update Registry in MMDet3D

* fix compose pipeline bug

* update registry

* fix some bugs

* fix comments

* fix comments
parent e013bab5
# Copyright (c) OpenMMLab. All rights reserved. # Copyright (c) OpenMMLab. All rights reserved.
from mmdet.datasets.builder import build_dataloader from mmdet.datasets.builder import build_dataloader
from .builder import DATASETS, build_dataset from .builder import DATASETS, PIPELINES, build_dataset
from .custom_3d import Custom3DDataset from .custom_3d import Custom3DDataset
from .custom_3d_seg import Custom3DSegDataset from .custom_3d_seg import Custom3DSegDataset
from .kitti_dataset import KittiDataset from .kitti_dataset import KittiDataset
...@@ -41,5 +41,5 @@ __all__ = [ ...@@ -41,5 +41,5 @@ __all__ = [
'LoadPointsFromMultiSweeps', 'WaymoDataset', 'BackgroundPointsFilter', 'LoadPointsFromMultiSweeps', 'WaymoDataset', 'BackgroundPointsFilter',
'VoxelBasedPointSampler', 'get_loading_pipeline', 'RandomDropPointsColor', 'VoxelBasedPointSampler', 'get_loading_pipeline', 'RandomDropPointsColor',
'RandomJitterPoints', 'ObjectNameFilter', 'AffineResize', 'RandomJitterPoints', 'ObjectNameFilter', 'AffineResize',
'RandomShiftScale', 'LoadPointsFromDict' 'RandomShiftScale', 'LoadPointsFromDict', 'PIPELINES'
] ]
...@@ -3,7 +3,6 @@ import platform ...@@ -3,7 +3,6 @@ import platform
from mmcv.utils import Registry, build_from_cfg from mmcv.utils import Registry, build_from_cfg
from mmdet.datasets import DATASETS
from mmdet.datasets.builder import _concat_dataset from mmdet.datasets.builder import _concat_dataset
if platform.system() != 'Windows': if platform.system() != 'Windows':
...@@ -16,6 +15,8 @@ if platform.system() != 'Windows': ...@@ -16,6 +15,8 @@ if platform.system() != 'Windows':
resource.setrlimit(resource.RLIMIT_NOFILE, (soft_limit, hard_limit)) resource.setrlimit(resource.RLIMIT_NOFILE, (soft_limit, hard_limit))
OBJECTSAMPLERS = Registry('Object sampler') OBJECTSAMPLERS = Registry('Object sampler')
DATASETS = Registry('dataset')
PIPELINES = Registry('pipeline')
def build_dataset(cfg, default_args=None): def build_dataset(cfg, default_args=None):
......
...@@ -7,8 +7,8 @@ import mmcv ...@@ -7,8 +7,8 @@ import mmcv
import numpy as np import numpy as np
from torch.utils.data import Dataset from torch.utils.data import Dataset
from mmdet.datasets import DATASETS
from ..core.bbox import get_box_type from ..core.bbox import get_box_type
from .builder import DATASETS
from .pipelines import Compose from .pipelines import Compose
from .utils import extract_result_dict, get_loading_pipeline from .utils import extract_result_dict, get_loading_pipeline
......
...@@ -7,8 +7,8 @@ import mmcv ...@@ -7,8 +7,8 @@ import mmcv
import numpy as np import numpy as np
from torch.utils.data import Dataset from torch.utils.data import Dataset
from mmdet.datasets import DATASETS
from mmseg.datasets import DATASETS as SEG_DATASETS from mmseg.datasets import DATASETS as SEG_DATASETS
from .builder import DATASETS
from .pipelines import Compose from .pipelines import Compose
from .utils import extract_result_dict, get_loading_pipeline from .utils import extract_result_dict, get_loading_pipeline
......
...@@ -2,7 +2,8 @@ ...@@ -2,7 +2,8 @@
import mmcv import mmcv
import numpy as np import numpy as np
from mmdet.datasets import DATASETS, CustomDataset from mmdet.datasets import CustomDataset
from .builder import DATASETS
@DATASETS.register_module() @DATASETS.register_module()
......
...@@ -9,10 +9,10 @@ import numpy as np ...@@ -9,10 +9,10 @@ import numpy as np
import torch import torch
from mmcv.utils import print_log from mmcv.utils import print_log
from mmdet.datasets import DATASETS
from ..core import show_multi_modality_result, show_result from ..core import show_multi_modality_result, show_result
from ..core.bbox import (Box3DMode, CameraInstance3DBoxes, Coord3DMode, from ..core.bbox import (Box3DMode, CameraInstance3DBoxes, Coord3DMode,
LiDARInstance3DBoxes, points_cam2img) LiDARInstance3DBoxes, points_cam2img)
from .builder import DATASETS
from .custom_3d import Custom3DDataset from .custom_3d import Custom3DDataset
from .pipelines import Compose from .pipelines import Compose
......
...@@ -8,8 +8,8 @@ import numpy as np ...@@ -8,8 +8,8 @@ import numpy as np
import torch import torch
from mmcv.utils import print_log from mmcv.utils import print_log
from mmdet.datasets import DATASETS
from ..core.bbox import Box3DMode, CameraInstance3DBoxes, points_cam2img from ..core.bbox import Box3DMode, CameraInstance3DBoxes, points_cam2img
from .builder import DATASETS
from .nuscenes_mono_dataset import NuScenesMonoDataset from .nuscenes_mono_dataset import NuScenesMonoDataset
...@@ -35,6 +35,8 @@ class KittiMonoDataset(NuScenesMonoDataset): ...@@ -35,6 +35,8 @@ class KittiMonoDataset(NuScenesMonoDataset):
def __init__(self, def __init__(self,
data_root, data_root,
info_file, info_file,
ann_file,
pipeline,
load_interval=1, load_interval=1,
with_velocity=False, with_velocity=False,
eval_version=None, eval_version=None,
...@@ -42,6 +44,8 @@ class KittiMonoDataset(NuScenesMonoDataset): ...@@ -42,6 +44,8 @@ class KittiMonoDataset(NuScenesMonoDataset):
**kwargs): **kwargs):
super().__init__( super().__init__(
data_root=data_root, data_root=data_root,
ann_file=ann_file,
pipeline=pipeline,
load_interval=load_interval, load_interval=load_interval,
with_velocity=with_velocity, with_velocity=with_velocity,
eval_version=eval_version, eval_version=eval_version,
......
...@@ -11,9 +11,9 @@ from lyft_dataset_sdk.utils.data_classes import Box as LyftBox ...@@ -11,9 +11,9 @@ from lyft_dataset_sdk.utils.data_classes import Box as LyftBox
from pyquaternion import Quaternion from pyquaternion import Quaternion
from mmdet3d.core.evaluation.lyft_eval import lyft_eval from mmdet3d.core.evaluation.lyft_eval import lyft_eval
from mmdet.datasets import DATASETS
from ..core import show_result from ..core import show_result
from ..core.bbox import Box3DMode, Coord3DMode, LiDARInstance3DBoxes from ..core.bbox import Box3DMode, Coord3DMode, LiDARInstance3DBoxes
from .builder import DATASETS
from .custom_3d import Custom3DDataset from .custom_3d import Custom3DDataset
from .pipelines import Compose from .pipelines import Compose
......
...@@ -7,9 +7,9 @@ import numpy as np ...@@ -7,9 +7,9 @@ import numpy as np
import pyquaternion import pyquaternion
from nuscenes.utils.data_classes import Box as NuScenesBox from nuscenes.utils.data_classes import Box as NuScenesBox
from mmdet.datasets import DATASETS
from ..core import show_result from ..core import show_result
from ..core.bbox import Box3DMode, Coord3DMode, LiDARInstance3DBoxes from ..core.bbox import Box3DMode, Coord3DMode, LiDARInstance3DBoxes
from .builder import DATASETS
from .custom_3d import Custom3DDataset from .custom_3d import Custom3DDataset
from .pipelines import Compose from .pipelines import Compose
...@@ -125,8 +125,7 @@ class NuScenesDataset(Custom3DDataset): ...@@ -125,8 +125,7 @@ class NuScenesDataset(Custom3DDataset):
filter_empty_gt=True, filter_empty_gt=True,
test_mode=False, test_mode=False,
eval_version='detection_cvpr_2019', eval_version='detection_cvpr_2019',
use_valid_flag=False, use_valid_flag=False):
**kwargs):
self.load_interval = load_interval self.load_interval = load_interval
self.use_valid_flag = use_valid_flag self.use_valid_flag = use_valid_flag
super().__init__( super().__init__(
...@@ -137,8 +136,7 @@ class NuScenesDataset(Custom3DDataset): ...@@ -137,8 +136,7 @@ class NuScenesDataset(Custom3DDataset):
modality=modality, modality=modality,
box_type_3d=box_type_3d, box_type_3d=box_type_3d,
filter_empty_gt=filter_empty_gt, filter_empty_gt=filter_empty_gt,
test_mode=test_mode, test_mode=test_mode)
**kwargs)
self.with_velocity = with_velocity self.with_velocity = with_velocity
self.eval_version = eval_version self.eval_version = eval_version
...@@ -186,7 +184,6 @@ class NuScenesDataset(Custom3DDataset): ...@@ -186,7 +184,6 @@ class NuScenesDataset(Custom3DDataset):
Returns: Returns:
list[dict]: List of annotations sorted by timestamps. list[dict]: List of annotations sorted by timestamps.
""" """
# loading data from a file-like object needs file format
data = mmcv.load(ann_file, file_format='pkl') data = mmcv.load(ann_file, file_format='pkl')
data_infos = list(sorted(data['infos'], key=lambda e: e['timestamp'])) data_infos = list(sorted(data['infos'], key=lambda e: e['timestamp']))
data_infos = data_infos[::self.load_interval] data_infos = data_infos[::self.load_interval]
......
...@@ -11,9 +11,10 @@ import torch ...@@ -11,9 +11,10 @@ import torch
from nuscenes.utils.data_classes import Box as NuScenesBox from nuscenes.utils.data_classes import Box as NuScenesBox
from mmdet3d.core import bbox3d2result, box3d_multiclass_nms, xywhr2xyxyr from mmdet3d.core import bbox3d2result, box3d_multiclass_nms, xywhr2xyxyr
from mmdet.datasets import DATASETS, CocoDataset from mmdet.datasets import CocoDataset
from ..core import show_multi_modality_result from ..core import show_multi_modality_result
from ..core.bbox import CameraInstance3DBoxes, get_box_type from ..core.bbox import CameraInstance3DBoxes, get_box_type
from .builder import DATASETS
from .pipelines import Compose from .pipelines import Compose
from .utils import extract_result_dict, get_loading_pipeline from .utils import extract_result_dict, get_loading_pipeline
...@@ -76,6 +77,8 @@ class NuScenesMonoDataset(CocoDataset): ...@@ -76,6 +77,8 @@ class NuScenesMonoDataset(CocoDataset):
def __init__(self, def __init__(self,
data_root, data_root,
ann_file,
pipeline,
load_interval=1, load_interval=1,
with_velocity=True, with_velocity=True,
modality=None, modality=None,
...@@ -83,9 +86,46 @@ class NuScenesMonoDataset(CocoDataset): ...@@ -83,9 +86,46 @@ class NuScenesMonoDataset(CocoDataset):
eval_version='detection_cvpr_2019', eval_version='detection_cvpr_2019',
use_valid_flag=False, use_valid_flag=False,
version='v1.0-trainval', version='v1.0-trainval',
**kwargs): classes=None,
super().__init__(**kwargs) img_prefix='',
seg_prefix=None,
proposal_file=None,
test_mode=False,
filter_empty_gt=True,
file_client_args=dict(backend='disk')):
self.ann_file = ann_file
self.data_root = data_root self.data_root = data_root
self.img_prefix = img_prefix
self.seg_prefix = seg_prefix
self.proposal_file = proposal_file
self.test_mode = test_mode
self.filter_empty_gt = filter_empty_gt
self.CLASSES = self.get_classes(classes)
self.file_client = mmcv.FileClient(**file_client_args)
# load annotations (and proposals)
with self.file_client.get_local_path(self.ann_file) as local_path:
self.data_infos = self.load_annotations(local_path)
if self.proposal_file is not None:
with self.file_client.get_local_path(
self.proposal_file) as local_path:
self.proposals = self.load_proposals(local_path)
else:
self.proposals = None
# filter images too small and containing no annotations
if not test_mode:
valid_inds = self._filter_imgs()
self.data_infos = [self.data_infos[i] for i in valid_inds]
if self.proposals is not None:
self.proposals = [self.proposals[i] for i in valid_inds]
# set group flag for the sampler
self._set_group_flag()
# processing pipeline
self.pipeline = Compose(pipeline)
self.load_interval = load_interval self.load_interval = load_interval
self.with_velocity = with_velocity self.with_velocity = with_velocity
self.modality = modality self.modality = modality
......
# Copyright (c) OpenMMLab. All rights reserved. # Copyright (c) OpenMMLab. All rights reserved.
from mmdet.datasets.pipelines import Compose from .compose import Compose
from .dbsampler import DataBaseSampler from .dbsampler import DataBaseSampler
from .formating import Collect3D, DefaultFormatBundle, DefaultFormatBundle3D from .formating import Collect3D, DefaultFormatBundle, DefaultFormatBundle3D
from .loading import (LoadAnnotations3D, LoadImageFromFileMono3D, from .loading import (LoadAnnotations3D, LoadImageFromFileMono3D,
......
# Copyright (c) OpenMMLab. All rights reserved.
import collections
from mmcv.utils import build_from_cfg
from mmdet.datasets.builder import PIPELINES as MMDET_PIPELINES
from ..builder import PIPELINES
@PIPELINES.register_module()
class Compose:
"""Compose multiple transforms sequentially. The pipeline registry of
mmdet3d separates with mmdet, however, sometimes we may need to use mmdet's
pipeline. So the class is rewritten to be able to use pipelines from both
mmdet3d and mmdet.
Args:
transforms (Sequence[dict | callable]): Sequence of transform object or
config dict to be composed.
"""
def __init__(self, transforms):
assert isinstance(transforms, collections.abc.Sequence)
self.transforms = []
for transform in transforms:
if isinstance(transform, dict):
if transform['type'] in PIPELINES._module_dict.keys():
transform = build_from_cfg(transform, PIPELINES)
else:
transform = build_from_cfg(transform, MMDET_PIPELINES)
self.transforms.append(transform)
elif callable(transform):
self.transforms.append(transform)
else:
raise TypeError('transform must be callable or a dict')
def __call__(self, data):
"""Call function to apply transforms sequentially.
Args:
data (dict): A result dict contains the data to transform.
Returns:
dict: Transformed data.
"""
for t in self.transforms:
data = t(data)
if data is None:
return None
return data
def __repr__(self):
format_string = self.__class__.__name__ + '('
for t in self.transforms:
format_string += '\n'
format_string += f' {t}'
format_string += '\n)'
return format_string
...@@ -8,8 +8,7 @@ import numpy as np ...@@ -8,8 +8,7 @@ import numpy as np
from mmdet3d.core.bbox import box_np_ops from mmdet3d.core.bbox import box_np_ops
from mmdet3d.datasets.pipelines import data_augment_utils from mmdet3d.datasets.pipelines import data_augment_utils
from mmdet.datasets import PIPELINES from ..builder import OBJECTSAMPLERS, PIPELINES
from ..builder import OBJECTSAMPLERS
class BatchSampler: class BatchSampler:
......
...@@ -4,10 +4,8 @@ from mmcv.parallel import DataContainer as DC ...@@ -4,10 +4,8 @@ from mmcv.parallel import DataContainer as DC
from mmdet3d.core.bbox import BaseInstance3DBoxes from mmdet3d.core.bbox import BaseInstance3DBoxes
from mmdet3d.core.points import BasePoints from mmdet3d.core.points import BasePoints
from mmdet.datasets.builder import PIPELINES
from mmdet.datasets.pipelines import to_tensor from mmdet.datasets.pipelines import to_tensor
from ..builder import PIPELINES
PIPELINES._module_dict.pop('DefaultFormatBundle')
@PIPELINES.register_module() @PIPELINES.register_module()
......
...@@ -3,8 +3,8 @@ import mmcv ...@@ -3,8 +3,8 @@ import mmcv
import numpy as np import numpy as np
from mmdet3d.core.points import BasePoints, get_points_type from mmdet3d.core.points import BasePoints, get_points_type
from mmdet.datasets.builder import PIPELINES
from mmdet.datasets.pipelines import LoadAnnotations, LoadImageFromFile from mmdet.datasets.pipelines import LoadAnnotations, LoadImageFromFile
from ..builder import PIPELINES
@PIPELINES.register_module() @PIPELINES.register_module()
......
...@@ -4,8 +4,8 @@ from copy import deepcopy ...@@ -4,8 +4,8 @@ from copy import deepcopy
import mmcv import mmcv
from mmdet.datasets.builder import PIPELINES from ..builder import PIPELINES
from mmdet.datasets.pipelines import Compose from .compose import Compose
@PIPELINES.register_module() @PIPELINES.register_module()
......
...@@ -10,9 +10,8 @@ from mmcv.utils import build_from_cfg ...@@ -10,9 +10,8 @@ from mmcv.utils import build_from_cfg
from mmdet3d.core import VoxelGenerator from mmdet3d.core import VoxelGenerator
from mmdet3d.core.bbox import (CameraInstance3DBoxes, DepthInstance3DBoxes, from mmdet3d.core.bbox import (CameraInstance3DBoxes, DepthInstance3DBoxes,
LiDARInstance3DBoxes, box_np_ops) LiDARInstance3DBoxes, box_np_ops)
from mmdet.datasets.builder import PIPELINES
from mmdet.datasets.pipelines import RandomFlip from mmdet.datasets.pipelines import RandomFlip
from ..builder import OBJECTSAMPLERS from ..builder import OBJECTSAMPLERS, PIPELINES
from .data_augment_utils import noise_per_object_v3_ from .data_augment_utils import noise_per_object_v3_
......
...@@ -5,8 +5,8 @@ import numpy as np ...@@ -5,8 +5,8 @@ import numpy as np
from mmdet3d.core import show_seg_result from mmdet3d.core import show_seg_result
from mmdet3d.core.bbox import DepthInstance3DBoxes from mmdet3d.core.bbox import DepthInstance3DBoxes
from mmdet.datasets import DATASETS
from mmseg.datasets import DATASETS as SEG_DATASETS from mmseg.datasets import DATASETS as SEG_DATASETS
from .builder import DATASETS
from .custom_3d import Custom3DDataset from .custom_3d import Custom3DDataset
from .custom_3d_seg import Custom3DSegDataset from .custom_3d_seg import Custom3DSegDataset
from .pipelines import Compose from .pipelines import Compose
......
...@@ -7,8 +7,8 @@ import numpy as np ...@@ -7,8 +7,8 @@ import numpy as np
from mmdet3d.core import instance_seg_eval, show_result, show_seg_result from mmdet3d.core import instance_seg_eval, show_result, show_seg_result
from mmdet3d.core.bbox import DepthInstance3DBoxes from mmdet3d.core.bbox import DepthInstance3DBoxes
from mmdet.datasets import DATASETS
from mmseg.datasets import DATASETS as SEG_DATASETS from mmseg.datasets import DATASETS as SEG_DATASETS
from .builder import DATASETS
from .custom_3d import Custom3DDataset from .custom_3d import Custom3DDataset
from .custom_3d_seg import Custom3DSegDataset from .custom_3d_seg import Custom3DSegDataset
from .pipelines import Compose from .pipelines import Compose
......
# Copyright (c) OpenMMLab. All rights reserved. # Copyright (c) OpenMMLab. All rights reserved.
from os import path as osp from os import path as osp
from mmdet.datasets import DATASETS from .builder import DATASETS
from .custom_3d import Custom3DDataset from .custom_3d import Custom3DDataset
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment