コード例 #1
0
ファイル: inception_v3.py プロジェクト: zpqiu/incubator-singa
 def final_aux_check(block_name):
     if block_name == final_endpoint:
         return True
     if block_name == aux_endpoint:
         aux = aux_endpoint + '-aux'
         end_points[aux] = net.add(Split(aux, 2))
     return False
コード例 #2
0
ファイル: inception_v4.py プロジェクト: zpqiu/incubator-singa
def block_reduction_a(blk, net):
    """Builds Reduction-A block for Inception v4 network."""
    # By default use stride=1 and SAME padding
    s = net.add(Split('%s/Split' % blk, 3))
    br0 = conv2d(net,
                 '%s/Branch_0/Conv2d_1a_3x3' % blk,
                 384,
                 3,
                 2,
                 border_mode='VALID',
                 src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0a_1x1' % blk, 192, 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0b_3x3' % blk, 224, 3)
    br1 = conv2d(net,
                 '%s/Branch_1/Conv2d_1a_3x3' % blk,
                 256,
                 3,
                 2,
                 border_mode='VALID')
    br2 = net.add(
        MaxPooling2D('%s/Branch_2/MaxPool_1a_3x3' % blk,
                     3,
                     2,
                     border_mode='VALID'), s)
    return net.add(Concat('%s/Concat' % blk, 1), [br0, br1, br2])
