Skip to content

Commit 2c13673

Browse files
[Feature] Support new config type (open-mmlab#2608)
* support new configs * support new configs * verify configs
1 parent aea26ac commit 2c13673

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+5084
-0
lines changed

mmdet3d/configs/_base_/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Copyright (c) OpenMMLab. All rights reserved.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Copyright (c) OpenMMLab. All rights reserved.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
# Copyright (c) OpenMMLab. All rights reserved.
2+
from mmengine.dataset.dataset_wrapper import RepeatDataset
3+
from mmengine.dataset.sampler import DefaultSampler
4+
from mmengine.visualization.vis_backend import LocalVisBackend
5+
6+
from mmdet3d.datasets.kitti_dataset import KittiDataset
7+
from mmdet3d.datasets.transforms.formating import Pack3DDetInputs
8+
from mmdet3d.datasets.transforms.loading import (LoadAnnotations3D,
9+
LoadPointsFromFile)
10+
from mmdet3d.datasets.transforms.test_time_aug import MultiScaleFlipAug3D
11+
from mmdet3d.datasets.transforms.transforms_3d import ( # noqa
12+
GlobalRotScaleTrans, ObjectNoise, ObjectRangeFilter, ObjectSample,
13+
PointShuffle, PointsRangeFilter, RandomFlip3D)
14+
from mmdet3d.evaluation.metrics.kitti_metric import KittiMetric
15+
from mmdet3d.visualization.local_visualizer import Det3DLocalVisualizer
16+
17+
# dataset settings
18+
dataset_type = 'KittiDataset'
19+
data_root = 'data/kitti/'
20+
class_names = ['Pedestrian', 'Cyclist', 'Car']
21+
point_cloud_range = [0, -40, -3, 70.4, 40, 1]
22+
input_modality = dict(use_lidar=True, use_camera=False)
23+
metainfo = dict(classes=class_names)
24+
25+
# Example to use different file client
26+
# Method 1: simply set the data root and let the file I/O module
27+
# automatically infer from prefix (not support LMDB and Memcache yet)
28+
29+
# data_root = 's3://openmmlab/datasets/detection3d/kitti/'
30+
31+
# Method 2: Use backend_args, file_client_args in versions before 1.1.0
32+
# backend_args = dict(
33+
# backend='petrel',
34+
# path_mapping=dict({
35+
# './data/': 's3://openmmlab/datasets/detection3d/',
36+
# 'data/': 's3://openmmlab/datasets/detection3d/'
37+
# }))
38+
backend_args = None
39+
40+
db_sampler = dict(
41+
data_root=data_root,
42+
info_path=data_root + 'kitti_dbinfos_train.pkl',
43+
rate=1.0,
44+
prepare=dict(
45+
filter_by_difficulty=[-1],
46+
filter_by_min_points=dict(Car=5, Pedestrian=10, Cyclist=10)),
47+
classes=class_names,
48+
sample_groups=dict(Car=12, Pedestrian=6, Cyclist=6),
49+
points_loader=dict(
50+
type=LoadPointsFromFile,
51+
coord_type='LIDAR',
52+
load_dim=4,
53+
use_dim=4,
54+
backend_args=backend_args),
55+
backend_args=backend_args)
56+
57+
train_pipeline = [
58+
dict(
59+
type=LoadPointsFromFile,
60+
coord_type='LIDAR',
61+
load_dim=4, # x, y, z, intensity
62+
use_dim=4,
63+
backend_args=backend_args),
64+
dict(type=LoadAnnotations3D, with_bbox_3d=True, with_label_3d=True),
65+
dict(type=ObjectSample, db_sampler=db_sampler),
66+
dict(
67+
type=ObjectNoise,
68+
num_try=100,
69+
translation_std=[1.0, 1.0, 0.5],
70+
global_rot_range=[0.0, 0.0],
71+
rot_range=[-0.78539816, 0.78539816]),
72+
dict(type=RandomFlip3D, flip_ratio_bev_horizontal=0.5),
73+
dict(
74+
type=GlobalRotScaleTrans,
75+
rot_range=[-0.78539816, 0.78539816],
76+
scale_ratio_range=[0.95, 1.05]),
77+
dict(type=PointsRangeFilter, point_cloud_range=point_cloud_range),
78+
dict(type=ObjectRangeFilter, point_cloud_range=point_cloud_range),
79+
dict(type=PointShuffle),
80+
dict(
81+
type=Pack3DDetInputs, keys=['points', 'gt_bboxes_3d', 'gt_labels_3d'])
82+
]
83+
test_pipeline = [
84+
dict(
85+
type=LoadPointsFromFile,
86+
coord_type='LIDAR',
87+
load_dim=4,
88+
use_dim=4,
89+
backend_args=backend_args),
90+
dict(
91+
type=MultiScaleFlipAug3D,
92+
img_scale=(1333, 800),
93+
pts_scale_ratio=1,
94+
flip=False,
95+
transforms=[
96+
dict(
97+
type=GlobalRotScaleTrans,
98+
rot_range=[0, 0],
99+
scale_ratio_range=[1., 1.],
100+
translation_std=[0, 0, 0]),
101+
dict(type=RandomFlip3D),
102+
dict(type=PointsRangeFilter, point_cloud_range=point_cloud_range)
103+
]),
104+
dict(type=Pack3DDetInputs, keys=['points'])
105+
]
106+
# construct a pipeline for data and gt loading in show function
107+
# please keep its loading function consistent with test_pipeline (e.g. client)
108+
eval_pipeline = [
109+
dict(
110+
type=LoadPointsFromFile,
111+
coord_type='LIDAR',
112+
load_dim=4,
113+
use_dim=4,
114+
backend_args=backend_args),
115+
dict(type=Pack3DDetInputs, keys=['points'])
116+
]
117+
train_dataloader = dict(
118+
batch_size=6,
119+
num_workers=4,
120+
persistent_workers=True,
121+
sampler=dict(type=DefaultSampler, shuffle=True),
122+
dataset=dict(
123+
type=RepeatDataset,
124+
times=2,
125+
dataset=dict(
126+
type=KittiDataset,
127+
data_root=data_root,
128+
ann_file='kitti_infos_train.pkl',
129+
data_prefix=dict(pts='training/velodyne_reduced'),
130+
pipeline=train_pipeline,
131+
modality=input_modality,
132+
test_mode=False,
133+
metainfo=metainfo,
134+
# we use box_type_3d='LiDAR' in kitti and nuscenes dataset
135+
# and box_type_3d='Depth' in sunrgbd and scannet dataset.
136+
box_type_3d='LiDAR',
137+
backend_args=backend_args)))
138+
val_dataloader = dict(
139+
batch_size=1,
140+
num_workers=1,
141+
persistent_workers=True,
142+
drop_last=False,
143+
sampler=dict(type=DefaultSampler, shuffle=False),
144+
dataset=dict(
145+
type=KittiDataset,
146+
data_root=data_root,
147+
data_prefix=dict(pts='training/velodyne_reduced'),
148+
ann_file='kitti_infos_val.pkl',
149+
pipeline=test_pipeline,
150+
modality=input_modality,
151+
test_mode=True,
152+
metainfo=metainfo,
153+
box_type_3d='LiDAR',
154+
backend_args=backend_args))
155+
test_dataloader = dict(
156+
batch_size=1,
157+
num_workers=1,
158+
persistent_workers=True,
159+
drop_last=False,
160+
sampler=dict(type=DefaultSampler, shuffle=False),
161+
dataset=dict(
162+
type=KittiDataset,
163+
data_root=data_root,
164+
data_prefix=dict(pts='training/velodyne_reduced'),
165+
ann_file='kitti_infos_val.pkl',
166+
pipeline=test_pipeline,
167+
modality=input_modality,
168+
test_mode=True,
169+
metainfo=metainfo,
170+
box_type_3d='LiDAR',
171+
backend_args=backend_args))
172+
val_evaluator = dict(
173+
type=KittiMetric,
174+
ann_file=data_root + 'kitti_infos_val.pkl',
175+
metric='bbox',
176+
backend_args=backend_args)
177+
test_evaluator = val_evaluator
178+
179+
vis_backends = [dict(type=LocalVisBackend)]
180+
visualizer = dict(
181+
type=Det3DLocalVisualizer, vis_backends=vis_backends, name='visualizer')
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
# Copyright (c) OpenMMLab. All rights reserved.
2+
from mmengine.dataset.dataset_wrapper import RepeatDataset
3+
from mmengine.dataset.sampler import DefaultSampler
4+
from mmengine.visualization.vis_backend import LocalVisBackend
5+
6+
from mmdet3d.datasets.kitti_dataset import KittiDataset
7+
from mmdet3d.datasets.transforms.formating import Pack3DDetInputs
8+
from mmdet3d.datasets.transforms.loading import (LoadAnnotations3D,
9+
LoadPointsFromFile)
10+
from mmdet3d.datasets.transforms.test_time_aug import MultiScaleFlipAug3D
11+
from mmdet3d.datasets.transforms.transforms_3d import ( # noqa
12+
GlobalRotScaleTrans, ObjectNoise, ObjectRangeFilter, ObjectSample,
13+
PointShuffle, PointsRangeFilter, RandomFlip3D)
14+
from mmdet3d.evaluation.metrics.kitti_metric import KittiMetric
15+
from mmdet3d.visualization.local_visualizer import Det3DLocalVisualizer
16+
17+
# dataset settings
18+
dataset_type = 'KittiDataset'
19+
data_root = 'data/kitti/'
20+
class_names = ['Car']
21+
point_cloud_range = [0, -40, -3, 70.4, 40, 1]
22+
input_modality = dict(use_lidar=True, use_camera=False)
23+
metainfo = dict(classes=class_names)
24+
25+
# Example to use different file client
26+
# Method 1: simply set the data root and let the file I/O module
27+
# automatically infer from prefix (not support LMDB and Memcache yet)
28+
29+
# data_root = 's3://openmmlab/datasets/detection3d/kitti/'
30+
31+
# Method 2: Use backend_args, file_client_args in versions before 1.1.0
32+
# backend_args = dict(
33+
# backend='petrel',
34+
# path_mapping=dict({
35+
# './data/': 's3://openmmlab/datasets/detection3d/',
36+
# 'data/': 's3://openmmlab/datasets/detection3d/'
37+
# }))
38+
backend_args = None
39+
40+
db_sampler = dict(
41+
data_root=data_root,
42+
info_path=data_root + 'kitti_dbinfos_train.pkl',
43+
rate=1.0,
44+
prepare=dict(filter_by_difficulty=[-1], filter_by_min_points=dict(Car=5)),
45+
classes=class_names,
46+
sample_groups=dict(Car=15),
47+
points_loader=dict(
48+
type=LoadPointsFromFile,
49+
coord_type='LIDAR',
50+
load_dim=4,
51+
use_dim=4,
52+
backend_args=backend_args),
53+
backend_args=backend_args)
54+
55+
train_pipeline = [
56+
dict(
57+
type=LoadPointsFromFile,
58+
coord_type='LIDAR',
59+
load_dim=4, # x, y, z, intensity
60+
use_dim=4,
61+
backend_args=backend_args),
62+
dict(type=LoadAnnotations3D, with_bbox_3d=True, with_label_3d=True),
63+
dict(type=ObjectSample, db_sampler=db_sampler),
64+
dict(
65+
type=ObjectNoise,
66+
num_try=100,
67+
translation_std=[1.0, 1.0, 0.5],
68+
global_rot_range=[0.0, 0.0],
69+
rot_range=[-0.78539816, 0.78539816]),
70+
dict(type=RandomFlip3D, flip_ratio_bev_horizontal=0.5),
71+
dict(
72+
type=GlobalRotScaleTrans,
73+
rot_range=[-0.78539816, 0.78539816],
74+
scale_ratio_range=[0.95, 1.05]),
75+
dict(type=PointsRangeFilter, point_cloud_range=point_cloud_range),
76+
dict(type=ObjectRangeFilter, point_cloud_range=point_cloud_range),
77+
dict(type=PointShuffle),
78+
dict(
79+
type=Pack3DDetInputs, keys=['points', 'gt_bboxes_3d', 'gt_labels_3d'])
80+
]
81+
test_pipeline = [
82+
dict(
83+
type=LoadPointsFromFile,
84+
coord_type='LIDAR',
85+
load_dim=4,
86+
use_dim=4,
87+
backend_args=backend_args),
88+
dict(
89+
type=MultiScaleFlipAug3D,
90+
img_scale=(1333, 800),
91+
pts_scale_ratio=1,
92+
flip=False,
93+
transforms=[
94+
dict(
95+
type=GlobalRotScaleTrans,
96+
rot_range=[0, 0],
97+
scale_ratio_range=[1., 1.],
98+
translation_std=[0, 0, 0]),
99+
dict(type=RandomFlip3D),
100+
dict(type=PointsRangeFilter, point_cloud_range=point_cloud_range)
101+
]),
102+
dict(type=Pack3DDetInputs, keys=['points'])
103+
]
104+
# construct a pipeline for data and gt loading in show function
105+
# please keep its loading function consistent with test_pipeline (e.g. client)
106+
eval_pipeline = [
107+
dict(
108+
type=LoadPointsFromFile,
109+
coord_type='LIDAR',
110+
load_dim=4,
111+
use_dim=4,
112+
backend_args=backend_args),
113+
dict(type=Pack3DDetInputs, keys=['points'])
114+
]
115+
train_dataloader = dict(
116+
batch_size=6,
117+
num_workers=4,
118+
persistent_workers=True,
119+
sampler=dict(type=DefaultSampler, shuffle=True),
120+
dataset=dict(
121+
type=RepeatDataset,
122+
times=2,
123+
dataset=dict(
124+
type=KittiDataset,
125+
data_root=data_root,
126+
ann_file='kitti_infos_train.pkl',
127+
data_prefix=dict(pts='training/velodyne_reduced'),
128+
pipeline=train_pipeline,
129+
modality=input_modality,
130+
test_mode=False,
131+
metainfo=metainfo,
132+
# we use box_type_3d='LiDAR' in kitti and nuscenes dataset
133+
# and box_type_3d='Depth' in sunrgbd and scannet dataset.
134+
box_type_3d='LiDAR',
135+
backend_args=backend_args)))
136+
val_dataloader = dict(
137+
batch_size=1,
138+
num_workers=1,
139+
persistent_workers=True,
140+
drop_last=False,
141+
sampler=dict(type=DefaultSampler, shuffle=False),
142+
dataset=dict(
143+
type=KittiDataset,
144+
data_root=data_root,
145+
data_prefix=dict(pts='training/velodyne_reduced'),
146+
ann_file='kitti_infos_val.pkl',
147+
pipeline=test_pipeline,
148+
modality=input_modality,
149+
test_mode=True,
150+
metainfo=metainfo,
151+
box_type_3d='LiDAR',
152+
backend_args=backend_args))
153+
test_dataloader = dict(
154+
batch_size=1,
155+
num_workers=1,
156+
persistent_workers=True,
157+
drop_last=False,
158+
sampler=dict(type=DefaultSampler, shuffle=False),
159+
dataset=dict(
160+
type=KittiDataset,
161+
data_root=data_root,
162+
data_prefix=dict(pts='training/velodyne_reduced'),
163+
ann_file='kitti_infos_val.pkl',
164+
pipeline=test_pipeline,
165+
modality=input_modality,
166+
test_mode=True,
167+
metainfo=metainfo,
168+
box_type_3d='LiDAR',
169+
backend_args=backend_args))
170+
val_evaluator = dict(
171+
type=KittiMetric,
172+
ann_file=data_root + 'kitti_infos_val.pkl',
173+
metric='bbox',
174+
backend_args=backend_args)
175+
test_evaluator = val_evaluator
176+
177+
vis_backends = [dict(type=LocalVisBackend)]
178+
visualizer = dict(
179+
type=Det3DLocalVisualizer, vis_backends=vis_backends, name='visualizer')

0 commit comments

Comments
 (0)