Esempio n. 1
0
File: Models.py Progetto: ebsrn/CORE
 def inception_17(hidden_channel, name):
     # 1x1
     s1 = ConvBN(768, 192, 1, 1, 0, name['1x1'][0])
     # 7x7
     s21 = ConvBN(768, hidden_channel, 1, 1, 0, name['7x7'][0])
     s22 = ConvBN(hidden_channel, hidden_channel, (1, 7), (1, 1),
                  (0, 3), name['7x7'][1])
     s23 = ConvBN(hidden_channel, 192, (7, 1), (1, 1), (3, 0),
                  name['7x7'][2])
     s2 = Sequential(s21, s22, s23)
     # double 7x7
     s31 = ConvBN(768, hidden_channel, 1, 1, 0, name['double7x7'][0])
     s32 = ConvBN(hidden_channel, hidden_channel, (7, 1), (1, 1),
                  (3, 0), name['double7x7'][1])
     s33 = ConvBN(hidden_channel, hidden_channel, (1, 7), (1, 1),
                  (0, 3), name['double7x7'][2])
     s34 = ConvBN(hidden_channel, hidden_channel, (7, 1), (1, 1),
                  (3, 0), name['double7x7'][3])
     s35 = ConvBN(hidden_channel, 192, (1, 7), (1, 1), (0, 3),
                  name['double7x7'][4])
     s3 = Sequential(s31, s32, s33, s34, s35)
     # pool
     s4 = ConvBN(768,
                 192,
                 1,
                 1,
                 0,
                 name['pool'][1],
                 pool=A.AveragePooling2D(3, 1, 1))
     return Inception(s1, s2, s3, s4)
Esempio n. 2
0
File: Models.py Progetto: ebsrn/CORE
 def inception_8(input_channel, name):
     # 1x1
     s1 = ConvBN(input_channel, 320, 1, 1, 0, name['1x1'][0])
     # 3x3
     s21 = ConvBN(input_channel, 384, 1, 1, 0, name['3x3'][0])
     s22 = Inception(
         ConvBN(384, 384, (1, 3), (1, 1), (0, 1), name['3x3'][1]),
         ConvBN(384, 384, (3, 1), (1, 1), (1, 0), name['3x3'][2]))
     s2 = Sequential(s21, s22)
     # double 3x3
     s31 = ConvBN(input_channel, 448, 1, 1, 0, name['double3x3'][0])
     s32 = ConvBN(448, 384, 3, 1, 1, name['double3x3'][1])
     s331 = ConvBN(384, 384, (1, 3), (1, 1), (0, 1),
                   name['double3x3'][2])
     s332 = ConvBN(384, 384, (3, 1), (1, 1), (1, 0),
                   name['double3x3'][3])
     s33 = Inception(s331, s332)
     s3 = Sequential(s31, s32, s33)
     # pool
     s4 = ConvBN(input_channel,
                 192,
                 1,
                 1,
                 0,
                 name['pool'][1],
                 pool=A.AveragePooling2D(3, 1, 1))
     return Inception(s1, s2, s3, s4)
Esempio n. 3
0
        def inception_1(hidden_channel):
            # 1x1
            s1 = AuxConv(C.Convolution2D(768, 192, 1, use_cudnn=use_cudnn))

            # 7x7
            s21 = AuxConv(
                C.Convolution2D(768, hidden_channel, 1, use_cudnn=use_cudnn))
            s22 = AuxConv(
                C.Convolution2D(hidden_channel,
                                hidden_channel, (1, 7),
                                pad=(0, 3),
                                use_cudnn=use_cudnn))
            s23 = AuxConv(
                C.Convolution2D(hidden_channel,
                                192, (7, 1),
                                pad=(3, 0),
                                use_cudnn=use_cudnn))
            s2 = Sequential(s21, s22, s23)

            # double 7x7
            s31 = AuxConv(
                C.Convolution2D(768, hidden_channel, 1, use_cudnn=use_cudnn))
            s32 = AuxConv(
                C.Convolution2D(hidden_channel,
                                hidden_channel, (1, 7),
                                pad=(0, 3),
                                use_cudnn=use_cudnn))
            s33 = AuxConv(
                C.Convolution2D(hidden_channel,
                                hidden_channel, (7, 1),
                                pad=(3, 0),
                                use_cudnn=use_cudnn))
            s34 = AuxConv(
                C.Convolution2D(hidden_channel,
                                hidden_channel, (1, 7),
                                pad=(0, 3),
                                use_cudnn=use_cudnn))
            s35 = AuxConv(
                C.Convolution2D(hidden_channel,
                                192, (7, 1),
                                pad=(3, 0),
                                use_cudnn=use_cudnn))
            s3 = Sequential(s31, s32, s33, s34, s35)

            # pool
            s4 = AuxConv(C.Convolution2D(768,
                                         192,
                                         3,
                                         pad=1,
                                         use_cudnn=use_cudnn),
                         pool=A.AveragePooling2D(3, 1, 1, use_cudnn=use_cudnn))

            return Inception(s1, s2, s3, s4)
