in models/imagenet/resnet_ibn_cnsn.py [0:0]
def __init__(self,
layers,
ibn_cfg=('a', 'a', 'a', None),
num_classes=1000, active_num=None, pos=None, beta=None,
crop=None, cnsn_type=None):
self.inplanes = 64
super(ResNet, self).__init__()
print('ResNet with ibn, selfnorm and crossnorm...')
self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3,
bias=False)
if ibn_cfg[0] == 'b':
self.bn1 = nn.InstanceNorm2d(64, affine=True)
else:
self.bn1 = nn.BatchNorm2d(64)
self.relu = nn.ReLU(inplace=True)
self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
if beta is not None:
print('beta: {}'.format(beta))
if crop is not None:
print('crop mode: {}'.format(crop))
self.layer1 = self._make_layer_custom(BottleneckCustom, 64, layers[0],
pos=pos, beta=beta,
crop=crop, cnsn_type=cnsn_type,
ibn=ibn_cfg[0])
self.layer2 = self._make_layer_custom(BottleneckCustom, 128, layers[1],
pos=pos, beta=beta,
crop=crop, cnsn_type=cnsn_type,
stride=2, ibn=ibn_cfg[1])
self.layer3 = self._make_layer_custom(BottleneckCustom, 256, layers[2],
pos=pos, beta=beta,
crop=crop, cnsn_type=cnsn_type,
stride=2, ibn=ibn_cfg[2])
self.layer4 = self._make_layer_custom(BottleneckCustom, 512, layers[3],
pos=pos, beta=beta,
crop=crop, cnsn_type=cnsn_type,
stride=2, ibn=ibn_cfg[3])
self.avgpool = nn.AvgPool2d(7)
self.fc = nn.Linear(512 * BottleneckCustom.expansion, num_classes)
self.cn_modules = []
for m in self.modules():
if isinstance(m, nn.Conv2d):
nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
elif isinstance(m, nn.BatchNorm2d) or isinstance(m, nn.InstanceNorm2d):
nn.init.constant_(m.weight, 1)
nn.init.constant_(m.bias, 0)
elif isinstance(m, CrossNorm):
self.cn_modules.append(m)
if cnsn_type is not None and 'cn' in cnsn_type:
self.active_num = active_num
assert self.active_num > 0
print('active_num: {}'.format(self.active_num))
self.cn_num = len(self.cn_modules)
assert self.cn_num > 0
print('cn_num: {}'.format(self.cn_num))