Skip to content

Commit 6e6edfa

Browse files
authored
[CodeCamp2023-516]Add new configuration files for Cylinder3D (#2681)
1 parent 48fd72f commit 6e6edfa

File tree

4 files changed

+181
-0
lines changed

4 files changed

+181
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Copyright (c) OpenMMLab. All rights reserved.
2+
from mmdet3d.models import Cylinder3D
3+
from mmdet3d.models.backbones import Asymm3DSpconv
4+
from mmdet3d.models.data_preprocessors import Det3DDataPreprocessor
5+
from mmdet3d.models.decode_heads.cylinder3d_head import Cylinder3DHead
6+
from mmdet3d.models.losses import LovaszLoss
7+
from mmdet3d.models.voxel_encoders import SegVFE
8+
9+
grid_shape = [480, 360, 32]
10+
model = dict(
11+
type=Cylinder3D,
12+
data_preprocessor=dict(
13+
type=Det3DDataPreprocessor,
14+
voxel=True,
15+
voxel_type='cylindrical',
16+
voxel_layer=dict(
17+
grid_shape=grid_shape,
18+
point_cloud_range=[0, -3.14159265359, -4, 50, 3.14159265359, 2],
19+
max_num_points=-1,
20+
max_voxels=-1,
21+
),
22+
),
23+
voxel_encoder=dict(
24+
type=SegVFE,
25+
feat_channels=[64, 128, 256, 256],
26+
in_channels=6,
27+
with_voxel_center=True,
28+
feat_compression=16,
29+
return_point_feats=False),
30+
backbone=dict(
31+
type=Asymm3DSpconv,
32+
grid_size=grid_shape,
33+
input_channels=16,
34+
base_channels=32,
35+
norm_cfg=dict(type='BN1d', eps=1e-5, momentum=0.1)),
36+
decode_head=dict(
37+
type=Cylinder3DHead,
38+
channels=128,
39+
num_classes=20,
40+
loss_ce=dict(
41+
type='mmdet.CrossEntropyLoss',
42+
use_sigmoid=False,
43+
class_weight=None,
44+
loss_weight=1.0),
45+
loss_lovasz=dict(type=LovaszLoss, loss_weight=1.0, reduction='none'),
46+
),
47+
train_cfg=None,
48+
test_cfg=dict(mode='whole'),
49+
)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Copyright (c) OpenMMLab. All rights reserved.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Copyright (c) OpenMMLab. All rights reserved.
2+
from mmengine import read_base
3+
4+
with read_base():
5+
from .._base_.datasets.semantickitti import *
6+
from .._base_.models.cylinder3d import *
7+
from .._base_.default_runtime import *
8+
9+
from mmengine.optim.optimizer.optimizer_wrapper import OptimWrapper
10+
from mmengine.optim.scheduler.lr_scheduler import LinearLR, MultiStepLR
11+
from mmengine.runner.loops import EpochBasedTrainLoop, TestLoop, ValLoop
12+
from torch.optim import AdamW
13+
14+
# optimizer
15+
lr = 0.001
16+
optim_wrapper = dict(
17+
type=OptimWrapper, optimizer=dict(type=AdamW, lr=lr, weight_decay=0.01))
18+
19+
train_cfg = dict(type=EpochBasedTrainLoop, max_epochs=36, val_interval=1)
20+
val_cfg = dict(type=ValLoop)
21+
test_cfg = dict(type=TestLoop)
22+
23+
# learning rate
24+
param_scheduler = [
25+
dict(type=LinearLR, start_factor=0.001, by_epoch=False, begin=0, end=1000),
26+
dict(
27+
type=MultiStepLR,
28+
begin=0,
29+
end=36,
30+
by_epoch=True,
31+
milestones=[30],
32+
gamma=0.1)
33+
]
34+
35+
train_dataloader.update(dict(batch_size=4, ))
36+
37+
# Default setting for scaling LR automatically
38+
# - `enable` means enable scaling LR automatically
39+
# or not by default.
40+
# - `base_batch_size` = (8 GPUs) x (4 samples per GPU).
41+
# auto_scale_lr = dict(enable=False, base_batch_size=32)
42+
43+
default_hooks.update(dict(checkpoint=dict(type=CheckpointHook, interval=5)))
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# Copyright (c) OpenMMLab. All rights reserved.
2+
from mmengine import read_base
3+
4+
with read_base():
5+
from .._base_.datasets.semantickitti import *
6+
from .._base_.default_runtime import *
7+
from .._base_.models.cylinder3d import *
8+
from .._base_.schedules.schedule_3x import *
9+
10+
from mmcv.transforms.wrappers import RandomChoice
11+
12+
from mmdet3d.datasets.transforms.transforms_3d import LaserMix, PolarMix
13+
14+
train_pipeline = [
15+
dict(type=LoadPointsFromFile, coord_type='LIDAR', load_dim=4, use_dim=4),
16+
dict(
17+
type=LoadAnnotations3D,
18+
with_bbox_3d=False,
19+
with_label_3d=False,
20+
with_seg_3d=True,
21+
seg_3d_dtype='np.int32',
22+
seg_offset=2**16,
23+
dataset_type='semantickitti'),
24+
dict(type=PointSegClassMapping),
25+
dict(
26+
type=RandomChoice,
27+
transforms=[
28+
[
29+
dict(
30+
type=LaserMix,
31+
num_areas=[3, 4, 5, 6],
32+
pitch_angles=[-25, 3],
33+
pre_transform=[
34+
dict(
35+
type=LoadPointsFromFile,
36+
coord_type='LIDAR',
37+
load_dim=4,
38+
use_dim=4),
39+
dict(
40+
type=LoadAnnotations3D,
41+
with_bbox_3d=False,
42+
with_label_3d=False,
43+
with_seg_3d=True,
44+
seg_3d_dtype='np.int32',
45+
seg_offset=2**16,
46+
dataset_type='semantickitti'),
47+
dict(type=PointSegClassMapping)
48+
],
49+
prob=1)
50+
],
51+
[
52+
dict(
53+
type=PolarMix,
54+
instance_classes=[0, 1, 2, 3, 4, 5, 6, 7],
55+
swap_ratio=0.5,
56+
rotate_paste_ratio=1.0,
57+
pre_transform=[
58+
dict(
59+
type=LoadPointsFromFile,
60+
coord_type='LIDAR',
61+
load_dim=4,
62+
use_dim=4),
63+
dict(
64+
type=LoadAnnotations3D,
65+
with_bbox_3d=False,
66+
with_label_3d=False,
67+
with_seg_3d=True,
68+
seg_3d_dtype='np.int32',
69+
seg_offset=2**16,
70+
dataset_type='semantickitti'),
71+
dict(type=PointSegClassMapping)
72+
],
73+
prob=1)
74+
],
75+
],
76+
prob=[0.5, 0.5]),
77+
dict(
78+
type=GlobalRotScaleTrans,
79+
rot_range=[0., 6.28318531],
80+
scale_ratio_range=[0.95, 1.05],
81+
translation_std=[0, 0, 0],
82+
),
83+
dict(type=Pack3DDetInputs, keys=['points', 'pts_semantic_mask'])
84+
]
85+
86+
train_dataloader.update(dict(dataset=dict(pipeline=train_pipeline)))
87+
88+
default_hooks.update(dict(checkpoint=dict(type=CheckpointHook, interval=1)))

0 commit comments

Comments
 (0)