コード例 #3
0
ファイル: inception_v4.py プロジェクト: zpqiu/incubator-singa
def block_inception_a(blk, net):
    """Builds Inception-A block for Inception v4 network."""
    # By default use stride=1 and SAME padding
    s = net.add(Split('%s/Split' % blk, 4))
    br0 = conv2d(net, '%s/Branch_0/Conv2d_0a_1x1' % blk, 96, 1, src=s)
    conv2d(net, '%s/Branch_1/Conv2d_0a_1x1' % blk, 64, 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0b_3x3' % blk, 96, 3)
    conv2d(net, '%s/Branch_2/Conv2d_0a_1x1' % blk, 64, 1, src=s)
    conv2d(net, '%s/Branch_2/Conv2d_0b_3x3' % blk, 96, 3)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0c_3x3' % blk, 96, 3)
    net.add(AvgPooling2D('%s/Branch_3/AvgPool_0a_3x3' % blk, 3, stride=1), s)
    br3 = conv2d(net, '%s/Branch_3/Conv2d_0b_1x1' % blk, 96, 1)
    return net.add(Concat('%s/Concat' % blk, 1), [br0, br1, br2, br3])
コード例 #4
0
ファイル: inception_v4.py プロジェクト: zpqiu/incubator-singa
def block_inception_c(blk, net):
    """Builds Inception-C block for Inception v4 network."""
    # By default use stride=1 and SAME padding
    s = net.add(Split('%s/Split' % blk, 4))
    br0 = conv2d(net, '%s/Branch_0/Conv2d_0a_1x1' % blk, 256, 1, src=s)

    br1 = conv2d(net, '%s/Branch_1/Conv2d_0a_1x1' % blk, 384, 1, src=s)
    br1 = net.add(Split('%s/Branch_1/Split' % blk, 2))
    br10 = conv2d(net, '%s/Branch_1/Conv2d_0b_1x3' % blk, 256, (1, 3), src=br1)
    br11 = conv2d(net, '%s/Branch_1/Conv2d_0c_3x1' % blk, 256, (3, 1), src=br1)
    br1 = net.add(Concat('%s/Branch_1/Concat' % blk, 1), [br10, br11])

    br2 = conv2d(net, '%s/Branch_2/Conv2d_0a_1x1' % blk, 384, 1, src=s)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0b_3x1' % blk, 448, (3, 1))
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0c_1x3' % blk, 512, (1, 3))
    br2 = net.add(Split('%s/Branch_2/Split' % blk, 2))
    br20 = conv2d(net, '%s/Branch_2/Conv2d_0d_1x3' % blk, 256, (1, 3), src=br2)
    br21 = conv2d(net, '%s/Branch_2/Conv2d_0e_3x1' % blk, 256, (3, 1), src=br2)
    br2 = net.add(Concat('%s/Branch_2/Concat' % blk, 1), [br20, br21])

    br3 = net.add(AvgPooling2D('%s/Branch_3/AvgPool_0a_3x3' % blk, 3, 1), s)
    br3 = conv2d(net, '%s/Branch_3/Conv2d_0b_1x1' % blk, 256, 1)
    return net.add(Concat('%s/Concat' % blk, 1), [br0, br1, br2, br3])
コード例 #5
0
def inception(net, src, name, nb1x1, nb3x3r, nb3x3, nb5x5r, nb5x5, nbproj):
    split = net.add(Split('%s/split' % name, 4), src)

    c1x1 = conv(net, split, name, nb1x1, 1, suffix='1x1')

    c3x3r = conv(net, split, name, nb3x3r, 1, suffix='3x3_reduce')
    c3x3 = conv(net, c3x3r, name, nb3x3, 3, pad=1, suffix='3x3')

    c5x5r = conv(net, split, name, nb5x5r, 1, suffix='5x5_reduce')
    c5x5 = conv(net, c5x5r, name, nb5x5, 5, pad=2, suffix='5x5')

    pool = net.add(MaxPooling2D('%s/pool' % name, 3, 1, pad=1), split)
    cproj = conv(net, pool, name, nbproj, 1, suffix='pool_proj')

    return net.add(Concat('%s/output' % name, 1), [c1x1, c3x3, c5x5, cproj])
コード例 #6
0
ファイル: inception_v4.py プロジェクト: zpqiu/incubator-singa
def block_inception_b(blk, net):
    """Builds Inception-B block for Inception v4 network."""
    # By default use stride=1 and SAME padding
    s = net.add(Split('%s/Split' % blk, 4))
    br0 = conv2d(net, '%s/Branch_0/Conv2d_0a_1x1' % blk, 384, 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0a_1x1' % blk, 192, 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0b_1x7' % blk, 224, (1, 7))
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0c_7x1' % blk, 256, (7, 1))
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0a_1x1' % blk, 192, 1, src=s)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0b_7x1' % blk, 192, (7, 1))
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0c_1x7' % blk, 224, (1, 7))
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0d_7x1' % blk, 224, (7, 1))
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0e_1x7' % blk, 256, (1, 7))
    br3 = net.add(AvgPooling2D('%s/Branch_3/AvgPool_0a_3x3' % blk, 3, 1), s)
    br3 = conv2d(net, '%s/Branch_3/Conv2d_0b_1x1' % blk, 128, 1)
    return net.add(Concat('%s/Concat' % blk, 1), [br0, br1, br2, br3])
コード例 #7
0
ファイル: model.py プロジェクト: zpqiu/incubator-singa
def bottleneck(name,
               net,
               inplane,
               midplane,
               outplane,
               stride=1,
               preact=False,
               add_bn=False):
    '''Add three conv layers, with a>=b<=c filters.

    The default structure is
    input
         -split - conv1-bn1-relu1-conv2-bn2-relu2-conv3-bn3
                - conv-bn or dummy
         -add
         -relu

    Args:
        inplane, num of feature maps of the input
        midplane, num of featue maps of the middle layer
        outplane, num of feature maps of the output
        preact, if true, move the bn3 and relu before conv1, i.e., pre-activation ref identity mapping paper
        add_bn, if true, move the last bn after the addition layer (for resnet-50)
    '''
    assert not (
        preact and add_bn
    ), 'preact and batchnorm after addition cannot be true at the same time'
    split = net.add(Split(name + '-split', 2))
    if preact:
        net.add(BatchNormalization(name + '-preact-bn'))
        net.add(Activation(name + '-preact-relu'))
    conv(net, name + '-0', midplane, 1, 1, 0, True, True)
    conv(net, name + '-1', midplane, 3, stride, 1, True, True)
    br0 = conv(net, name + '-2', outplane, 1, 1, 0, not (preact or add_bn),
               False)
    br1 = shortcut(net, name, inplane, outplane, stride, split, not add_bn)
    ret = net.add(Merge(name + '-add'), [br0, br1])
    if add_bn:
        ret = net.add(BatchNormalization(name + '-add-bn'))
    if not preact:
        ret = net.add(Activation(name + '-add-relu'))
    return ret
