提交 3ff10601 编写于 作者: Y Yang Zhang 提交者: qingqing01

Fix nolocal naming (#24)

* Fix nolocal naming
* Fix `cb_resnet` as well
上级 a992fef4
...@@ -28,7 +28,7 @@ from ppdet.core.workspace import register, serializable ...@@ -28,7 +28,7 @@ from ppdet.core.workspace import register, serializable
from numbers import Integral from numbers import Integral
from .name_adapter import NameAdapter from .name_adapter import NameAdapter
from .nonlocal import add_space_nonlocal from .nonlocal_helper import add_space_nonlocal
__all__ = ['CBResNet'] __all__ = ['CBResNet']
...@@ -99,7 +99,7 @@ class CBResNet(object): ...@@ -99,7 +99,7 @@ class CBResNet(object):
152: ([3, 8, 36, 3], self.bottleneck), 152: ([3, 8, 36, 3], self.bottleneck),
200: ([3, 12, 48, 3], self.bottleneck), 200: ([3, 12, 48, 3], self.bottleneck),
} }
self.nonlocal_stages = nonlocal_stages self.nonlocal_stages = nonlocal_stages
self.nonlocal_mod_cfg = { self.nonlocal_mod_cfg = {
50 : 2, 50 : 2,
...@@ -107,11 +107,11 @@ class CBResNet(object): ...@@ -107,11 +107,11 @@ class CBResNet(object):
152 : 8, 152 : 8,
200 : 12, 200 : 12,
} }
self.stage_filters = [64, 128, 256, 512] self.stage_filters = [64, 128, 256, 512]
self._c1_out_chan_num = 64 self._c1_out_chan_num = 64
self.na = NameAdapter(self) self.na = NameAdapter(self)
def _conv_offset(self, input, filter_size, stride, padding, act=None, name=None): def _conv_offset(self, input, filter_size, stride, padding, act=None, name=None):
out_channel = filter_size * filter_size * 3 out_channel = filter_size * filter_size * 3
out = fluid.layers.conv2d(input, out = fluid.layers.conv2d(input,
...@@ -126,7 +126,7 @@ class CBResNet(object): ...@@ -126,7 +126,7 @@ class CBResNet(object):
act=act, act=act,
name=name) name=name)
return out return out
def _conv_norm(self, def _conv_norm(self,
input, input,
num_filters, num_filters,
...@@ -247,7 +247,7 @@ class CBResNet(object): ...@@ -247,7 +247,7 @@ class CBResNet(object):
conv_name1, conv_name2, conv_name3, \ conv_name1, conv_name2, conv_name3, \
shortcut_name = self.na.fix_bottleneck_name(name) shortcut_name = self.na.fix_bottleneck_name(name)
conv_def = [[num_filters, 1, stride1, 'relu', 1, conv_name1], conv_def = [[num_filters, 1, stride1, 'relu', 1, conv_name1],
[num_filters, 3, stride2, 'relu', groups, conv_name2], [num_filters, 3, stride2, 'relu', groups, conv_name2],
[num_filters * expand, 1, 1, None, 1, conv_name3]] [num_filters * expand, 1, 1, None, 1, conv_name3]]
...@@ -312,12 +312,12 @@ class CBResNet(object): ...@@ -312,12 +312,12 @@ class CBResNet(object):
ch_out = self.stage_filters[stage_num - 2] ch_out = self.stage_filters[stage_num - 2]
is_first = False if stage_num != 2 else True is_first = False if stage_num != 2 else True
dcn = True if stage_num in self.dcn_v2_stages else False dcn = True if stage_num in self.dcn_v2_stages else False
nonlocal_mod = 1000 nonlocal_mod = 1000
if stage_num in self.nonlocal_stages: if stage_num in self.nonlocal_stages:
nonlocal_mod = self.nonlocal_mod_cfg[self.depth] if stage_num==4 else 2 nonlocal_mod = self.nonlocal_mod_cfg[self.depth] if stage_num==4 else 2
# Make the layer name and parameter name consistent # Make the layer name and parameter name consistent
# with ImageNet pre-trained model # with ImageNet pre-trained model
conv = input conv = input
...@@ -332,15 +332,15 @@ class CBResNet(object): ...@@ -332,15 +332,15 @@ class CBResNet(object):
is_first=is_first, is_first=is_first,
name=conv_name, name=conv_name,
dcn=dcn) dcn=dcn)
# add non local model # add non local model
dim_in = conv.shape[1] dim_in = conv.shape[1]
nonlocal_name = "nonlocal_conv{}_lvl{}".format( stage_num, self.curr_level ) nonlocal_name = "nonlocal_conv{}_lvl{}".format( stage_num, self.curr_level )
if i % nonlocal_mod == nonlocal_mod - 1: if i % nonlocal_mod == nonlocal_mod - 1:
conv = add_space_nonlocal( conv = add_space_nonlocal(
conv, dim_in, dim_in, conv, dim_in, dim_in,
nonlocal_name + '_{}'.format(i), int(dim_in / 2) ) nonlocal_name + '_{}'.format(i), int(dim_in / 2) )
return conv return conv
def c1_stage(self, input): def c1_stage(self, input):
...@@ -376,7 +376,7 @@ class CBResNet(object): ...@@ -376,7 +376,7 @@ class CBResNet(object):
pool_padding=1, pool_padding=1,
pool_type='max') pool_type='max')
return output return output
def connect( self, left, right, name ): def connect( self, left, right, name ):
ch_right = right.shape[1] ch_right = right.shape[1]
conv = self._conv_norm( left, conv = self._conv_norm( left,
...@@ -392,7 +392,7 @@ class CBResNet(object): ...@@ -392,7 +392,7 @@ class CBResNet(object):
out_shape.stop_gradient = True out_shape.stop_gradient = True
conv = fluid.layers.resize_nearest( conv = fluid.layers.resize_nearest(
conv, scale=2., actual_shape=out_shape) conv, scale=2., actual_shape=out_shape)
output = fluid.layers.elementwise_add(x=right, y=conv) output = fluid.layers.elementwise_add(x=right, y=conv)
return output return output
...@@ -410,7 +410,7 @@ class CBResNet(object): ...@@ -410,7 +410,7 @@ class CBResNet(object):
res = self.layer_warp(res, i) res = self.layer_warp(res, i)
if i in self.feature_maps: if i in self.feature_maps:
res_endpoints.append(res) res_endpoints.append(res)
for num in range(1, self.repeat_num): for num in range(1, self.repeat_num):
self.curr_level = num self.curr_level = num
res = self.c1_stage(input) res = self.c1_stage(input)
...@@ -420,7 +420,6 @@ class CBResNet(object): ...@@ -420,7 +420,6 @@ class CBResNet(object):
res_endpoints[i] = res res_endpoints[i] = res
if self.freeze_at >= i+2: if self.freeze_at >= i+2:
res.stop_gradient = True res.stop_gradient = True
return OrderedDict([('res{}_sum'.format(self.feature_maps[idx]), feat) return OrderedDict([('res{}_sum'.format(self.feature_maps[idx]), feat)
for idx, feat in enumerate(res_endpoints)]) for idx, feat in enumerate(res_endpoints)])
...@@ -27,7 +27,7 @@ from paddle.fluid.initializer import Constant ...@@ -27,7 +27,7 @@ from paddle.fluid.initializer import Constant
from ppdet.core.workspace import register, serializable from ppdet.core.workspace import register, serializable
from numbers import Integral from numbers import Integral
from .nonlocal import add_space_nonlocal from .nonlocal_helper import add_space_nonlocal
from .name_adapter import NameAdapter from .name_adapter import NameAdapter
__all__ = ['ResNet', 'ResNetC5'] __all__ = ['ResNet', 'ResNetC5']
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册