提交 c755cdff 编写于 作者: G Guanghua Yu 提交者: qingqing01

Fix mobilenet scale in ssd (#2935)

上级 ebee6565
architecture: SSD architecture: SSD
max_iters: 28000
train_feed: SSDTrainFeed train_feed: SSDTrainFeed
eval_feed: SSDEvalFeed eval_feed: SSDEvalFeed
test_feed: SSDTestFeed test_feed: SSDTestFeed
pretrain_weights: https://paddlemodels.bj.bcebos.com/object_detection/ssd_mobilenet_v1_coco_pretrained.tar pretrain_weights: https://paddlemodels.bj.bcebos.com/object_detection/ssd_mobilenet_v1_coco_pretrained.tar
use_gpu: true use_gpu: true
max_iters: 28000
snapshot_iter: 2000 snapshot_iter: 2000
log_smooth_window: 1 log_smooth_window: 1
metric: VOC metric: VOC
......
...@@ -57,7 +57,6 @@ class MobileNet(object): ...@@ -57,7 +57,6 @@ class MobileNet(object):
num_filters, num_filters,
stride, stride,
padding, padding,
channels=None,
num_groups=1, num_groups=1,
act='relu', act='relu',
use_cudnn=True, use_cudnn=True,
...@@ -125,22 +124,21 @@ class MobileNet(object): ...@@ -125,22 +124,21 @@ class MobileNet(object):
num_filters2, num_filters2,
num_groups, num_groups,
stride, stride,
scale,
name=None): name=None):
pointwise_conv = self._conv_norm( pointwise_conv = self._conv_norm(
input=input, input=input,
filter_size=1, filter_size=1,
num_filters=int(num_filters1 * scale), num_filters=int(num_filters1),
stride=1, stride=1,
num_groups=int(num_groups * scale), num_groups=int(num_groups),
padding=0, padding=0,
name=name + "_extra1") name=name + "_extra1")
normal_conv = self._conv_norm( normal_conv = self._conv_norm(
input=pointwise_conv, input=pointwise_conv,
filter_size=3, filter_size=3,
num_filters=int(num_filters2 * scale), num_filters=int(num_filters2),
stride=2, stride=2,
num_groups=int(num_groups * scale), num_groups=int(num_groups),
padding=1, padding=1,
name=name + "_extra2") name=name + "_extra2")
return normal_conv return normal_conv
...@@ -150,7 +148,7 @@ class MobileNet(object): ...@@ -150,7 +148,7 @@ class MobileNet(object):
blocks = [] blocks = []
# input 1/1 # input 1/1
out = self._conv_norm(input, 3, int(32 * scale), 2, 1, 3, name="conv1") out = self._conv_norm(input, 3, int(32 * scale), 2, 1, name="conv1")
# 1/2 # 1/2
out = self.depthwise_separable( out = self.depthwise_separable(
out, 32, 64, 32, 1, scale, name="conv2_1") out, 32, 64, 32, 1, scale, name="conv2_1")
...@@ -186,11 +184,11 @@ class MobileNet(object): ...@@ -186,11 +184,11 @@ class MobileNet(object):
num_filters = self.extra_block_filters num_filters = self.extra_block_filters
module14 = self._extra_block(module13, num_filters[0][0], module14 = self._extra_block(module13, num_filters[0][0],
num_filters[0][1], 1, 2, scale, "conv7_1") num_filters[0][1], 1, 2, "conv7_1")
module15 = self._extra_block(module14, num_filters[1][0], module15 = self._extra_block(module14, num_filters[1][0],
num_filters[1][1], 1, 2, scale, "conv7_2") num_filters[1][1], 1, 2, "conv7_2")
module16 = self._extra_block(module15, num_filters[2][0], module16 = self._extra_block(module15, num_filters[2][0],
num_filters[2][1], 1, 2, scale, "conv7_3") num_filters[2][1], 1, 2, "conv7_3")
module17 = self._extra_block(module16, num_filters[3][0], module17 = self._extra_block(module16, num_filters[3][0],
num_filters[3][1], 1, 2, scale, "conv7_4") num_filters[3][1], 1, 2, "conv7_4")
return module11, module13, module14, module15, module16, module17 return module11, module13, module14, module15, module16, module17
...@@ -11,7 +11,7 @@ class MobileNetSSD: ...@@ -11,7 +11,7 @@ class MobileNetSSD:
def ssd_net(self, scale=1.0): def ssd_net(self, scale=1.0):
# 300x300 # 300x300
tmp = self.conv_bn(self.img, 3, int(32 * scale), 2, 1, 3) tmp = self.conv_bn(self.img, 3, int(32 * scale), 2, 1)
# 150x150 # 150x150
tmp = self.depthwise_separable(tmp, 32, 64, 32, 1, scale) tmp = self.depthwise_separable(tmp, 32, 64, 32, 1, scale)
tmp = self.depthwise_separable(tmp, 64, 128, 64, 2, scale) tmp = self.depthwise_separable(tmp, 64, 128, 64, 2, scale)
...@@ -30,13 +30,13 @@ class MobileNetSSD: ...@@ -30,13 +30,13 @@ class MobileNetSSD:
# 10x10 # 10x10
module13 = self.depthwise_separable(tmp, 1024, 1024, 1024, 1, scale) module13 = self.depthwise_separable(tmp, 1024, 1024, 1024, 1, scale)
module14 = self.extra_block(module13, 256, 512, 1, 2, scale) module14 = self.extra_block(module13, 256, 512, 1, 2)
# 5x5 # 5x5
module15 = self.extra_block(module14, 128, 256, 1, 2, scale) module15 = self.extra_block(module14, 128, 256, 1, 2)
# 3x3 # 3x3
module16 = self.extra_block(module15, 128, 256, 1, 2, scale) module16 = self.extra_block(module15, 128, 256, 1, 2)
# 2x2 # 2x2
module17 = self.extra_block(module16, 64, 128, 1, 2, scale) module17 = self.extra_block(module16, 64, 128, 1, 2)
mbox_locs, mbox_confs, box, box_var = fluid.layers.multi_box_head( mbox_locs, mbox_confs, box, box_var = fluid.layers.multi_box_head(
inputs=[ inputs=[
...@@ -62,7 +62,6 @@ class MobileNetSSD: ...@@ -62,7 +62,6 @@ class MobileNetSSD:
num_filters, num_filters,
stride, stride,
padding, padding,
channels=None,
num_groups=1, num_groups=1,
act='relu', act='relu',
use_cudnn=True): use_cudnn=True):
...@@ -99,24 +98,23 @@ class MobileNetSSD: ...@@ -99,24 +98,23 @@ class MobileNetSSD:
padding=0) padding=0)
return pointwise_conv return pointwise_conv
def extra_block(self, input, num_filters1, num_filters2, num_groups, stride, def extra_block(self, input, num_filters1, num_filters2, num_groups, stride):
scale):
# 1x1 conv # 1x1 conv
pointwise_conv = self.conv_bn( pointwise_conv = self.conv_bn(
input=input, input=input,
filter_size=1, filter_size=1,
num_filters=int(num_filters1 * scale), num_filters=int(num_filters1),
stride=1, stride=1,
num_groups=int(num_groups * scale), num_groups=int(num_groups),
padding=0) padding=0)
# 3x3 conv # 3x3 conv
normal_conv = self.conv_bn( normal_conv = self.conv_bn(
input=pointwise_conv, input=pointwise_conv,
filter_size=3, filter_size=3,
num_filters=int(num_filters2 * scale), num_filters=int(num_filters2),
stride=2, stride=2,
num_groups=int(num_groups * scale), num_groups=int(num_groups),
padding=1) padding=1)
return normal_conv return normal_conv
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册