Esempio n. 4
0
        def inception_2(input_channel):
            # 1x1
            s1 = AuxConv(
                C.Convolution2D(input_channel, 320, 1, use_cudnn=use_cudnn))

            # 3x3
            s21 = AuxConv(
                C.Convolution2D(input_channel, 384, 1, use_cudnn=use_cudnn))
            s22 = Inception(
                AuxConv(
                    C.Convolution2D(384,
                                    384, (1, 3),
                                    pad=(0, 1),
                                    use_cudnn=use_cudnn)),
                AuxConv(
                    C.Convolution2D(384,
                                    384, (3, 1),
                                    pad=(1, 0),
                                    use_cudnn=use_cudnn)))
            s2 = Sequential(s21, s22)

            # double 3x3
            s31 = AuxConv(
                C.Convolution2D(input_channel, 448, 1, use_cudnn=use_cudnn))
            s32 = AuxConv(
                C.Convolution2D(448, 384, 3, pad=1, use_cudnn=use_cudnn))
            s331 = AuxConv(
                C.Convolution2D(384,
                                384, (1, 3),
                                pad=(0, 1),
                                use_cudnn=use_cudnn))
            s332 = AuxConv(
                C.Convolution2D(384,
                                384, (3, 1),
                                pad=(1, 0),
                                use_cudnn=use_cudnn))
            s33 = Inception(s331, s332)
            s3 = Sequential(s31, s32, s33)

            # pool
            s4 = AuxConv(C.Convolution2D(input_channel,
                                         192,
                                         3,
                                         pad=1,
                                         use_cudnn=use_cudnn),
                         pool=A.AveragePooling2D(3, 1, 1, use_cudnn=use_cudnn))
            return Inception(s1, s2, s3, s4)
    def __init__(self, in_channels, out1, proj3, out3, proj33, out33,
                 pooltype, proj_pool=None, stride=1):
        if out1 > 0:
            assert stride == 1
            assert proj_pool is not None

        self.f = function_set.FunctionSet(
            proj3=convolution_2d.Convolution2D(
                in_channels, proj3, 1, nobias=True),
            conv3=convolution_2d.Convolution2D(
                proj3, out3, 3, pad=1, stride=stride, nobias=True),
            proj33=convolution_2d.Convolution2D(
                in_channels, proj33, 1, nobias=True),
            conv33a=convolution_2d.Convolution2D(
                proj33, out33, 3, pad=1, nobias=True),
            conv33b=convolution_2d.Convolution2D(
                out33, out33, 3, pad=1, stride=stride, nobias=True),
            proj3n=batch_normalization.BatchNormalization(proj3),
            conv3n=batch_normalization.BatchNormalization(out3),
            proj33n=batch_normalization.BatchNormalization(proj33),
            conv33an=batch_normalization.BatchNormalization(out33),
            conv33bn=batch_normalization.BatchNormalization(out33),
        )

        if out1 > 0:
            self.f.conv1 = convolution_2d.Convolution2D(
                in_channels, out1, 1, stride=stride, nobias=True)
            self.f.conv1n = batch_normalization.BatchNormalization(out1)
        self.out1 = out1

        if proj_pool is not None:
            self.f.poolp = convolution_2d.Convolution2D(
                in_channels, proj_pool, 1, nobias=True)
            self.f.poolpn = batch_normalization.BatchNormalization(proj_pool)
        self.proj_pool = proj_pool

        if pooltype == 'max':
            self.f.pool = max_pooling_2d.MaxPooling2D(3, stride=stride, pad=1)
        elif pooltype == 'avg':
            self.f.pool = average_pooling_2d.AveragePooling2D(
                3, stride=stride, pad=1)
        else:
            raise NotImplementedError()
