Unverified Commit 78c29c35 authored by Ziyi Wu's avatar Ziyi Wu Committed by GitHub
Browse files

[Enhance] Add pipeline for data loading (#430)

* reuse pipeline in scannet-det dataset

* reuse pipeline in kitti dataset

* reuse pipeline in lyft dataset

* reuse pipeline in sunrgbd dataset

* reuse pipeline in nuscenes dataset

* reuse pipeline in waymo dataset

* reuse pipeline in scannet-seg dataset

* add eval_pipeline in configs which have custom data pipelines

* move data loading via pipeline to dataset._extract_data() for clarity

* use eval_pipeline in tools/misc/visualize_results.py

* get_pipeline from self when no pipeline is provided

* fix small bugs

* fix small bugs

* simplify and clear code

* remove unnecessary eval_pipeline added

* add comment about why we set self.test_mode=False

* small fix

* modify docs about config
parent 80ef7fee
...@@ -79,6 +79,21 @@ test_pipeline = [ ...@@ -79,6 +79,21 @@ test_pipeline = [
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
]) ])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(
type='LoadPointsFromFile',
coord_type='LIDAR',
load_dim=4,
use_dim=4,
file_client_args=file_client_args),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
]
data = dict( data = dict(
samples_per_gpu=6, samples_per_gpu=6,
...@@ -122,4 +137,4 @@ data = dict( ...@@ -122,4 +137,4 @@ data = dict(
test_mode=True, test_mode=True,
box_type_3d='LiDAR')) box_type_3d='LiDAR'))
evaluation = dict(interval=1) evaluation = dict(interval=1, pipeline=eval_pipeline)
...@@ -77,6 +77,21 @@ test_pipeline = [ ...@@ -77,6 +77,21 @@ test_pipeline = [
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
]) ])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(
type='LoadPointsFromFile',
coord_type='LIDAR',
load_dim=4,
use_dim=4,
file_client_args=file_client_args),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
]
data = dict( data = dict(
samples_per_gpu=6, samples_per_gpu=6,
...@@ -120,4 +135,4 @@ data = dict( ...@@ -120,4 +135,4 @@ data = dict(
test_mode=True, test_mode=True,
box_type_3d='LiDAR')) box_type_3d='LiDAR'))
evaluation = dict(interval=1) evaluation = dict(interval=1, pipeline=eval_pipeline)
...@@ -82,6 +82,25 @@ test_pipeline = [ ...@@ -82,6 +82,25 @@ test_pipeline = [
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
]) ])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(
type='LoadPointsFromFile',
coord_type='LIDAR',
load_dim=5,
use_dim=5,
file_client_args=file_client_args),
dict(
type='LoadPointsFromMultiSweeps',
sweeps_num=10,
file_client_args=file_client_args),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
]
data = dict( data = dict(
samples_per_gpu=2, samples_per_gpu=2,
...@@ -114,4 +133,4 @@ data = dict( ...@@ -114,4 +133,4 @@ data = dict(
# Since the models are trained by 24 epochs by default, we set evaluation # Since the models are trained by 24 epochs by default, we set evaluation
# interval to be 24. Please change the interval accordingly if you do not # interval to be 24. Please change the interval accordingly if you do not
# use a default schedule. # use a default schedule.
evaluation = dict(interval=24) evaluation = dict(interval=24, pipeline=eval_pipeline)
...@@ -83,6 +83,25 @@ test_pipeline = [ ...@@ -83,6 +83,25 @@ test_pipeline = [
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
]) ])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(
type='LoadPointsFromFile',
coord_type='LIDAR',
load_dim=5,
use_dim=5,
file_client_args=file_client_args),
dict(
type='LoadPointsFromMultiSweeps',
sweeps_num=10,
file_client_args=file_client_args),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
]
data = dict( data = dict(
samples_per_gpu=4, samples_per_gpu=4,
...@@ -120,4 +139,4 @@ data = dict( ...@@ -120,4 +139,4 @@ data = dict(
# Since the models are trained by 24 epochs by default, we set evaluation # Since the models are trained by 24 epochs by default, we set evaluation
# interval to be 24. Please change the interval accordingly if you do not # interval to be 24. Please change the interval accordingly if you do not
# use a default schedule. # use a default schedule.
evaluation = dict(interval=24) evaluation = dict(interval=24, pipeline=eval_pipeline)
...@@ -82,6 +82,25 @@ test_pipeline = [ ...@@ -82,6 +82,25 @@ test_pipeline = [
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
]) ])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(
type='LoadPointsFromFile',
coord_type='LIDAR',
load_dim=5,
use_dim=5,
file_client_args=file_client_args),
dict(
type='LoadPointsFromMultiSweeps',
sweeps_num=10,
file_client_args=file_client_args),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
]
data = dict( data = dict(
samples_per_gpu=2, samples_per_gpu=2,
...@@ -114,4 +133,4 @@ data = dict( ...@@ -114,4 +133,4 @@ data = dict(
# Since the models are trained by 24 epochs by default, we set evaluation # Since the models are trained by 24 epochs by default, we set evaluation
# interval to be 24. Please change the interval accordingly if you do not # interval to be 24. Please change the interval accordingly if you do not
# use a default schedule. # use a default schedule.
evaluation = dict(interval=24) evaluation = dict(interval=24, pipeline=eval_pipeline)
...@@ -72,6 +72,21 @@ test_pipeline = [ ...@@ -72,6 +72,21 @@ test_pipeline = [
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
]) ])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(
type='LoadPointsFromFile',
coord_type='DEPTH',
shift_height=False,
load_dim=6,
use_dim=[0, 1, 2]),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
]
data = dict( data = dict(
samples_per_gpu=8, samples_per_gpu=8,
...@@ -105,3 +120,5 @@ data = dict( ...@@ -105,3 +120,5 @@ data = dict(
classes=class_names, classes=class_names,
test_mode=True, test_mode=True,
box_type_3d='Depth')) box_type_3d='Depth'))
evaluation = dict(pipeline=eval_pipeline)
...@@ -47,6 +47,33 @@ test_pipeline = [ ...@@ -47,6 +47,33 @@ test_pipeline = [
dict(type='DefaultFormatBundle3D', class_names=class_names), dict(type='DefaultFormatBundle3D', class_names=class_names),
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
# we need to load gt seg_mask!
eval_pipeline = [
dict(
type='LoadPointsFromFile',
coord_type='DEPTH',
shift_height=False,
use_color=True,
load_dim=6,
use_dim=[0, 1, 2, 3, 4, 5]),
dict(
type='LoadAnnotations3D',
with_bbox_3d=False,
with_label_3d=False,
with_mask_3d=False,
with_seg_3d=True),
dict(
type='PointSegClassMapping',
valid_cat_ids=(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 24, 28,
33, 34, 36, 39)),
dict(
type='DefaultFormatBundle3D',
with_label=False,
class_names=class_names),
dict(type='Collect3D', keys=['points', 'pts_semantic_mask'])
]
data = dict( data = dict(
samples_per_gpu=8, samples_per_gpu=8,
...@@ -77,3 +104,5 @@ data = dict( ...@@ -77,3 +104,5 @@ data = dict(
classes=class_names, classes=class_names,
test_mode=True, test_mode=True,
ignore_index=len(class_names))) ignore_index=len(class_names)))
evaluation = dict(pipeline=eval_pipeline)
...@@ -55,6 +55,21 @@ test_pipeline = [ ...@@ -55,6 +55,21 @@ test_pipeline = [
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
]) ])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(
type='LoadPointsFromFile',
coord_type='DEPTH',
shift_height=False,
load_dim=6,
use_dim=[0, 1, 2]),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
]
data = dict( data = dict(
samples_per_gpu=16, samples_per_gpu=16,
...@@ -88,3 +103,5 @@ data = dict( ...@@ -88,3 +103,5 @@ data = dict(
classes=class_names, classes=class_names,
test_mode=True, test_mode=True,
box_type_3d='Depth')) box_type_3d='Depth'))
evaluation = dict(pipeline=eval_pipeline)
...@@ -85,6 +85,21 @@ test_pipeline = [ ...@@ -85,6 +85,21 @@ test_pipeline = [
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
]) ])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(
type='LoadPointsFromFile',
coord_type='LIDAR',
load_dim=6,
use_dim=5,
file_client_args=file_client_args),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
]
data = dict( data = dict(
samples_per_gpu=2, samples_per_gpu=2,
...@@ -127,4 +142,4 @@ data = dict( ...@@ -127,4 +142,4 @@ data = dict(
test_mode=True, test_mode=True,
box_type_3d='LiDAR')) box_type_3d='LiDAR'))
evaluation = dict(interval=24) evaluation = dict(interval=24, pipeline=eval_pipeline)
...@@ -83,6 +83,21 @@ test_pipeline = [ ...@@ -83,6 +83,21 @@ test_pipeline = [
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
]) ])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(
type='LoadPointsFromFile',
coord_type='LIDAR',
load_dim=6,
use_dim=5,
file_client_args=file_client_args),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
]
data = dict( data = dict(
samples_per_gpu=2, samples_per_gpu=2,
...@@ -125,4 +140,4 @@ data = dict( ...@@ -125,4 +140,4 @@ data = dict(
test_mode=True, test_mode=True,
box_type_3d='LiDAR')) box_type_3d='LiDAR'))
evaluation = dict(interval=24) evaluation = dict(interval=24, pipeline=eval_pipeline)
...@@ -253,6 +253,16 @@ test_pipeline = [ ...@@ -253,6 +253,16 @@ test_pipeline = [
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
]) ])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(type='LoadPointsFromFile', coord_type='LIDAR', load_dim=4, use_dim=4),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
]
data = dict( data = dict(
samples_per_gpu=4, samples_per_gpu=4,
...@@ -302,7 +312,7 @@ momentum_config = dict( ...@@ -302,7 +312,7 @@ momentum_config = dict(
cyclic_times=1, cyclic_times=1,
step_ratio_up=0.4) step_ratio_up=0.4)
checkpoint_config = dict(interval=1) checkpoint_config = dict(interval=1)
evaluation = dict(interval=1) evaluation = dict(interval=1, pipeline=eval_pipeline)
# yapf:disable # yapf:disable
log_config = dict( log_config = dict(
interval=50, interval=50,
......
...@@ -115,6 +115,16 @@ test_pipeline = [ ...@@ -115,6 +115,16 @@ test_pipeline = [
with_label=False), with_label=False),
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(type='LoadPointsFromFile', coord_type='LIDAR', load_dim=4, use_dim=4),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
]
data = dict( data = dict(
samples_per_gpu=3, samples_per_gpu=3,
...@@ -172,7 +182,7 @@ momentum_config = dict( ...@@ -172,7 +182,7 @@ momentum_config = dict(
cyclic_times=1, cyclic_times=1,
step_ratio_up=0.4) step_ratio_up=0.4)
checkpoint_config = dict(interval=1) checkpoint_config = dict(interval=1)
evaluation = dict(interval=1) evaluation = dict(interval=1, pipeline=eval_pipeline)
# yapf:disable # yapf:disable
log_config = dict( log_config = dict(
interval=50, interval=50,
......
...@@ -161,6 +161,16 @@ test_pipeline = [ ...@@ -161,6 +161,16 @@ test_pipeline = [
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
]) ])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(type='LoadPointsFromFile', coord_type='LIDAR', load_dim=4, use_dim=4),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
]
data = dict( data = dict(
samples_per_gpu=4, samples_per_gpu=4,
...@@ -215,7 +225,7 @@ momentum_config = dict( ...@@ -215,7 +225,7 @@ momentum_config = dict(
cyclic_times=1, cyclic_times=1,
step_ratio_up=0.4) step_ratio_up=0.4)
checkpoint_config = dict(interval=1) checkpoint_config = dict(interval=1)
evaluation = dict(interval=2) evaluation = dict(interval=2, pipeline=eval_pipeline)
# yapf:disable # yapf:disable
log_config = dict( log_config = dict(
interval=50, interval=50,
......
...@@ -168,6 +168,21 @@ test_pipeline = [ ...@@ -168,6 +168,21 @@ test_pipeline = [
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
]) ])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(
type='LoadPointsFromFile',
coord_type='LIDAR',
load_dim=4,
use_dim=4,
file_client_args=file_client_args),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
]
data = dict( data = dict(
samples_per_gpu=4, samples_per_gpu=4,
...@@ -217,7 +232,7 @@ momentum_config = dict( ...@@ -217,7 +232,7 @@ momentum_config = dict(
cyclic_times=1, cyclic_times=1,
step_ratio_up=0.4) step_ratio_up=0.4)
checkpoint_config = dict(interval=1) checkpoint_config = dict(interval=1)
evaluation = dict(interval=2) evaluation = dict(interval=2, pipeline=eval_pipeline)
# yapf:disable # yapf:disable
log_config = dict( log_config = dict(
interval=50, interval=50,
......
...@@ -128,6 +128,28 @@ test_pipeline = [ ...@@ -128,6 +128,28 @@ test_pipeline = [
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
]) ])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(
type='LoadPointsFromFile',
coord_type='LIDAR',
load_dim=5,
use_dim=5,
file_client_args=file_client_args),
dict(
type='LoadPointsFromMultiSweeps',
sweeps_num=9,
use_dim=[0, 1, 2, 3, 4],
file_client_args=file_client_args,
pad_empty_sweeps=True,
remove_close=True),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
]
data = dict( data = dict(
train=dict( train=dict(
...@@ -146,4 +168,4 @@ data = dict( ...@@ -146,4 +168,4 @@ data = dict(
val=dict(pipeline=test_pipeline, classes=class_names), val=dict(pipeline=test_pipeline, classes=class_names),
test=dict(pipeline=test_pipeline, classes=class_names)) test=dict(pipeline=test_pipeline, classes=class_names))
evaluation = dict(interval=20) evaluation = dict(interval=20, pipeline=eval_pipeline)
...@@ -127,6 +127,28 @@ test_pipeline = [ ...@@ -127,6 +127,28 @@ test_pipeline = [
dict(type='Collect3D', keys=['points']) dict(type='Collect3D', keys=['points'])
]) ])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(
type='LoadPointsFromFile',
coord_type='LIDAR',
load_dim=5,
use_dim=5,
file_client_args=file_client_args),
dict(
type='LoadPointsFromMultiSweeps',
sweeps_num=9,
use_dim=[0, 1, 2, 3, 4],
file_client_args=file_client_args,
pad_empty_sweeps=True,
remove_close=True),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
]
data = dict( data = dict(
train=dict( train=dict(
...@@ -145,4 +167,4 @@ data = dict( ...@@ -145,4 +167,4 @@ data = dict(
val=dict(pipeline=test_pipeline, classes=class_names), val=dict(pipeline=test_pipeline, classes=class_names),
test=dict(pipeline=test_pipeline, classes=class_names)) test=dict(pipeline=test_pipeline, classes=class_names))
evaluation = dict(interval=20) evaluation = dict(interval=20, pipeline=eval_pipeline)
...@@ -65,5 +65,5 @@ train_pipeline = [ ...@@ -65,5 +65,5 @@ train_pipeline = [
data = dict(train=dict(pipeline=train_pipeline)) data = dict(train=dict(pipeline=train_pipeline))
lr_config = dict(step=[28, 34]) lr_config = dict(step=[28, 34])
evaluation = dict(interval=36)
runner = dict(max_epochs=36) runner = dict(max_epochs=36)
evaluation = dict(interval=36)
...@@ -65,5 +65,5 @@ train_pipeline = [ ...@@ -65,5 +65,5 @@ train_pipeline = [
data = dict(train=dict(pipeline=train_pipeline)) data = dict(train=dict(pipeline=train_pipeline))
lr_config = dict(step=[28, 34]) lr_config = dict(step=[28, 34])
evaluation = dict(interval=36)
runner = dict(max_epochs=36) runner = dict(max_epochs=36)
evaluation = dict(interval=36)
...@@ -233,11 +233,28 @@ test_pipeline = [ ...@@ -233,11 +233,28 @@ test_pipeline = [
dict(type='Collect3D', keys=['img', 'points', 'calib']) dict(type='Collect3D', keys=['img', 'points', 'calib'])
]), ]),
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(type='LoadImageFromFile'),
dict(
type='LoadPointsFromFile',
coord_type='DEPTH',
shift_height=False,
load_dim=6,
use_dim=[0, 1, 2]),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['img', 'points', 'calib'])
]
data = dict( data = dict(
train=dict(dataset=dict(pipeline=train_pipeline)), train=dict(dataset=dict(pipeline=train_pipeline)),
val=dict(pipeline=test_pipeline), val=dict(pipeline=test_pipeline),
test=dict(pipeline=test_pipeline)) test=dict(pipeline=test_pipeline))
evaluation = dict(pipeline=eval_pipeline)
# may also use your own pre-trained image branch # may also use your own pre-trained image branch
load_from = 'https://download.openmmlab.com/mmdetection3d/v0.1.0_models/imvotenet/imvotenet_faster_rcnn_r50_fpn_2x4_sunrgbd-3d-10class/imvotenet_faster_rcnn_r50_fpn_2x4_sunrgbd-3d-10class_20210323_173222-cad62aeb.pth' # noqa load_from = 'https://download.openmmlab.com/mmdetection3d/v0.1.0_models/imvotenet/imvotenet_faster_rcnn_r50_fpn_2x4_sunrgbd-3d-10class/imvotenet_faster_rcnn_r50_fpn_2x4_sunrgbd-3d-10class_20210323_173222-cad62aeb.pth' # noqa
...@@ -186,6 +186,17 @@ test_pipeline = [ ...@@ -186,6 +186,17 @@ test_pipeline = [
dict(type='Collect3D', keys=['points', 'img']) dict(type='Collect3D', keys=['points', 'img'])
]) ])
] ]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
dict(type='LoadPointsFromFile', coord_type='LIDAR', load_dim=4, use_dim=4),
dict(type='LoadImageFromFile'),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points', 'img'])
]
data = dict( data = dict(
samples_per_gpu=2, samples_per_gpu=2,
...@@ -246,7 +257,7 @@ log_config = dict( ...@@ -246,7 +257,7 @@ log_config = dict(
dict(type='TensorboardLoggerHook') dict(type='TensorboardLoggerHook')
]) ])
# yapf:enable # yapf:enable
evaluation = dict(interval=1) evaluation = dict(interval=1, pipeline=eval_pipeline)
# runtime settings # runtime settings
runner = dict(max_epochs=40) runner = dict(max_epochs=40)
dist_params = dict(backend='nccl') dist_params = dict(backend='nccl')
......
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