in utils/gluon/utils/resnetv1.py [0:0]
def __init__(self, in_planes, mid_planes, out_planes, strides=1,
norm_kwargs=None, last_gamma=False, name_prefix=None,
kernel_sizes=(1,3,1), **kwargs):
super(_bL_Stem, self).__init__(prefix=name_prefix)
with self.name_scope():
# extract information
self.conv1 = gluon.nn.Conv2D(channels=mid_planes, in_channels=in_planes,
kernel_size=kernel_sizes[0],
padding=int((kernel_sizes[0]-1)/2),
use_bias=False, prefix='conv1_')
self.bn1 = gluon.nn.BatchNorm(in_channels=mid_planes, prefix='bn1_',
**({} if norm_kwargs is None else norm_kwargs))
self.relu1 = gluon.nn.Activation('relu')
# capture spatial relations
self.conv2 = gluon.nn.Conv2D(channels=mid_planes, in_channels=mid_planes,
kernel_size=kernel_sizes[1],
padding=int((kernel_sizes[1]-1)/2),
strides=strides, use_bias=False, prefix='conv2_')
self.bn2 = gluon.nn.BatchNorm(in_channels=mid_planes, prefix='bn2_',
**({} if norm_kwargs is None else norm_kwargs))
self.relu2 = gluon.nn.Activation('relu')
# embeding back to information highway
self.conv3 = gluon.nn.Conv2D(channels=out_planes, in_channels=mid_planes,
kernel_size=kernel_sizes[2],
padding=int((kernel_sizes[2]-1)/2),
use_bias=False, prefix='conv3_')
self.bn3 = gluon.nn.BatchNorm(in_channels=out_planes, prefix='bn3_',
gamma_initializer='zeros' if last_gamma else 'ones',
**({} if norm_kwargs is None else norm_kwargs))
# this relue is added after fusion
self.relu3 = gluon.nn.Activation('relu')
if strides != 1 or in_planes != out_planes:
self.conv4 = gluon.nn.Conv2D(channels=out_planes, in_channels=in_planes,
kernel_size=1, strides=strides, use_bias=False,
prefix='conv4_')
self.bn4 = gluon.nn.BatchNorm(in_channels=out_planes, prefix='bn4_',
**({} if norm_kwargs is None else norm_kwargs))