Commit 05a4def7 authored by yhcao6's avatar yhcao6
Browse files

add SSD512

parent c88ee7de
...@@ -11,6 +11,7 @@ from mmcv.runner import load_checkpoint ...@@ -11,6 +11,7 @@ from mmcv.runner import load_checkpoint
class SSDVGG(VGG): class SSDVGG(VGG):
extra_setting = { extra_setting = {
300: (256, 'S', 512, 128, 'S', 256, 128, 256, 128, 256), 300: (256, 'S', 512, 128, 'S', 256, 128, 256, 128, 256),
512: (256, 'S', 512, 128, 'S', 256, 128, 'S', 256, 128, 'S', 256, 128),
} }
def __init__(self, def __init__(self,
...@@ -27,9 +28,7 @@ class SSDVGG(VGG): ...@@ -27,9 +28,7 @@ class SSDVGG(VGG):
ceil_mode=ceil_mode, ceil_mode=ceil_mode,
out_indices=out_indices) out_indices=out_indices)
assert input_size in (300, 512) assert input_size in (300, 512)
# TODO: support 512 self.input_size = input_size
if input_size == 512:
raise NotImplementedError
self.features.add_module( self.features.add_module(
str(len(self.features)), str(len(self.features)),
...@@ -109,6 +108,8 @@ class SSDVGG(VGG): ...@@ -109,6 +108,8 @@ class SSDVGG(VGG):
layers.append(conv) layers.append(conv)
self.inplanes = outplanes[i] self.inplanes = outplanes[i]
num_layers += 1 num_layers += 1
if self.input_size == 512:
layers.append(nn.Conv2d(self.inplanes, 256, 4, padding=1))
return nn.Sequential(*layers) return nn.Sequential(*layers)
...@@ -125,3 +126,4 @@ class L2Norm(nn.Module): ...@@ -125,3 +126,4 @@ class L2Norm(nn.Module):
def forward(self, x): def forward(self, x):
norm = x.pow(2).sum(1, keepdim=True).sqrt() + self.eps norm = x.pow(2).sum(1, keepdim=True).sqrt() + self.eps
return self.weight[None, :, None, None].expand_as(x) * x / norm return self.weight[None, :, None, None].expand_as(x) * x / norm
...@@ -54,8 +54,12 @@ class SSDHead(nn.Module): ...@@ -54,8 +54,12 @@ class SSDHead(nn.Module):
for r in range(int(min_ratio), int(max_ratio) + 1, step): for r in range(int(min_ratio), int(max_ratio) + 1, step):
min_sizes.append(int(input_size * r / 100)) min_sizes.append(int(input_size * r / 100))
max_sizes.append(int(input_size * (r + step) / 100)) max_sizes.append(int(input_size * (r + step) / 100))
min_sizes.insert(0, int(input_size * 7 / 100)) if input_size == 300:
max_sizes.insert(0, int(input_size * 15 / 100)) min_sizes.insert(0, int(input_size * 7 / 100))
max_sizes.insert(0, int(input_size * 15 / 100))
elif input_size == 512:
min_sizes.insert(0, int(input_size * 4 / 100))
max_sizes.insert(0, int(input_size * 10 / 100))
self.anchor_generators = [] self.anchor_generators = []
self.anchor_strides = anchor_strides self.anchor_strides = anchor_strides
for k in range(len(anchor_strides)): for k in range(len(anchor_strides)):
......
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