コード例 #1
0
    def __init__(self, n_layer, n_class=None, initialW=None, fc_kwargs={}):
        blocks = self._blocks[n_layer]

        if initialW is None:
            initialW = initializers.HeNormal(scale=1., fan_option='fan_out')
        if 'initialW' not in fc_kwargs:
            fc_kwargs['initialW'] = initializers.Normal(scale=0.01)

        kwargs = {
            'initialW': initialW,
            'stride_first': True,
            'add_block': 'gc'
        }

        super(GCResNet, self).__init__()
        with self.init_scope():
            self.conv1 = Conv2DBNActiv(None,
                                       64,
                                       7,
                                       2,
                                       3,
                                       nobias=True,
                                       initialW=initialW)
            self.pool1 = lambda x: F.max_pooling_2d(x, ksize=3, stride=2)
            self.res2 = ResBlock(blocks[0], None, 64, 256, 1, **kwargs)
            self.res3 = ResBlock(blocks[1], None, 128, 512, 2, **kwargs)
            self.res4 = ResBlock(blocks[2], None, 256, 1024, 2, **kwargs)
            self.res5 = ResBlock(blocks[3], None, 512, 2048, 2, **kwargs)
            self.pool5 = lambda x: F.average(x, axis=(2, 3))
            self.fc6 = L.Linear(None, n_class, **fc_kwargs)
コード例 #2
0
ファイル: se_res2net.py プロジェクト: diceroll/kmnist
    def __init__(self, n_layer,
                 n_class=None, scale=4,
                 pretrained_model=None,
                 mean=None, initialW=None, fc_kwargs={}):
        blocks = self._blocks[n_layer]
        self.mean = mean

        if initialW is None:
            initialW = initializers.HeNormal(scale=1., fan_option='fan_out')
        if 'initialW' not in fc_kwargs:
            fc_kwargs['initialW'] = initializers.Normal(scale=0.01)

        kwargs = {
            'scale': scale, 'initialW': initialW, 'stride_first': True,
            'add_seblock': True}

        super(SERes2Net, self).__init__()
        with self.init_scope():
            self.conv1 = Conv2DBNActiv(None, 64, 3, 1, 1, nobias=True,
                                       initialW=initialW)
            self.res2 = ResBlock(blocks[0], None, 64, 256, 2, **kwargs)
            self.res3 = ResBlock(blocks[1], None, 128, 512, 1, **kwargs)
            self.res4 = ResBlock(blocks[2], None, 256, 1024, 2, **kwargs)
            self.res5 = ResBlock(blocks[3], None, 512, 2048, 1, **kwargs)
            self.pool5 = lambda x: F.average(x, axis=(2, 3))
            self.fc6 = L.Linear(None, n_class, **fc_kwargs)
コード例 #3
0
ファイル: resblock.py プロジェクト: diceroll/kmnist
    def __init__(self,
                 in_channels,
                 mid_channels,
                 out_channels,
                 stride=1,
                 scale=1,
                 dilate=1,
                 groups=1,
                 initialW=None,
                 bn_kwargs={},
                 residual_conv=False,
                 stride_first=False,
                 add_block=None,
                 aa_kwargs={}):

        if stride_first:
            first_stride = stride
            second_stride = 1
        else:
            first_stride = 1
            second_stride = stride
        super(Bottleneck, self).__init__()
        with self.init_scope():
            self.conv1 = Conv2DBNActiv(in_channels,
                                       mid_channels,
                                       1,
                                       first_stride,
                                       0,
                                       nobias=True,
                                       initialW=initialW,
                                       bn_kwargs=bn_kwargs)
            if len(aa_kwargs) > 0:
                self.conv2 = Conv2DBNActiv(mid_channels,
                                           mid_channels,
                                           3,
                                           1,
                                           1,
                                           1,
                                           1,
                                           1,
                                           nobias=True,
                                           initialW=initialW,
                                           bn_kwargs=bn_kwargs,
                                           aa_kwargs=aa_kwargs)
            elif stride > 1:
                self.conv2 = Conv2DBNActiv(mid_channels,
                                           mid_channels,
                                           3,
                                           second_stride,
                                           dilate,
                                           1,
                                           dilate,
                                           groups,
                                           nobias=True,
                                           initialW=initialW,
                                           bn_kwargs=bn_kwargs)
            else:
                self.conv2 = Conv2DBNActiv(mid_channels,
                                           mid_channels,
                                           3,
                                           second_stride,
                                           dilate,
                                           scale,
                                           dilate,
                                           groups,
                                           nobias=True,
                                           initialW=initialW,
                                           bn_kwargs=bn_kwargs)

            self.conv3 = Conv2DBNActiv(mid_channels,
                                       out_channels,
                                       1,
                                       1,
                                       0,
                                       nobias=True,
                                       initialW=initialW,
                                       activ=None,
                                       bn_kwargs=bn_kwargs)
            if add_block == 'se':
                self.se = SEBlock(out_channels)
            elif add_block == 'gc':
                self.gc = GCBlock(out_channels)
            elif add_block is not None:
                raise ValueError
            if residual_conv:
                self.residual_conv = Conv2DBNActiv(in_channels,
                                                   out_channels,
                                                   1,
                                                   stride,
                                                   0,
                                                   nobias=True,
                                                   initialW=initialW,
                                                   activ=None,
                                                   bn_kwargs=bn_kwargs)