Esempio n. 6
0
File: Models.py Progetto: ebsrn/CORE
 def inception_35(ich, pch, name):
     # 1x1
     s1 = ConvBN(ich, 64, 1, 1, 0, name['1x1'][0])
     # 5x5
     s21 = ConvBN(ich, 48, 1, 1, 0, name['5x5'][0])
     s22 = ConvBN(48, 64, 5, 1, 2, name['5x5'][1])
     s2 = Sequential(s21, s22)
     # double 3x3
     s31 = ConvBN(ich, 64, 1, 1, 0, name['3x3'][0])
     s32 = ConvBN(64, 96, 3, 1, 1, name['3x3'][1])
     s33 = ConvBN(96, 96, 3, 1, 1, name['3x3'][2])
     s3 = Sequential(s31, s32, s33)
     # pool
     s4 = ConvBN(ich,
                 pch,
                 1,
                 1,
                 0,
                 name['pool'][1],
                 pool=A.AveragePooling2D(3, 1, 1))
     return Inception(s1, s2, s3, s4)
Esempio n. 7
0
    def __init__(self, use_cudnn=True):
        convolution = link.ChainList(
            AuxConv(C.Convolution2D(3, 32, 3, 2, use_cudnn=use_cudnn)),
            AuxConv(C.Convolution2D(32, 32, 3, use_cudnn=use_cudnn)),
            AuxConv(C.Convolution2D(32, 64, 3, 1, 1, use_cudnn=use_cudnn)),
            AuxConv(C.Convolution2D(64, 80, 3, 1, 1, use_cudnn=use_cudnn)),
            AuxConv(C.Convolution2D(80, 192, 3, use_cudnn=use_cudnn)))

        def inception_0(input_channel, pool_channel):
            # 1x1
            s1 = AuxConv(
                C.Convolution2D(input_channel, 64, 1, use_cudnn=use_cudnn))

            # 5x5
            s21 = AuxConv(
                C.Convolution2D(input_channel, 48, 1, use_cudnn=use_cudnn))
            s22 = AuxConv(
                C.Convolution2D(48, 64, 5, pad=2, use_cudnn=use_cudnn))
            s2 = Sequential(s21, s22)

            # double 3x3
            s31 = AuxConv(
                C.Convolution2D(input_channel, 64, 1, use_cudnn=use_cudnn))
            s32 = AuxConv(
                C.Convolution2D(64, 96, 3, pad=1, use_cudnn=use_cudnn))
            s33 = AuxConv(
                C.Convolution2D(96, 96, 3, pad=1, use_cudnn=use_cudnn))
            s3 = Sequential(s31, s32, s33)

            # pool
            s4 = AuxConv(C.Convolution2D(input_channel,
                                         pool_channel,
                                         3,
                                         pad=1,
                                         use_cudnn=use_cudnn),
                         pool=M.MaxPooling2D(3, 1, 1, use_cudnn=use_cudnn))

            return Inception(s1, s2, s3, s4)

        inception0 = Sequential(*[
            inception_0(input_channel, pool_channel) for input_channel,
            pool_channel in zip([192, 256, 288], [32, 64, 64])
        ])

        grid_reduction0 = Inception(
            # strided 3x3
            AuxConv(C.Convolution2D(288, 384, 3, 2, use_cudnn=use_cudnn)),
            # double 3x3
            Sequential(
                AuxConv(C.Convolution2D(288, 64, 1, use_cudnn=use_cudnn)),
                AuxConv(C.Convolution2D(64, 96, 3, pad=1,
                                        use_cudnn=use_cudnn)),
                AuxConv(C.Convolution2D(96, 96, 3, 2, use_cudnn=use_cudnn))),
            # pool
            pool=M.MaxPooling2D(3, 2))

        def inception_1(hidden_channel):
            # 1x1
            s1 = AuxConv(C.Convolution2D(768, 192, 1, use_cudnn=use_cudnn))

            # 7x7
            s21 = AuxConv(
                C.Convolution2D(768, hidden_channel, 1, use_cudnn=use_cudnn))
            s22 = AuxConv(
                C.Convolution2D(hidden_channel,
                                hidden_channel, (1, 7),
                                pad=(0, 3),
                                use_cudnn=use_cudnn))
            s23 = AuxConv(
                C.Convolution2D(hidden_channel,
                                192, (7, 1),
                                pad=(3, 0),
                                use_cudnn=use_cudnn))
            s2 = Sequential(s21, s22, s23)

            # double 7x7
            s31 = AuxConv(
                C.Convolution2D(768, hidden_channel, 1, use_cudnn=use_cudnn))
            s32 = AuxConv(
                C.Convolution2D(hidden_channel,
                                hidden_channel, (1, 7),
                                pad=(0, 3),
                                use_cudnn=use_cudnn))
            s33 = AuxConv(
                C.Convolution2D(hidden_channel,
                                hidden_channel, (7, 1),
                                pad=(3, 0),
                                use_cudnn=use_cudnn))
            s34 = AuxConv(
                C.Convolution2D(hidden_channel,
                                hidden_channel, (1, 7),
                                pad=(0, 3),
                                use_cudnn=use_cudnn))
            s35 = AuxConv(
                C.Convolution2D(hidden_channel,
                                192, (7, 1),
                                pad=(3, 0),
                                use_cudnn=use_cudnn))
            s3 = Sequential(s31, s32, s33, s34, s35)

            # pool
            s4 = AuxConv(C.Convolution2D(768,
                                         192,
                                         3,
                                         pad=1,
                                         use_cudnn=use_cudnn),
                         pool=A.AveragePooling2D(3, 1, 1, use_cudnn=use_cudnn))

            return Inception(s1, s2, s3, s4)

        inception1 = Sequential(
            *[inception_1(c) for c in [128, 160, 160, 192]])

        grid_reduction1 = Inception(
            # strided 3x3
            Sequential(
                AuxConv(C.Convolution2D(768, 192, 1, use_cudnn=use_cudnn)),
                AuxConv(C.Convolution2D(192, 320, 3, 2, use_cudnn=use_cudnn))),
            # 7x7 and 3x3
            Sequential(
                AuxConv(C.Convolution2D(768, 192, 1, use_cudnn=use_cudnn)),
                AuxConv(
                    C.Convolution2D(192,
                                    192, (1, 7),
                                    pad=(0, 3),
                                    use_cudnn=use_cudnn)),
                AuxConv(
                    C.Convolution2D(192,
                                    192, (7, 1),
                                    pad=(3, 0),
                                    use_cudnn=use_cudnn)),
                AuxConv(C.Convolution2D(192, 192, 3, 2, use_cudnn=use_cudnn))),
            # pool
            pool=M.MaxPooling2D(3, 2, use_cudnn=use_cudnn))

        def inception_2(input_channel):
            # 1x1
            s1 = AuxConv(
                C.Convolution2D(input_channel, 320, 1, use_cudnn=use_cudnn))

            # 3x3
            s21 = AuxConv(
                C.Convolution2D(input_channel, 384, 1, use_cudnn=use_cudnn))
            s22 = Inception(
                AuxConv(
                    C.Convolution2D(384,
                                    384, (1, 3),
                                    pad=(0, 1),
                                    use_cudnn=use_cudnn)),
                AuxConv(
                    C.Convolution2D(384,
                                    384, (3, 1),
                                    pad=(1, 0),
                                    use_cudnn=use_cudnn)))
            s2 = Sequential(s21, s22)

            # double 3x3
            s31 = AuxConv(
                C.Convolution2D(input_channel, 448, 1, use_cudnn=use_cudnn))
            s32 = AuxConv(
                C.Convolution2D(448, 384, 3, pad=1, use_cudnn=use_cudnn))
            s331 = AuxConv(
                C.Convolution2D(384,
                                384, (1, 3),
                                pad=(0, 1),
                                use_cudnn=use_cudnn))
            s332 = AuxConv(
                C.Convolution2D(384,
                                384, (3, 1),
                                pad=(1, 0),
                                use_cudnn=use_cudnn))
            s33 = Inception(s331, s332)
            s3 = Sequential(s31, s32, s33)

            # pool
            s4 = AuxConv(C.Convolution2D(input_channel,
                                         192,
                                         3,
                                         pad=1,
                                         use_cudnn=use_cudnn),
                         pool=A.AveragePooling2D(3, 1, 1, use_cudnn=use_cudnn))
            return Inception(s1, s2, s3, s4)

        inception2 = Sequential(
            *[inception_2(input_channel) for input_channel in [1280, 2048]])

        auxiliary_convolution = Sequential(
            AuxConv(C.Convolution2D(768, 128, 1, use_cudnn=use_cudnn),
                    pool=A.AveragePooling2D(5, 3, use_cudnn=use_cudnn)),
            AuxConv(C.Convolution2D(128, 768, 5, use_cudnn=use_cudnn)))

        super(InceptionV3, self).__init__(
            convolution=convolution,
            inception=link.ChainList(inception0, inception1, inception2),
            grid_reduction=link.ChainList(grid_reduction0, grid_reduction1),
            auxiliary_convolution=auxiliary_convolution,
            auxiliary_linear=linear.Linear(768, 1000),
            linear=linear.Linear(2048, 1000))