Commit f0ecb9d5 authored by yhcao6's avatar yhcao6
Browse files

update center of base anchor to be half of stride

parent 2de84ef8
...@@ -51,7 +51,7 @@ data = dict( ...@@ -51,7 +51,7 @@ data = dict(
workers_per_gpu=2, workers_per_gpu=2,
train=dict( train=dict(
type='RepeatDataset', type='RepeatDataset',
times=20, times=10,
dataset=dict( dataset=dict(
type=dataset_type, type=dataset_type,
ann_file=[ ann_file=[
...@@ -113,7 +113,7 @@ lr_config = dict( ...@@ -113,7 +113,7 @@ lr_config = dict(
warmup='linear', warmup='linear',
warmup_iters=500, warmup_iters=500,
warmup_ratio=1.0 / 3, warmup_ratio=1.0 / 3,
step=[8, 11]) step=[16, 20])
checkpoint_config = dict(interval=1) checkpoint_config = dict(interval=1)
# yapf:disable # yapf:disable
log_config = dict( log_config = dict(
...@@ -124,7 +124,7 @@ log_config = dict( ...@@ -124,7 +124,7 @@ log_config = dict(
]) ])
# yapf:enable # yapf:enable
# runtime settings # runtime settings
total_epochs = 12 total_epochs = 24
dist_params = dict(backend='nccl') dist_params = dict(backend='nccl')
log_level = 'INFO' log_level = 'INFO'
work_dir = './work_dirs/ssd300_voc' work_dir = './work_dirs/ssd300_voc'
......
...@@ -51,7 +51,7 @@ data = dict( ...@@ -51,7 +51,7 @@ data = dict(
workers_per_gpu=2, workers_per_gpu=2,
train=dict( train=dict(
type='RepeatDataset', type='RepeatDataset',
times=20, times=10,
dataset=dict( dataset=dict(
type=dataset_type, type=dataset_type,
ann_file=[ ann_file=[
...@@ -113,7 +113,7 @@ lr_config = dict( ...@@ -113,7 +113,7 @@ lr_config = dict(
warmup='linear', warmup='linear',
warmup_iters=500, warmup_iters=500,
warmup_ratio=1.0 / 3, warmup_ratio=1.0 / 3,
step=[8, 11]) step=[16, 20])
checkpoint_config = dict(interval=1) checkpoint_config = dict(interval=1)
# yapf:disable # yapf:disable
log_config = dict( log_config = dict(
...@@ -124,7 +124,7 @@ log_config = dict( ...@@ -124,7 +124,7 @@ log_config = dict(
]) ])
# yapf:enable # yapf:enable
# runtime settings # runtime settings
total_epochs = 12 total_epochs = 24
dist_params = dict(backend='nccl') dist_params = dict(backend='nccl')
log_level = 'INFO' log_level = 'INFO'
work_dir = './work_dirs/ssd512_voc' work_dir = './work_dirs/ssd512_voc'
......
...@@ -51,7 +51,7 @@ data = dict( ...@@ -51,7 +51,7 @@ data = dict(
workers_per_gpu=3, workers_per_gpu=3,
train=dict( train=dict(
type='RepeatDataset', type='RepeatDataset',
times=10, times=5,
dataset=dict( dataset=dict(
type=dataset_type, type=dataset_type,
ann_file=data_root + 'annotations/instances_train2017.json', ann_file=data_root + 'annotations/instances_train2017.json',
...@@ -110,7 +110,7 @@ lr_config = dict( ...@@ -110,7 +110,7 @@ lr_config = dict(
warmup='linear', warmup='linear',
warmup_iters=500, warmup_iters=500,
warmup_ratio=1.0 / 3, warmup_ratio=1.0 / 3,
step=[8, 11]) step=[16, 22])
checkpoint_config = dict(interval=1) checkpoint_config = dict(interval=1)
# yapf:disable # yapf:disable
log_config = dict( log_config = dict(
...@@ -121,7 +121,7 @@ log_config = dict( ...@@ -121,7 +121,7 @@ log_config = dict(
]) ])
# yapf:enable # yapf:enable
# runtime settings # runtime settings
total_epochs = 12 total_epochs = 24
dist_params = dict(backend='nccl') dist_params = dict(backend='nccl')
log_level = 'INFO' log_level = 'INFO'
work_dir = './work_dirs/ssd300_coco' work_dir = './work_dirs/ssd300_coco'
......
...@@ -51,7 +51,7 @@ data = dict( ...@@ -51,7 +51,7 @@ data = dict(
workers_per_gpu=3, workers_per_gpu=3,
train=dict( train=dict(
type='RepeatDataset', type='RepeatDataset',
times=10, times=5,
dataset=dict( dataset=dict(
type=dataset_type, type=dataset_type,
ann_file=data_root + 'annotations/instances_train2017.json', ann_file=data_root + 'annotations/instances_train2017.json',
...@@ -110,7 +110,7 @@ lr_config = dict( ...@@ -110,7 +110,7 @@ lr_config = dict(
warmup='linear', warmup='linear',
warmup_iters=500, warmup_iters=500,
warmup_ratio=1.0 / 3, warmup_ratio=1.0 / 3,
step=[8, 11]) step=[16, 22])
checkpoint_config = dict(interval=1) checkpoint_config = dict(interval=1)
# yapf:disable # yapf:disable
log_config = dict( log_config = dict(
...@@ -121,7 +121,7 @@ log_config = dict( ...@@ -121,7 +121,7 @@ log_config = dict(
]) ])
# yapf:enable # yapf:enable
# runtime settings # runtime settings
total_epochs = 12 total_epochs = 24
dist_params = dict(backend='nccl') dist_params = dict(backend='nccl')
log_level = 'INFO' log_level = 'INFO'
work_dir = './work_dirs/ssd512_coco' work_dir = './work_dirs/ssd512_coco'
......
...@@ -3,11 +3,12 @@ import torch ...@@ -3,11 +3,12 @@ import torch
class AnchorGenerator(object): class AnchorGenerator(object):
def __init__(self, base_size, scales, ratios, scale_major=True): def __init__(self, base_size, scales, ratios, scale_major=True, ctr=None):
self.base_size = base_size self.base_size = base_size
self.scales = torch.Tensor(scales) self.scales = torch.Tensor(scales)
self.ratios = torch.Tensor(ratios) self.ratios = torch.Tensor(ratios)
self.scale_major = scale_major self.scale_major = scale_major
self.ctr = ctr
self.base_anchors = self.gen_base_anchors() self.base_anchors = self.gen_base_anchors()
@property @property
...@@ -15,13 +16,13 @@ class AnchorGenerator(object): ...@@ -15,13 +16,13 @@ class AnchorGenerator(object):
return self.base_anchors.size(0) return self.base_anchors.size(0)
def gen_base_anchors(self): def gen_base_anchors(self):
base_anchor = torch.Tensor( w = self.base_size
[0, 0, self.base_size - 1, self.base_size - 1]) h = self.base_size
if self.ctr is None:
w = base_anchor[2] - base_anchor[0] + 1 x_ctr = 0.5 * (w - 1)
h = base_anchor[3] - base_anchor[1] + 1 y_ctr = 0.5 * (h - 1)
x_ctr = base_anchor[0] + 0.5 * (w - 1) else:
y_ctr = base_anchor[1] + 0.5 * (h - 1) x_ctr, y_ctr = self.ctr
h_ratios = torch.sqrt(self.ratios) h_ratios = torch.sqrt(self.ratios)
w_ratios = 1 / h_ratios w_ratios = 1 / h_ratios
......
...@@ -72,12 +72,14 @@ class SSDHead(nn.Module): ...@@ -72,12 +72,14 @@ class SSDHead(nn.Module):
self.anchor_strides = anchor_strides self.anchor_strides = anchor_strides
for k in range(len(anchor_strides)): for k in range(len(anchor_strides)):
base_size = min_sizes[k] base_size = min_sizes[k]
stride = anchor_strides[k]
ctr = ((stride - 1) / 2., (stride - 1) / 2.)
scales = [1., np.sqrt(max_sizes[k] / min_sizes[k])] scales = [1., np.sqrt(max_sizes[k] / min_sizes[k])]
ratios = [1.] ratios = [1.]
for r in anchor_ratios[k]: for r in anchor_ratios[k]:
ratios += [1 / r, r] # 4 or 6 ratio ratios += [1 / r, r] # 4 or 6 ratio
anchor_generator = AnchorGenerator( anchor_generator = AnchorGenerator(
base_size, scales, ratios, scale_major=False) base_size, scales, ratios, scale_major=False, ctr=ctr)
indices = list(range(len(ratios))) indices = list(range(len(ratios)))
indices.insert(1, len(indices)) indices.insert(1, len(indices))
anchor_generator.base_anchors = torch.index_select( anchor_generator.base_anchors = torch.index_select(
......
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