예제 #1
0
def Reduction_A(input_tensor, version=None, name=None):
    k, l, m, n = reduction_table[version]

    branch_1 = MaxPooling2D((3, 3), padding="valid", strides=2)(input_tensor)

    branch_2 = conv2d_bn(input_tensor, n, (3, 3), padding="valid", strides=2)

    branch_3 = conv2d_bn(input_tensor, k, (1, 1))
    branch_3 = conv2d_bn(branch_3, l, (3, 3))
    branch_3 = conv2d_bn(branch_3, m, (3, 3), padding="valid", strides=2)

    filter_concat = (Concatenate(name=name)([branch_1, branch_2, branch_3]) if
                     name else Concatenate()([branch_1, branch_2, branch_3]))

    return filter_concat
예제 #2
0
def Inception_B(input_tensor, name=None):
    branch_1 = AveragePooling2D((3, 3), strides=1,
                                padding="same")(input_tensor)
    branch_1 = conv2d_bn(branch_1, 128, (1, 1))

    branch_2 = conv2d_bn(input_tensor, 384, (1, 1))

    branch_3 = conv2d_bn(input_tensor, 192, (1, 1))
    branch_3 = conv2d_bn(branch_3, 224, (1, 7))
    branch_3 = conv2d_bn(branch_3, 256, (7, 1))  # Fig.6 is wrong

    branch_4 = conv2d_bn(input_tensor, 192, (1, 1))
    branch_4 = conv2d_bn(branch_4, 192, (1, 7))
    branch_4 = conv2d_bn(branch_4, 224, (7, 1))
    branch_4 = conv2d_bn(branch_4, 224, (1, 7))
    branch_4 = conv2d_bn(branch_4, 256, (7, 1))

    filter_concat = (Concatenate(
        name=name)([branch_1, branch_2, branch_3, branch_4]) if name else
                     Concatenate()([branch_1, branch_2, branch_3, branch_4]))

    return filter_concat
예제 #3
0
def Inception_C(input_tensor, name=None):
    branch_1 = AveragePooling2D((3, 3), strides=1,
                                padding="same")(input_tensor)
    branch_1 = conv2d_bn(branch_1, 256, (1, 1))

    branch_2 = conv2d_bn(input_tensor, 256, (1, 1))

    branch_3 = conv2d_bn(input_tensor, 384, (1, 1))
    branch_3a = conv2d_bn(branch_3, 256, (1, 3))
    branch_3b = conv2d_bn(branch_3, 256, (3, 1))
    branch_3 = Concatenate()([branch_3a, branch_3b])

    branch_4 = conv2d_bn(input_tensor, 384, (1, 1))
    branch_4 = conv2d_bn(branch_4, 448, (1, 3))
    branch_4 = conv2d_bn(branch_4, 512, (3, 1))
    branch_4a = conv2d_bn(branch_4, 256, (1, 3))
    branch_4b = conv2d_bn(branch_4, 256, (3, 1))
    branch_4 = Concatenate()([branch_4a, branch_4b])

    filter_concat = (Concatenate(
        name=name)([branch_1, branch_2, branch_3, branch_4]) if name else
                     Concatenate()([branch_1, branch_2, branch_3, branch_4]))

    return filter_concat
예제 #4
0
def Reduction_B(input_tensor, version=None, name=None):
    branch_1 = MaxPooling2D((3, 3), padding="valid", strides=2)(input_tensor)

    branch_2 = conv2d_bn(input_tensor, 192, (1, 1))
    branch_2 = conv2d_bn(branch_2, 192, (3, 3), padding="valid", strides=2)

    branch_3 = conv2d_bn(input_tensor, 256, (1, 1))
    branch_3 = conv2d_bn(branch_3, 256, (1, 7))
    branch_3 = conv2d_bn(branch_3, 320, (7, 1))
    branch_3 = conv2d_bn(branch_3, 320, (3, 3), padding="valid", strides=2)

    filter_concat = (Concatenate(name=name)([branch_1, branch_2, branch_3]) if
                     name else Concatenate()([branch_1, branch_2, branch_3]))

    return filter_concat
예제 #5
0
def Inception_A(input_tensor, name=None):
    branch_1 = AveragePooling2D((3, 3), strides=1,
                                padding="same")(input_tensor)
    branch_1 = conv2d_bn(branch_1, 96, (1, 1))

    branch_2 = conv2d_bn(input_tensor, 96, (1, 1))

    branch_3 = conv2d_bn(input_tensor, 64, (1, 1))
    branch_3 = conv2d_bn(branch_3, 96, (3, 3))

    branch_4 = conv2d_bn(input_tensor, 64, (1, 1))
    branch_4 = conv2d_bn(branch_4, 96, (3, 3))
    branch_4 = conv2d_bn(branch_4, 96, (3, 3))

    filter_concat = (Concatenate(
        name=name)([branch_1, branch_2, branch_3, branch_4]) if name else
                     Concatenate()([branch_1, branch_2, branch_3, branch_4]))

    return filter_concat
예제 #6
0
def Stem(input_tensor, version=None, name=None):
    x = conv2d_bn(input_tensor, 32, (3, 3), padding="valid",
                  strides=2)  # 299x299x3 -> 149x149x32
    x = conv2d_bn(x, 32, (3, 3), padding="valid")  # 149x149x32 -> 147x147x32
    x = conv2d_bn(x, 64, (3, 3))  # 147x147x32 -> 147x147x64

    branch_1 = MaxPooling2D((3, 3), padding="valid", strides=2)(x)
    branch_2 = conv2d_bn(x, 96, (3, 3), padding="valid", strides=2)
    x = Concatenate()([branch_1, branch_2])  # 73x73x160

    branch_1 = conv2d_bn(x, 64, (1, 1))
    branch_1 = conv2d_bn(branch_1, 96, (3, 3), padding="valid")
    branch_2 = conv2d_bn(x, 64, (1, 1))
    branch_2 = conv2d_bn(branch_2, 64, (7, 1))
    branch_2 = conv2d_bn(branch_2, 64, (1, 7))
    branch_2 = conv2d_bn(branch_2, 96, (3, 3), padding="valid")
    x = Concatenate()([branch_1, branch_2])  # 71x71x192

    branch_1 = conv2d_bn(x, 192, (3, 3), padding="valid",
                         strides=2)  # Fig.4 is wrong
    branch_2 = MaxPooling2D((3, 3), padding="valid", strides=2)(x)
    x = (Concatenate(name=name)([branch_1, branch_2])
         if name else Concatenate()([branch_1, branch_2]))  # 35x35x384

    return x