示例#1
0
 def build_inception_module(name, input_layer, nfilters):
     # nfilters: (pool_proj, 1x1, 3x3_reduce, 3x3, 5x5_reduce, 5x5)
     net = dict()
     net['pool'] = PoolLayerDNN(input_layer, pool_size=3, stride=1, pad=1)
     net['pool_proj'] = ConvLayer(net['pool'],
                                  nfilters[0],
                                  1,
                                  flip_filters=False)
     net['1x1'] = ConvLayer(input_layer, nfilters[1], 1, flip_filters=False)
     net['3x3_reduce'] = ConvLayer(input_layer,
                                   nfilters[2],
                                   1,
                                   flip_filters=False)
     net['3x3'] = ConvLayer(net['3x3_reduce'],
                            nfilters[3],
                            3,
                            pad=1,
                            flip_filters=False)
     net['5x5_reduce'] = ConvLayer(input_layer,
                                   nfilters[4],
                                   1,
                                   flip_filters=False)
     net['5x5'] = ConvLayer(net['5x5_reduce'],
                            nfilters[5],
                            5,
                            pad=2,
                            flip_filters=False)
     net['output'] = ConcatLayer(
         [net['1x1'], net['3x3'], net['5x5'], net['pool_proj']])
     return {'{}/{}'.format(name, k): v for k, v in net.items()}
示例#2
0
def build_inception_module(name, prefix, input_layer, nfilters):
    # nfilters: (pool_proj, 1x1, 3x3_reduce, 3x3, 5x5_reduce, 5x5)
    subnet = {}
    subnet['pool'] = PoolLayerDNN(input_layer,
                                  pool_size=3,
                                  stride=1,
                                  pad=1,
                                  name=prefix + name + '/pool')
    subnet['pool_proj'] = ConvLayer(subnet['pool'],
                                    nfilters[0],
                                    1,
                                    flip_filters=False,
                                    name=prefix + name + '/pool_proj')

    subnet['1x1'] = ConvLayer(input_layer,
                              nfilters[1],
                              1,
                              flip_filters=False,
                              name=prefix + name + '/1x1')

    subnet['3x3_reduce'] = ConvLayer(input_layer,
                                     nfilters[2],
                                     1,
                                     flip_filters=False,
                                     name=prefix + name + '/3x3_reduce')
    subnet['3x3'] = ConvLayer(subnet['3x3_reduce'],
                              nfilters[3],
                              3,
                              pad=1,
                              flip_filters=False,
                              name=prefix + name + '/3x3')

    subnet['5x5_reduce'] = ConvLayer(input_layer,
                                     nfilters[4],
                                     1,
                                     flip_filters=False,
                                     name=prefix + name + '/5x5_reduce')
    subnet['5x5'] = ConvLayer(subnet['5x5_reduce'],
                              nfilters[5],
                              5,
                              pad=2,
                              flip_filters=False,
                              name=prefix + name + '/5x5')

    subnet['output'] = ConcatLayer([
        subnet['1x1'],
        subnet['3x3'],
        subnet['5x5'],
        subnet['pool_proj'],
    ],
                                   name=prefix + name + '/output')

    return {prefix + '{}/{}'.format(name, k): v for k, v in subnet.items()}
    def build_model(self, input_var, forward, dropout):
        net = dict()
        net['input'] = InputLayer((None, 3, None, None), input_var=input_var)
        net['conv1/7x7_s2'] = ConvLayer(net['input'],
                                        64,
                                        7,
                                        stride=2,
                                        pad=3,
                                        flip_filters=False)
        net['pool1/3x3_s2'] = PoolLayer(net['conv1/7x7_s2'],
                                        pool_size=3,
                                        stride=2,
                                        ignore_border=False)
        net['pool1/norm1'] = LRNLayer(net['pool1/3x3_s2'], alpha=0.00002, k=1)
        net['conv2/3x3_reduce'] = ConvLayer(net['pool1/norm1'],
                                            64,
                                            1,
                                            flip_filters=False)
        net['conv2/3x3'] = ConvLayer(net['conv2/3x3_reduce'],
                                     192,
                                     3,
                                     pad=1,
                                     flip_filters=False)
        net['conv2/norm2'] = LRNLayer(net['conv2/3x3'], alpha=0.00002, k=1)
        net['pool2/3x3_s2'] = PoolLayerDNN(net['conv2/norm2'],
                                           pool_size=3,
                                           stride=2)

        net.update(
            self.build_inception_module('inception_3a', net['pool2/3x3_s2'],
                                        [32, 64, 96, 128, 16, 32]))
        net.update(
            self.build_inception_module('inception_3b',
                                        net['inception_3a/output'],
                                        [64, 128, 128, 192, 32, 96]))
        net['pool3/3x3_s2'] = PoolLayerDNN(net['inception_3b/output'],
                                           pool_size=3,
                                           stride=2)

        net.update(
            self.build_inception_module('inception_4a', net['pool3/3x3_s2'],
                                        [64, 192, 96, 208, 16, 48]))
        net.update(
            self.build_inception_module('inception_4b',
                                        net['inception_4a/output'],
                                        [64, 160, 112, 224, 24, 64]))
        net.update(
            self.build_inception_module('inception_4c',
                                        net['inception_4b/output'],
                                        [64, 128, 128, 256, 24, 64]))
        net.update(
            self.build_inception_module('inception_4d',
                                        net['inception_4c/output'],
                                        [64, 112, 144, 288, 32, 64]))
        net.update(
            self.build_inception_module('inception_4e',
                                        net['inception_4d/output'],
                                        [128, 256, 160, 320, 32, 128]))
        net['pool4/3x3_s2'] = PoolLayerDNN(net['inception_4e/output'],
                                           pool_size=3,
                                           stride=2)

        net.update(
            self.build_inception_module('inception_5a', net['pool4/3x3_s2'],
                                        [128, 256, 160, 320, 32, 128]))
        net.update(
            self.build_inception_module('inception_5b',
                                        net['inception_5a/output'],
                                        [128, 384, 192, 384, 48, 128]))

        net['pool5/7x7_s1'] = GlobalPoolLayer(net['inception_5b/output'])

        if forward:
            #net['fc6'] = DenseLayer(net['pool5/7x7_s1'], num_units=1000)
            net['prob'] = DenseLayer(net['pool5/7x7_s1'],
                                     num_units=4,
                                     nonlinearity=softmax)
        else:
            net['dropout1'] = DropoutLayer(net['pool5/7x7_s1'], p=dropout)
            #net['fc6'] = DenseLayer(net['dropout1'], num_units=1000)
            #net['dropout2'] = DropoutLayer(net['fc6'], p=dropout)
            net['prob'] = DenseLayer(net['dropout1'],
                                     num_units=4,
                                     nonlinearity=softmax)
        return net