コード例 #8
0
ファイル: inception_v3.py プロジェクト: zpqiu/incubator-singa
def inception_v3_base(name,
                      sample_shape,
                      final_endpoint,
                      aux_endpoint,
                      depth_multiplier=1,
                      min_depth=16):
    """Creates the Inception V3 network up to the given final endpoint.

    Args:
        sample_shape: input image sample shape, 3d tuple
        final_endpoint: specifies the endpoint to construct the network up to.
        aux_endpoint: for aux loss.

    Returns:
        logits: the logits outputs of the model.
        end_points: the set of end_points from the inception model.

    Raises:
        ValueError: if final_endpoint is not set to one of the predefined values
    """
    V3 = 'InceptionV3'
    end_points = {}
    net = ffnet.FeedForwardNet()

    def final_aux_check(block_name):
        if block_name == final_endpoint:
            return True
        if block_name == aux_endpoint:
            aux = aux_endpoint + '-aux'
            end_points[aux] = net.add(Split(aux, 2))
        return False

    def depth(d):
        return max(int(d * depth_multiplier), min_depth)

    blk = V3 + '/Conv2d_1a_3x3'
    # 299 x 299 x 3
    net.add(
        Conv2D(blk,
               depth(32),
               3,
               2,
               border_mode='VALID',
               use_bias=False,
               input_sample_shape=sample_shape))
    net.add(BatchNormalization(blk + '/BatchNorm'))
    end_points[blk] = net.add(Activation(blk + '/relu'))
    if final_aux_check(blk):
        return net, end_points

    # 149 x 149 x 32
    conv2d(net, '%s/Conv2d_2a_3x3' % V3, depth(32), 3, border_mode='VALID')
    # 147 x 147 x 32
    conv2d(net, '%s/Conv2d_2b_3x3' % V3, depth(64), 3)
    # 147 x 147 x 64
    net.add(MaxPooling2D('%s/MaxPool_3a_3x3' % V3, 3, 2, border_mode='VALID'))
    # 73 x 73 x 64
    conv2d(net, '%s/Conv2d_3b_1x1' % V3, depth(80), 1, border_mode='VALID')
    # 73 x 73 x 80.
    conv2d(net, '%s/Conv2d_4a_3x3' % V3, depth(192), 3, border_mode='VALID')
    # 71 x 71 x 192.
    net.add(MaxPooling2D('%s/MaxPool_5a_3x3' % V3, 3, 2, border_mode='VALID'))

    # 35 x 35 x 192.
    blk = V3 + '/Mixed_5b'
    s = net.add(Split('%s/Split' % blk, 4))
    br0 = conv2d(net, '%s/Branch_0/Conv2d_0a_1x1' % blk, depth(64), 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0a_1x1' % blk, depth(48), 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0b_5x5' % blk, depth(64), 5)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0a_1x1' % blk, depth(64), 1, src=s)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0b_3x3' % blk, depth(96), 3)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0c_3x3' % blk, depth(96), 3)
    net.add(AvgPooling2D('%s/Branch_3/AvgPool_0a_3x3' % blk, 3, 1), s)
    br3 = conv2d(net, '%s/Branch_3/Conv2d_0b_1x1' % blk, depth(32), 1)
    end_points[blk] = net.add(Concat('%s/Concat' % blk, 1),
                              [br0, br1, br2, br3])
    if final_aux_check(blk):
        return net, end_points

    # mixed_1: 35 x 35 x 288.
    blk = V3 + '/Mixed_5c'
    s = net.add(Split('%s/Split' % blk, 4))
    br0 = conv2d(net, '%s/Branch_0/Conv2d_0a_1x1' % blk, depth(64), 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0b_1x1' % blk, depth(48), 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv_1_0c_5x5' % blk, depth(64), 5)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0a_1x1' % blk, depth(64), 1, src=s)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0b_3x3' % blk, depth(96), 3)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0c_3x3' % blk, depth(96), 3)
    br3 = net.add(AvgPooling2D('%s/Branch_3/AvgPool_0a_3x3' % blk, 3, 1),
                  src=s)
    br3 = conv2d(net, '%s/Branch_3/Conv2d_0b_1x1' % blk, depth(64), 1)
    end_points[blk] = net.add(Concat('%s/Concat' % blk, 1),
                              [br0, br1, br2, br3])
    if final_aux_check(blk):
        return net, end_points

    # mixed_2: 35 x 35 x 288.
    blk = V3 + '/Mixed_5d'
    s = net.add(Split('%s/Split' % blk, 4))
    br0 = conv2d(net, '%s/Branch_0/Conv2d_0a_1x1' % blk, depth(64), 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0a_1x1' % blk, depth(48), 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0b_5x5' % blk, depth(64), 5)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0a_1x1' % blk, depth(64), 1, src=s)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0b_3x3' % blk, depth(96), 3)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0c_3x3' % blk, depth(96), 3)
    br3 = net.add(AvgPooling2D('%s/Branch_3/AvgPool_0a_3x3' % blk, 3, 1), s)
    br3 = conv2d(net, '%s/Branch_3/Conv2d_0b_1x1' % blk, depth(64), 1)
    end_points[blk] = net.add(Concat('%s/Concat' % blk, 1),
                              [br0, br1, br2, br3])
    if final_aux_check(blk):
        return net, end_points

    # mixed_3: 17 x 17 x 768.
    blk = V3 + '/Mixed_6a'
    s = net.add(Split('%s/Split' % blk, 3))
    br0 = conv2d(net,
                 '%s/Branch_0/Conv2d_1a_1x1' % blk,
                 depth(384),
                 3,
                 2,
                 border_mode='VALID',
                 src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0a_1x1' % blk, depth(64), 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0b_3x3' % blk, depth(96), 3)
    br1 = conv2d(net,
                 '%s/Branch_1/Conv2d_1a_1x1' % blk,
                 depth(96),
                 3,
                 2,
                 border_mode='VALID')
    br2 = net.add(
        MaxPooling2D('%s/Branch_2/MaxPool_1a_3x3' % blk,
                     3,
                     2,
                     border_mode='VALID'), s)
    end_points[blk] = net.add(Concat('%s/Concat' % blk, 1), [br0, br1, br2])
    if final_aux_check(blk):
        return net, end_points

    # mixed4: 17 x 17 x 768.
    blk = V3 + '/Mixed_6b'
    s = net.add(Split('%s/Split' % blk, 4))
    br0 = conv2d(net, '%s/Branch_0/Conv2d_0a_1x1' % blk, depth(192), 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0a_1x1' % blk, depth(128), 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0b_1x7' % blk, depth(128), [1, 7])
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0c_7x1' % blk, depth(192), [7, 1])
    br2 = conv2d(net,
                 '%s/Branch_2/Conv2d_0a_1x1' % blk,
                 depth(128), [1, 1],
                 src=s)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0b_7x1' % blk, depth(128), [7, 1])
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0c_1x7' % blk, depth(128), [1, 7])
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0d_7x1' % blk, depth(128), [7, 1])
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0e_1x7' % blk, depth(192), [1, 7])
    br3 = net.add(AvgPooling2D('%s/Branch_3/AvgPool_0a_3x3' % blk, 3, 1), s)
    br3 = conv2d(net, '%s/Branch_3/Conv2d_0b_1x1' % blk, depth(192), [1, 1])
    end_points[blk] = net.add(Concat('%s/Concat' % blk, 1),
                              [br0, br1, br2, br3])
    if final_aux_check(blk):
        return net, end_points

    # mixed_5: 17 x 17 x 768.
    blk = V3 + '/Mixed_6c'
    s = net.add(Split('%s/Split' % blk, 4))
    br0 = conv2d(net,
                 '%s/Branch_0/Conv2d_0a_1x1' % blk,
                 depth(192), [1, 1],
                 src=s)
    br1 = conv2d(net,
                 '%s/Branch_1/Conv2d_0a_1x1' % blk,
                 depth(160), [1, 1],
                 src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0b_1x7' % blk, depth(160), [1, 7])
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0c_7x1' % blk, depth(192), [7, 1])
    br2 = conv2d(net,
                 '%s/Branch_2/Conv2d_0a_1x1' % blk,
                 depth(160), [1, 1],
                 src=s)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0b_7x1' % blk, depth(160), [7, 1])
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0c_1x7' % blk, depth(160), [1, 7])
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0d_7x1' % blk, depth(160), [7, 1])
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0e_1x7' % blk, depth(192), [1, 7])
    br3 = net.add(AvgPooling2D('%s/Branch_3/AvgPool_0a_3x3' % blk, 3, 1), s)
    br3 = conv2d(net, '%s/Branch_3/Conv2d_0b_1x1' % blk, depth(192), [1, 1])
    end_points[blk] = net.add(Concat('%s/Concat' % blk, 1),
                              [br0, br1, br2, br3])
    if final_aux_check(blk):
        return net, end_points

    # mixed_6: 17 x 17 x 768.
    blk = V3 + '/Mixed_6d'
    s = net.add(Split('%s/Split' % blk, 4))
    br0 = conv2d(net,
                 '%s/Branch_0/Conv2d_0a_1x1' % blk,
                 depth(192), [1, 1],
                 src=s)
    br1 = conv2d(net,
                 '%s/Branch_1/Conv2d_0a_1x1' % blk,
                 depth(160), [1, 1],
                 src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0b_1x7' % blk, depth(160), [1, 7])
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0c_7x1' % blk, depth(192), [7, 1])
    br2 = conv2d(net,
                 '%s/Branch_2/Conv2d_0a_1x1' % blk,
                 depth(160), [1, 1],
                 src=s)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0b_7x1' % blk, depth(160), [7, 1])
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0c_1x7' % blk, depth(160), [1, 7])
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0d_7x1' % blk, depth(160), [7, 1])
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0e_1x7' % blk, depth(192), [1, 7])
    br3 = net.add(AvgPooling2D('%s/Branch_3/AvgPool_0a_3x3' % blk, 3, 1), s)
    br3 = conv2d(net, '%s/Branch_3/Conv2d_0b_1x1' % blk, depth(192), [1, 1])
    end_points[blk] = net.add(Concat('%s/Concat' % blk, 1),
                              [br0, br1, br2, br3])
    if final_aux_check(blk):
        return net, end_points

    blk = V3 + '/Mixed_6e'
    s = net.add(Split('%s/Split' % blk, 4))
    br0 = conv2d(net,
                 '%s/Branch_0/Conv2d_0a_1x1' % blk,
                 depth(192), [1, 1],
                 src=s)
    br1 = conv2d(net,
                 '%s/Branch_1/Conv2d_0a_1x1' % blk,
                 depth(192), [1, 1],
                 src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0b_1x7' % blk, depth(192), [1, 7])
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0c_7x1' % blk, depth(192), [7, 1])
    br2 = conv2d(net,
                 '%s/Branch_2/Conv2d_0a_1x1' % blk,
                 depth(192), [1, 1],
                 src=s)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0b_7x1' % blk, depth(192), [7, 1])
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0c_1x7' % blk, depth(192), [1, 7])
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0d_7x1' % blk, depth(192), [7, 1])
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0e_1x7' % blk, depth(192), [1, 7])
    br3 = net.add(AvgPooling2D('%s/Branch_3/AvgPool_0a_3x3' % blk, 3, 1), s)
    br3 = conv2d(net, '%s/Branch_3/Conv2d_0b_1x1' % blk, depth(192), [1, 1])
    end_points[blk] = net.add(Concat('%s/Concat' % blk, 1),
                              [br0, br1, br2, br3])
    if final_aux_check(blk):
        return net, end_points

    # mixed_8: 8 x 8 x 1280.
    blk = V3 + '/Mixed_7a'
    s = net.add(Split('%s/Split' % blk, 3))
    br0 = conv2d(net,
                 '%s/Branch_0/Conv2d_0a_1x1' % blk,
                 depth(192), [1, 1],
                 src=s)
    br0 = conv2d(net,
                 '%s/Branch_0/Conv2d_1a_3x3' % blk,
                 depth(320), [3, 3],
                 2,
                 border_mode='VALID')
    br1 = conv2d(net,
                 '%s/Branch_1/Conv2d_0a_1x1' % blk,
                 depth(192), [1, 1],
                 src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0b_1x7' % blk, depth(192), [1, 7])
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0c_7x1' % blk, depth(192), [7, 1])
    br1 = conv2d(net,
                 '%s/Branch_1/Conv2d_1a_3x3' % blk,
                 depth(192), [3, 3],
                 2,
                 border_mode='VALID')
    br2 = net.add(
        MaxPooling2D('%s/Branch_2/MaxPool_1a_3x3' % blk,
                     3,
                     2,
                     border_mode='VALID'), s)
    end_points[blk] = net.add(Concat('%s/Concat' % blk, 1), [br0, br1, br2])
    if final_aux_check(blk):
        return net, end_points

    # mixed_9: 8 x 8 x 2048.
    blk = V3 + '/Mixed_7b'
    s = net.add(Split('%s/Split' % blk, 4))
    br0 = conv2d(net, '%s/Branch_0/Conv2d_0a_1x1' % blk, depth(320), 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0a_1x1' % blk, depth(384), 1, src=s)
    s1 = net.add(Split('%s/Branch_1/Split1' % blk, 2))
    br11 = conv2d(net,
                  '%s/Branch_1/Conv2d_0b_1x3' % blk,
                  depth(384), [1, 3],
                  src=s1)
    br12 = conv2d(net,
                  '%s/Branch_1/Conv2d_0b_3x1' % blk,
                  depth(384), [3, 1],
                  src=s1)
    br1 = net.add(Concat('%s/Branch_1/Concat1' % blk, 1), [br11, br12])
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0a_1x1' % blk, depth(448), 1, src=s)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0b_3x3' % blk, depth(384), 3)
    s2 = net.add(Split('%s/Branch_2/Split2' % blk, 2))
    br21 = conv2d(net,
                  '%s/Branch_2/Conv2d_0c_1x3' % blk,
                  depth(384), [1, 3],
                  src=s2)
    br22 = conv2d(net,
                  '%s/Branch_2/Conv2d_0d_3x1' % blk,
                  depth(384), [3, 1],
                  src=s2)
    br2 = net.add(Concat('%s/Branch_2/Concat2' % blk, 1), [br21, br22])
    br3 = net.add(AvgPooling2D('%s/Branch_3/AvgPool_0a_3x3' % blk, 3, 1),
                  src=s)
    br3 = conv2d(net, '%s/Branch_3/Conv2d_0b_1x1' % blk, depth(192), [1, 1])
    end_points[blk] = net.add(Concat('%s/Concat' % blk, 1),
                              [br0, br1, br2, br3])
    if final_aux_check(blk):
        return net, end_points

    # mixed_10: 8 x 8 x 2048.
    blk = V3 + '/Mixed_7c'
    s = net.add(Split('%s/Split' % blk, 4))
    br0 = conv2d(net, '%s/Branch_0/Conv2d_0a_1x1' % blk, depth(320), 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0a_1x1' % blk, depth(384), 1, src=s)
    s1 = net.add(Split('%s/Branch_1/Split1' % blk, 2))
    br11 = conv2d(net,
                  '%s/Branch_1/Conv2d_0b_1x3' % blk,
                  depth(384), [1, 3],
                  src=s1)
    br12 = conv2d(net,
                  '%s/Branch_1/Conv2d_0c_3x1' % blk,
                  depth(384), [3, 1],
                  src=s1)
    br1 = net.add(Concat('%s/Branch_1/Concat1' % blk, 1), [br11, br12])
    br2 = conv2d(net,
                 '%s/Branch_2/Conv2d_0a_1x1' % blk,
                 depth(448), [1, 1],
                 src=s)
    br2 = conv2d(net, '%s/Branch_2/Conv2d_0b_3x3' % blk, depth(384), [3, 3])
    s2 = net.add(Split('%s/Branch_2/Split2' % blk, 2))
    br21 = conv2d(net,
                  '%s/Branch_2/Conv2d_0c_1x3' % blk,
                  depth(384), [1, 3],
                  src=s2)
    br22 = conv2d(net,
                  '%s/Branch_2/Conv2d_0d_3x1' % blk,
                  depth(384), [3, 1],
                  src=s2)
    br2 = net.add(Concat('%s/Branch_2/Concat2' % blk, 1), [br21, br22])
    br3 = net.add(AvgPooling2D('%s/Branch_3/AvgPool_0a_3x3' % blk, 3, 1),
                  src=s)
    br3 = conv2d(net, '%s/Branch_3/Conv2d_0b_1x1' % blk, depth(192), [1, 1])
    end_points[blk] = net.add(Concat('%s/Concat' % blk, 1),
                              [br0, br1, br2, br3])
    assert final_endpoint == blk, \
        'final_enpoint = %s is not in the net' % final_endpoint
    return net, end_points
コード例 #9
0
ファイル: inception_v4.py プロジェクト: zpqiu/incubator-singa
def inception_v4_base(sample_shape,
                      final_endpoint='Inception/Mixed_7d',
                      aux_endpoint='Inception/Mixed_6e'):
    """Creates the Inception V4 network up to the given final endpoint.

    Endpoint name list: 'InceptionV4/' +
        ['Conv2d_1a_3x3', 'Conv2d_2a_3x3', 'Conv2d_2b_3x3',
        'Mixed_3a', 'Mixed_4a', 'Mixed_5a', 'Mixed_5b', 'Mixed_5c', 'Mixed_5d',
        'Mixed_5e', 'Mixed_6a', 'Mixed_6b', 'Mixed_6c', 'Mixed_6d', 'Mixed_6e',
        'Mixed_6f', 'Mixed_6g', 'Mixed_6h', 'Mixed_7a', 'Mixed_7b', 'Mixed_7c',
        'Mixed_7d']

    Args:
        sample_shape: input image sample shape, 3d tuple
        final_endpoint: specifies the endpoint to construct the network up to.
        aux_endpoint: for aux loss.

    Returns:
        the neural net
        the set of end_points from the inception model.
    """
    name = 'InceptionV4'
    end_points = {}
    net = ffnet.FeedForwardNet()

    def final_aux_check(block_name):
        if block_name == final_endpoint:
            return True
        if block_name == aux_endpoint:
            aux = aux_endpoint + '-aux'
            end_points[aux] = net.add(Split(aux, 2))
        return False

    # 299 x 299 x 3
    blk = name + '/Conv2d_1a_3x3'
    net.add(
        Conv2D(blk,
               32,
               3,
               2,
               border_mode='VALID',
               use_bias=False,
               input_sample_shape=sample_shape))
    net.add(BatchNormalization('%s/BatchNorm' % blk))
    end_points[blk] = net.add(Activation('%s/relu' % blk))
    if final_aux_check(blk):
        return net, end_points

    # 149 x 149 x 32
    blk = name + '/Conv2d_2a_3x3'
    end_points[blk] = conv2d(net, blk, 32, 3, border_mode='VALID')
    if final_aux_check(blk):
        return net, end_points

    # 147 x 147 x 32
    blk = name + '/Conv2d_2b_3x3'
    end_points[blk] = conv2d(net, blk, 64, 3)
    if final_aux_check(blk):
        return net, end_points

    # 147 x 147 x 64
    blk = name + '/Mixed_3a'
    s = net.add(Split('%s/Split' % blk, 2))
    br0 = net.add(
        MaxPooling2D('%s/Branch_0/MaxPool_0a_3x3' % blk,
                     3,
                     2,
                     border_mode='VALID'), s)
    br1 = conv2d(net,
                 '%s/Branch_1/Conv2d_0a_3x3' % blk,
                 96,
                 3,
                 2,
                 border_mode='VALID',
                 src=s)
    end_points[blk] = net.add(Concat('%s/Concat' % blk, 1), [br0, br1])
    if final_aux_check(blk):
        return net, end_points

    # 73 x 73 x 160
    blk = name + '/Mixed_4a'
    s = net.add(Split('%s/Split' % blk, 2))
    br0 = conv2d(net, '%s/Branch_0/Conv2d_0a_1x1' % blk, 64, 1, src=s)
    br0 = conv2d(net,
                 '%s/Branch_0/Conv2d_1a_3x3' % blk,
                 96,
                 3,
                 border_mode='VALID')
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0a_1x1' % blk, 64, 1, src=s)
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0b_1x7' % blk, 64, (1, 7))
    br1 = conv2d(net, '%s/Branch_1/Conv2d_0c_7x1' % blk, 64, (7, 1))
    br1 = conv2d(net,
                 '%s/Branch_1/Conv2d_1a_3x3' % blk,
                 96,
                 3,
                 border_mode='VALID')
    end_points[blk] = net.add(Concat('%s/Concat' % blk, 1), [br0, br1])
    if final_aux_check(blk):
        return net, end_points

    # 71 x 71 x 192
    blk = name + '/Mixed_5a'
    s = net.add(Split('%s/Split' % blk, 2))
    br0 = conv2d(net,
                 '%s/Branch_0/Conv2d_1a_3x3' % blk,
                 192,
                 3,
                 2,
                 border_mode='VALID',
                 src=s)
    br1 = net.add(
        MaxPooling2D('%s/Branch_1/MaxPool_1a_3x3' % blk,
                     3,
                     2,
                     border_mode='VALID'), s)
    end_points[blk] = net.add(Concat('%s/Concat' % blk, 1), [br0, br1])
    if final_aux_check(blk):
        return net, end_points

    # 35 x 35 x 384
    # 4 x Inception-A blocks
    for idx in range(4):
        blk = name + '/Mixed_5' + chr(ord('b') + idx)
        end_points[blk] = block_inception_a(blk, net)
        if final_aux_check(blk):
            return net, end_points

    # 35 x 35 x 384
    # Reduction-A block
    blk = name + '/Mixed_6a'
    end_points[blk] = block_reduction_a(blk, net)
    if final_aux_check(blk):
        return net, end_points[blk], end_points

    # 17 x 17 x 1024
    # 7 x Inception-B blocks
    for idx in range(7):
        blk = name + '/Mixed_6' + chr(ord('b') + idx)
        end_points[blk] = block_inception_b(blk, net)
        if final_aux_check(blk):
            return net, end_points

    # 17 x 17 x 1024
    # Reduction-B block
    blk = name + '/Mixed_7a'
    end_points[blk] = block_reduction_b(blk, net)
    if final_aux_check(blk):
        return net, end_points

    # 8 x 8 x 1536
    # 3 x Inception-C blocks
    for idx in range(3):
        blk = name + '/Mixed_7' + chr(ord('b') + idx)
        end_points[blk] = block_inception_c(blk, net)
        if final_aux_check(blk):
            return net, end_points

    assert final_endpoint == blk, \
        'final_enpoint = %s is not in the net' % final_endpoint
コード例 #10
0
def add_layer(name, net, growth_rate):
    split = net.add(Split('%s/split' % name, 2))
    dense = add_dense_connected_layers(name, net, growth_rate)
    net.add(Concat('%s/concat' % name, 1), [split, dense])