Skip to content

Commit

Permalink
add dcn
Browse files Browse the repository at this point in the history
  • Loading branch information
xieenze committed Oct 22, 2019
1 parent 3111f83 commit ccdec9f
Show file tree
Hide file tree
Showing 4 changed files with 433 additions and 1 deletion.
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,15 @@ Trained models can be download in [Google Drive](https://drive.google.com/drive/
| R-50 | caffe | Y | N | 1x | 32 | 8.9/23.9 | 29.1 |
| R-101 | caffe | Y | N | 1x | 32 | - | 30.4 |
| X-101 | pytorch | Y | N | 1x | 32 | - | 32.6 |
| R-50-DCN | caffe | Y | N | 1x | 32 | - | 32.0 |
| R-101-DCN | caffe | Y | N | 1x | 32 | - | 33.5 |
| X-101-DCN | pytorch | Y | N | 1x | 32 | - | 34.9 |
| R-50 | caffe | Y | Y | 2x | 32 | 8.9/23.9 | 30.5 |
| R-101 | caffe | Y | Y | 2x | 32 | - | 31.9 |
| X-101 | pytorch | Y | Y | 2x | 32 | - | 33.5 |
| X-101 | pytorch | Y | Y | 2x | 32 | - | 33.5 |
| R-50-DCN | caffe | Y | Y | 2x | 32 | - | 33.3 |
| R-101-DCN | caffe | Y | Y | 2x | 32 | - | xx.x |
| X-101-DCN | pytorch | Y | Y | 2x | 32 | - | xx.x |

**Notes:**
- The X-101 backbone is X-101-64x4d.
Expand Down
141 changes: 141 additions & 0 deletions configs/polarmask/32gpu/polar_640_800_2x_r101_dcn2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
# model settings
model = dict(
type='FCOS',
pretrained='open-mmlab://resnet101_caffe',
backbone=dict(
type='ResNet',
depth=101,
num_stages=4,
out_indices=(0, 1, 2, 3),
frozen_stages=1,
norm_cfg=dict(type='BN', requires_grad=False),
style='caffe',
dcn = dict(
modulated=False,
deformable_groups=1,
fallback_on_stride=False),
stage_with_dcn = (False, True, True, True)),
neck=dict(
type='FPN',
in_channels=[256, 512, 1024, 2048],
out_channels=256,
start_level=1,
add_extra_convs=True,
extra_convs_on_inputs=False, # use P5
num_outs=5,
relu_before_extra_convs=True),
bbox_head=dict(
type='FCOS_Instance_Head_MIOU_MSKCTNESS',
num_classes=81,
in_channels=256,
stacked_convs=4,
feat_channels=256,
strides=[8, 16, 32, 64, 128],
use_dcn=True,
loss_cls=dict(
type='FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=1.0),
loss_bbox=dict(type='IoULoss', loss_weight=1.0),
loss_centerness=dict(
type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0)))
# training and testing settings
train_cfg = dict(
assigner=dict(
type='MaxIoUAssigner',
pos_iou_thr=0.5,
neg_iou_thr=0.4,
min_pos_iou=0,
ignore_iof_thr=-1),
allowed_border=-1,
pos_weight=-1,
debug=False)
test_cfg = dict(
nms_pre=1000,
min_bbox_size=0,
score_thr=0.05,
nms=dict(type='nms', iou_thr=0.5),
max_per_img=100)
# dataset settings
dataset_type = 'Coco_Seg_Dataset'
data_root = 'data/coco/'
img_norm_cfg = dict(
mean=[102.9801, 115.9465, 122.7717], std=[1.0, 1.0, 1.0], to_rgb=False)
data = dict(
imgs_per_gpu=1,
workers_per_gpu=4,
train=dict(
type=dataset_type,
ann_file=data_root + 'annotations/instances_train2017.json',
img_prefix=data_root + 'train2017/',
img_scale=[(1333, 640), (1333, 800)],
multiscale_mode='range',
img_norm_cfg=img_norm_cfg,
size_divisor=128,
flip_ratio=0.5,
with_mask=True,
with_crowd=False,
with_label=True,
resize_keep_ratio=False),
val=dict(
type=dataset_type,
ann_file=data_root + 'annotations/instances_val2017.json',
img_prefix=data_root + 'val2017/',
img_scale=(1333, 800),
img_norm_cfg=img_norm_cfg,
size_divisor=128,
flip_ratio=0,
with_mask=False,
with_crowd=False,
with_label=True,
resize_keep_ratio=False),
test=dict(
type=dataset_type,
ann_file=data_root + 'annotations/instances_val2017.json',
img_prefix=data_root + 'val2017/',
img_scale=(1333, 800),
img_norm_cfg=img_norm_cfg,
size_divisor=128,
flip_ratio=0,
with_mask=False,
with_crowd=False,
with_label=False,
resize_keep_ratio=False,
test_mode=True))
# optimizer
lr_ratio = 2

optimizer = dict(
type='SGD',
lr=0.01 * lr_ratio,
momentum=0.9,
weight_decay=0.0001,
paramwise_options=dict(bias_lr_mult=2., bias_decay_mult=0.))
optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2))
# learning policy
lr_config = dict(
policy='step',
warmup='linear',
warmup_iters=2000 ,
warmup_ratio=1.0 / 3 / lr_ratio,
step=[16+2, 22+2])
checkpoint_config = dict(interval=1)
# yapf:disable
log_config = dict(
interval=10,
hooks=[
dict(type='TextLoggerHook'),
# dict(type='TensorboardLoggerHook')
])
# yapf:enable
# runtime settings
total_epochs = 24+2
device_ids = range(4)
dist_params = dict(backend='nccl')
log_level = 'INFO'
work_dir = './work_dirs/trash'
load_from = None
resume_from = None
workflow = [('train', 1)]
141 changes: 141 additions & 0 deletions configs/polarmask/32gpu/polar_640_800_2x_r50_dcn2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
# model settings
model = dict(
type='FCOS',
pretrained='open-mmlab://resnet50_caffe',
backbone=dict(
type='ResNet',
depth=50,
num_stages=4,
out_indices=(0, 1, 2, 3),
frozen_stages=1,
norm_cfg=dict(type='BN', requires_grad=False),
style='caffe',
dcn = dict(
modulated=False,
deformable_groups=1,
fallback_on_stride=False),
stage_with_dcn = (False, True, True, True)),
neck=dict(
type='FPN',
in_channels=[256, 512, 1024, 2048],
out_channels=256,
start_level=1,
add_extra_convs=True,
extra_convs_on_inputs=False, # use P5
num_outs=5,
relu_before_extra_convs=True),
bbox_head=dict(
type='FCOS_Instance_Head_MIOU_MSKCTNESS',
num_classes=81,
in_channels=256,
stacked_convs=4,
feat_channels=256,
strides=[8, 16, 32, 64, 128],
use_dcn=True,
loss_cls=dict(
type='FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=1.0),
loss_bbox=dict(type='IoULoss', loss_weight=1.0),
loss_centerness=dict(
type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0)))
# training and testing settings
train_cfg = dict(
assigner=dict(
type='MaxIoUAssigner',
pos_iou_thr=0.5,
neg_iou_thr=0.4,
min_pos_iou=0,
ignore_iof_thr=-1),
allowed_border=-1,
pos_weight=-1,
debug=False)
test_cfg = dict(
nms_pre=1000,
min_bbox_size=0,
score_thr=0.05,
nms=dict(type='nms', iou_thr=0.5),
max_per_img=100)
# dataset settings
dataset_type = 'Coco_Seg_Dataset'
data_root = 'data/coco/'
img_norm_cfg = dict(
mean=[102.9801, 115.9465, 122.7717], std=[1.0, 1.0, 1.0], to_rgb=False)
data = dict(
imgs_per_gpu=1,
workers_per_gpu=5,
train=dict(
type=dataset_type,
ann_file=data_root + 'annotations/instances_train2017.json',
img_prefix=data_root + 'train2017/',
img_scale=[(1333, 640), (1333, 800)],
multiscale_mode='range',
img_norm_cfg=img_norm_cfg,
size_divisor=128,
flip_ratio=0.5,
with_mask=True,
with_crowd=False,
with_label=True,
resize_keep_ratio=False),
val=dict(
type=dataset_type,
ann_file=data_root + 'annotations/instances_val2017.json',
img_prefix=data_root + 'val2017/',
img_scale=(1333, 800),
img_norm_cfg=img_norm_cfg,
size_divisor=128,
flip_ratio=0,
with_mask=False,
with_crowd=False,
with_label=True,
resize_keep_ratio=False),
test=dict(
type=dataset_type,
ann_file=data_root + 'annotations/instances_val2017.json',
img_prefix=data_root + 'val2017/',
img_scale=(1333, 800),
img_norm_cfg=img_norm_cfg,
size_divisor=128,
flip_ratio=0,
with_mask=False,
with_crowd=False,
with_label=False,
resize_keep_ratio=False,
test_mode=True))
# optimizer
lr_ratio = 2

optimizer = dict(
type='SGD',
lr=0.01 * lr_ratio,
momentum=0.9,
weight_decay=0.0001,
paramwise_options=dict(bias_lr_mult=2., bias_decay_mult=0.))
optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2))
# learning policy
lr_config = dict(
policy='step',
warmup='linear',
warmup_iters=2000 ,
warmup_ratio=1.0 / 3 / lr_ratio,
step=[16+2, 22+2])
checkpoint_config = dict(interval=1)
# yapf:disable
log_config = dict(
interval=10,
hooks=[
dict(type='TextLoggerHook'),
# dict(type='TensorboardLoggerHook')
])
# yapf:enable
# runtime settings
total_epochs = 24+2
device_ids = range(4)
dist_params = dict(backend='nccl')
log_level = 'INFO'
work_dir = './work_dirs/trash'
load_from = None
resume_from = None
workflow = [('train', 1)]
Loading

0 comments on commit ccdec9f

Please sign in to comment.