-
Notifications
You must be signed in to change notification settings - Fork 7
/
td3d_is_s3dis-3d-13class_pretrain.py
167 lines (159 loc) · 4.96 KB
/
td3d_is_s3dis-3d-13class_pretrain.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
voxel_size = .02
padding = .08
n_points = 100000
class_names = ('ceiling', 'floor', 'wall', 'beam', 'column', 'window', 'door',
'table', 'chair', 'sofa', 'bookcase', 'board', 'clutter')
model = dict(
type='TD3DInstanceSegmentor',
voxel_size=voxel_size,
backbone=dict(type='MinkResNet', in_channels=3, depth=34, norm='batch', return_stem=True, stride=1),
neck=dict(
type='NgfcTinySegmentationNeck',
in_channels=(64, 128, 256, 512),
out_channels=128),
head=dict(
type='TD3DInstanceHead',
in_channels=128,
n_reg_outs=6,
n_classes=len(class_names),
n_levels=4,
padding=padding,
voxel_size=voxel_size,
unet=dict(
type='MinkUNet14B',
in_channels=32,
out_channels=len(class_names) + 1,
D=3),
first_assigner=dict(
type='S3DISAssigner',
top_pts_threshold=6,
label2level=[3, 3, 3, 3, 2, 2, 2, 2, 1, 2, 2, 1, 1]),
second_assigner=dict(
type='MaxIoU3DAssigner',
threshold=.25),
roi_extractor=dict(
type='Mink3DRoIExtractor',
voxel_size=voxel_size,
padding=padding,
min_pts_threshold=10)),
train_cfg=dict(num_rois=1),
test_cfg=dict(
nms_pre=700,
iou_thr=.2,
score_thr=.05,
binary_score_thr=0.2))
optimizer = dict(type='AdamW', lr=0.001, weight_decay=0.0001)
optimizer_config = dict(grad_clip=dict(max_norm=10, norm_type=2))
lr_config = dict(policy='step', warmup=None, step=[28, 32])
runner = dict(type='EpochBasedRunner', max_epochs=33)
custom_hooks = [dict(type='EmptyCacheHook', after_iter=True)]
checkpoint_config = dict(interval=1, max_keep_ckpts=50)
log_config = dict(
interval=50,
hooks=[
dict(type='TextLoggerHook'),
# dict(type='TensorboardLoggerHook')
])
dist_params = dict(backend='nccl')
log_level = 'INFO'
work_dir = None
load_from = "td3d_scannet.pth"
resume_from = None
workflow = [('train', 1)]
dataset_type = 'S3DISInstanceSegDataset'
data_root = './data/s3dis/'
train_area = [1, 2, 3, 4, 6]
test_area = 5
train_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_mask_3d=True,
with_seg_3d=True),
dict(type='PointSample', num_points=n_points),
dict(type='PointSegClassMappingV2',
valid_cat_ids=tuple(range(len(class_names))),
max_cat_id=13),
dict(
type='RandomFlip3D',
sync_2d=False,
flip_ratio_bev_horizontal=0.5,
flip_ratio_bev_vertical=0.5),
dict(
type='GlobalRotScaleTrans',
rot_range=[0, 0],
scale_ratio_range=[0.95, 1.05],
translation_std=[.1, .1, .1],
shift_height=False),
dict(
type='BboxRecalculation'),
dict(type='NormalizePointsColor', color_mean=None),
dict(type='DefaultFormatBundle3D', class_names=class_names),
dict(type='Collect3D', keys=['points', 'gt_bboxes_3d', 'gt_labels_3d',
'pts_semantic_mask', 'pts_instance_mask'])
]
test_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='MultiScaleFlipAug3D',
img_scale=(1333, 800),
pts_scale_ratio=1,
flip=False,
transforms=[
dict(type='NormalizePointsColor', color_mean=None),
dict(
type='DefaultFormatBundle3D',
class_names=class_names,
with_label=False),
dict(type='Collect3D', keys=['points'])
])
]
data = dict(
samples_per_gpu=4,
workers_per_gpu=6,
train=dict(
type='RepeatDataset',
times=13,
dataset=dict(
type='ConcatDataset',
datasets=[
dict(
type=dataset_type,
data_root=data_root,
ann_file=data_root + f's3dis_infos_Area_{i}.pkl',
pipeline=train_pipeline,
filter_empty_gt=True,
classes=class_names,
box_type_3d='Depth') for i in train_area
],
separate_eval=False)),
val=dict(
type=dataset_type,
data_root=data_root,
ann_file=data_root + f's3dis_infos_Area_{test_area}.pkl',
pipeline=test_pipeline,
filter_empty_gt=False,
classes=class_names,
test_mode=True,
box_type_3d='Depth'),
test=dict(
type=dataset_type,
data_root=data_root,
ann_file=data_root + f's3dis_infos_Area_{test_area}.pkl',
pipeline=test_pipeline,
filter_empty_gt=False,
classes=class_names,
test_mode=True,
box_type_3d='Depth'))