コード例 #1
0
    def __init__(self, in_channels, ndf=64, n_layers=3, use_bias=False, istest=False, latent=256, usetanh = False ):
            super(Decoder, self).__init__()
            self.model = HybridSequential()
            kernel_size = 5
            padding = 0 
	    nf_mult = 2 ** n_layers
            self.model.add(Conv2DTranspose(channels=ndf * nf_mult/2, kernel_size=kernel_size, strides=2,
                                           padding=padding, in_channels=latent,
                                           use_bias=use_bias))
            self.model.add(BatchNorm(momentum=0.1, in_channels=ndf * nf_mult / 2, use_global_stats=istest))
            #self.model.add(LeakyReLU(alpha=0.2))
            self.model.add(Activation(activation='relu'))
            for n in range(1, n_layers):
                nf_mult = nf_mult / 2
                self.model.add(Conv2DTranspose(channels=ndf * nf_mult / 2, kernel_size=kernel_size, strides=2,
                                               padding=padding, in_channels=ndf * nf_mult,
                                               use_bias=use_bias))
                self.model.add(BatchNorm(momentum=0.1, in_channels=ndf * nf_mult / 2, use_global_stats=istest))
                #self.model.add(LeakyReLU(alpha=0.2))
                if n==2:
                      self.model.add(Dropout(rate=0.5))
                self.model.add(Activation(activation='relu'))
            self.model.add(Conv2DTranspose(channels=in_channels, kernel_size=kernel_size, strides=2,
                                           padding=padding, in_channels=ndf))

            #self.model.add(LeakyReLU(alpha=0.2))
            self.model.add(Activation(activation='tanh'))
コード例 #2
0
    def __init__(self,
                 inner_channels,
                 outer_channels,
                 inner_block=None,
                 innermost=False,
                 outermost=False,
                 use_dropout=False,
                 use_bias=False,
                 final_out=3):
        super(UnetSkipUnit, self).__init__()

        with self.name_scope():
            self.outermost = outermost
            en_conv = Conv2D(channels=inner_channels,
                             kernel_size=4,
                             strides=2,
                             padding=1,
                             in_channels=outer_channels,
                             use_bias=use_bias)
            en_relu = LeakyReLU(alpha=0.2)
            en_norm = BatchNorm(momentum=0.1, in_channels=inner_channels)
            de_relu = Activation(activation='relu')
            de_norm = BatchNorm(momentum=0.1, in_channels=outer_channels)

            if innermost:
                de_conv = Conv2DTranspose(channels=outer_channels,
                                          kernel_size=4,
                                          strides=2,
                                          padding=1,
                                          in_channels=inner_channels,
                                          use_bias=use_bias)
                encoder = [en_relu, en_conv]
                decoder = [de_relu, de_conv, de_norm]
                model = encoder + decoder
            elif outermost:
                de_conv = Conv2DTranspose(channels=final_out,
                                          kernel_size=4,
                                          strides=2,
                                          padding=1,
                                          in_channels=inner_channels * 2)
                encoder = [en_conv]
                decoder = [de_relu, de_conv, Activation(activation='tanh')]
                model = encoder + [inner_block] + decoder
            else:
                de_conv = Conv2DTranspose(channels=outer_channels,
                                          kernel_size=4,
                                          strides=2,
                                          padding=1,
                                          in_channels=inner_channels * 2,
                                          use_bias=use_bias)
                encoder = [en_relu, en_conv, en_norm]
                decoder = [de_relu, de_conv, de_norm]
                model = encoder + [inner_block] + decoder
            if use_dropout:
                model += [Dropout(rate=0.5)]

            self.model = HybridSequential()
            with self.model.name_scope():
                for block in model:
                    self.model.add(block)
コード例 #3
0
def build_generator(n_filters, n_channels, mx_ctx):
    netG = HybridSequential()
    with netG.name_scope():
        # Input is Z
        netG.add(Conv2DTranspose(n_filters * 8, kernel_size=4, strides=1, padding=0, use_bias=False))
        netG.add(BatchNorm())
        netG.add(Activation("relu"))

        netG.add(Conv2DTranspose(n_filters * 4, kernel_size=4, strides=2, padding=1, use_bias=False))
        netG.add(BatchNorm())
        netG.add(Activation("relu"))

        netG.add(Conv2DTranspose(n_filters * 2, kernel_size=4, strides=2, padding=1, use_bias=False))
        netG.add(BatchNorm())
        netG.add(Activation("relu"))

        netG.add(Conv2DTranspose(n_filters, kernel_size=4, strides=2, padding=1, use_bias=False))
        netG.add(BatchNorm())
        netG.add(Activation("relu"))

        netG.add(Conv2DTranspose(n_channels, kernel_size=4, strides=2, padding=1, use_bias=False))
        netG.add(BatchNorm())
        netG.add(Activation("tanh"))

    netG.initialize(mx.init.Normal(0.02), ctx=mx_ctx)
    netG.hybridize()
    return netG
コード例 #4
0
    def __init__(self, in_channels, ndf=64, n_layers=3, use_bias=False, istest=False, usetanh = False ):
        super(CEGeneratorP, self).__init__()

        with self.name_scope():
            self.model = HybridSequential()
            kernel_size = 5
            padding = 0 #int(np.ceil((kernel_size - 1) / 2))
            self.model.add(Conv2D(channels=ndf, kernel_size=kernel_size, strides=2,
                                  padding=padding, in_channels=in_channels))
            self.model.add(LeakyReLU(alpha=0.2))
            nf_mult = 2;
            nf_mult_prev = 1;

            nf_mult = 1
            for n in range(1, n_layers):
                nf_mult_prev = nf_mult
                nf_mult = 2 ** n
                self.model.add(Conv2D(channels=ndf * nf_mult, kernel_size=kernel_size, strides=2,
                                      padding=padding, in_channels=ndf * nf_mult_prev,
                                      use_bias=use_bias))
                self.model.add(BatchNorm(momentum=0.1, in_channels=ndf * nf_mult, use_global_stats=istest))
                self.model.add(LeakyReLU(alpha=0.2))

            nf_mult_prev = nf_mult
            nf_mult = 2 ** n_layers
            self.model.add(Conv2D(channels=4096, kernel_size=kernel_size, strides=2,
                                  padding=padding, in_channels=ndf * nf_mult_prev,
                                  use_bias=use_bias))
            #self.model.add(BatchNorm(momentum=0.1, in_channels =128, use_global_stats=istest))
            if usetanh:
                self.model.add(Activation(activation='tanh'))
            else:
                self.model.add(LeakyReLU(alpha=0.2))

            # Decoder
            self.model.add(Conv2DTranspose(channels=ndf * nf_mult/2, kernel_size=kernel_size, strides=2,
                                           padding=padding, in_channels=4096,
                                           use_bias=use_bias))
            self.model.add(BatchNorm(momentum=0.1, in_channels=ndf * nf_mult / 2, use_global_stats=istest))
            #self.model.add(LeakyReLU(alpha=0.2))
            self.model.add(Activation(activation='relu'))
            for n in range(1, n_layers):
                nf_mult = nf_mult / 2
                self.model.add(Conv2DTranspose(channels=ndf * nf_mult / 2, kernel_size=kernel_size, strides=2,
                                               padding=padding, in_channels=ndf * nf_mult,
                                               use_bias=use_bias))
                self.model.add(BatchNorm(momentum=0.1, in_channels=ndf * nf_mult / 2, use_global_stats=istest))
                #self.model.add(LeakyReLU(alpha=0.2))
                if n==2:
                      self.model.add(Dropout(rate=0.5))
                self.model.add(Activation(activation='relu'))
            self.model.add(Conv2DTranspose(channels=in_channels, kernel_size=kernel_size, strides=2,
                                           padding=padding, in_channels=ndf))

            #self.model.add(LeakyReLU(alpha=0.2))
            self.model.add(Activation(activation='tanh'))
コード例 #5
0
    def __init__(self, in_channels, ndf=64, n_layers=3, use_bias=False):
        super(CEGenerator, self).__init__()

        with self.name_scope():
            self.model = HybridSequential()
            kernel_size = 4
            padding = int(np.ceil((kernel_size - 1) / 2))
            self.model.add(Conv2D(channels=ndf, kernel_size=kernel_size, strides=2,
                                  padding=padding, in_channels=in_channels))
            self.model.add(LeakyReLU(alpha=0.2))
            nf_mult = 2;
            nf_mult_prev = 1;

            nf_mult = 1
            for n in range(1, n_layers):
                nf_mult_prev = nf_mult
                nf_mult = 2 ** n
                self.model.add(Conv2D(channels=ndf * nf_mult, kernel_size=kernel_size, strides=2,
                                      padding=padding, in_channels=ndf * nf_mult_prev,
                                      use_bias=use_bias))
                self.model.add(BatchNorm(momentum=0.1, in_channels=ndf * nf_mult))
                self.model.add(LeakyReLU(alpha=0.2))

            nf_mult_prev = nf_mult
            nf_mult = 2 ** n_layers
            self.model.add(Conv2D(channels=ndf * nf_mult, kernel_size=kernel_size, strides=1,
                                  padding=padding, in_channels=ndf * nf_mult_prev,
                                  use_bias=use_bias))
            self.model.add(BatchNorm(momentum=0.1, in_channels=ndf * nf_mult))
            self.model.add(LeakyReLU(alpha=0.2))

            # Decoder
            self.model.add(Conv2DTranspose(channels=ndf * nf_mult / 2, kernel_size=kernel_size, strides=1,
                                           padding=padding, in_channels=ndf * nf_mult,
                                           use_bias=use_bias))
            self.model.add(BatchNorm(momentum=0.1, in_channels=ndf * nf_mult / 2))
            self.model.add(LeakyReLU(alpha=0.2))

            for n in range(1, n_layers):
                nf_mult = nf_mult / 2
                self.model.add(Conv2DTranspose(channels=ndf * nf_mult / 2, kernel_size=kernel_size, strides=2,
                                               padding=padding, in_channels=ndf * nf_mult,
                                               use_bias=use_bias))
                self.model.add(BatchNorm(momentum=0.1, in_channels=ndf * nf_mult / 2))
                self.model.add(LeakyReLU(alpha=0.2))

            self.model.add(Conv2DTranspose(channels=in_channels, kernel_size=kernel_size, strides=2,
                                           padding=padding, in_channels=ndf))
            self.model.add(LeakyReLU(alpha=0.2))
コード例 #6
0
    def __init__(self, count: int, depth: int) -> None:
        super(Network, self).__init__()

        self._count = count
        self._depth = depth

        with self.name_scope():
            self.add(Conv2D(64, 4, 2, 1, in_channels=depth))
            self.add(LeakyReLU(alpha=0.2))

            layer = Identity(512, 512)
            layer = Skip(512, 512, layer)

            for _ in range(0):
                layer = Skip(512, 512, layer)

                layer.block.add(Dropout(0.5))

            layer = Skip(256, 256, layer)
            layer = Skip(128, 128, layer)
            layer = Skip(64, 64, layer)

            self.add(layer)
            self.add(Conv2DTranspose(count, 4, 2, 1, in_channels=128))
            self.add(Activation("sigmoid"))

        for param in self.collect_params().values():
            param.initialize()
            if "bias" in param.name:
                param.set_data(zeros(param.data().shape))
            elif "gamma" in param.name:
                param.set_data(random_normal(1, 0.02, param.data().shape))
            elif "weight" in param.name:
                param.set_data(random_normal(0, 0.02, param.data().shape))
コード例 #7
0
ファイル: train_omniglot.py プロジェクト: gokererdogan/Papers
def build_decoder_nn():
    nnet = nn.HybridSequential()
    nnet.add(
        Conv2DTranspose(channels=1,
                        kernel_size=(5, 5),
                        strides=(2, 2),
                        output_padding=(1, 1)))
    return nnet
コード例 #8
0
    def __init__(self,
                 innerblock=None,
                 outer_channels=32,
                 inner_channels=64,
                 use_bias=False):
        super(middlelayer, self).__init__()
        with self.name_scope():
            res_block_1 = Res_Block(outer_channels=outer_channels)
            res_block_2 = Res_Block(outer_channels=inner_channels)
            en_conv = Conv2D(channels=inner_channels,
                             kernel_size=4,
                             strides=2,
                             padding=1,
                             in_channels=outer_channels,
                             use_bias=use_bias)
            en_relu = LeakyReLU(alpha=0.2)
            en_norm = BatchNorm(momentum=0.1, in_channels=inner_channels)

            de_relu = Activation(activation='relu')
            de_norm = BatchNorm(momentum=0.1, in_channels=outer_channels)
            de_conv = Conv2DTranspose(channels=outer_channels,
                                      kernel_size=4,
                                      strides=2,
                                      padding=1,
                                      in_channels=inner_channels,
                                      use_bias=use_bias)
            self.p_at = CA_M5(in_channel=inner_channels)
            self.c_at = CA_M4()

            res_block_3 = Res_Block(outer_channels=inner_channels)
            res_block_4 = Res_Block(outer_channels=outer_channels)
            res1 = res_block_1
            encoder = [en_conv, en_norm, en_relu]
            res2 = res_block_2
            res3 = res_block_3
            decoder = [de_conv, de_norm, de_relu]
            res4 = res_block_4

            self.encoder = HybridSequential()
            with self.encoder.name_scope():
                for block in encoder:
                    self.encoder.add(block)

            self.inner_block = innerblock

            self.res1 = res1
            self.res2 = res2
            self.res3 = res3
            self.res4 = res4

            self.decoder = HybridSequential()

            with self.decoder.name_scope():
                for block in decoder:
                    self.decoder.add(block)
コード例 #9
0
 def __init__(self, inchannels, outchannels, **kwargs):
     super(InceptionBlock, self).__init__(**kwargs)
     self.inchannels = inchannels
     self.outchannels = outchannels
     with self.name_scope():
         self.x5 = HybridSequential(prefix='x5-')
         self.x5.add(
             Conv2DTranspose(outchannels,
                             kernel_size=5,
                             strides=1,
                             padding=2), BatchNorm(), Activation('relu'))
         self.x3 = HybridSequential(prefix='x3-')
         self.x3.add(
             Conv2DTranspose(outchannels,
                             kernel_size=3,
                             strides=1,
                             padding=1), BatchNorm(), Activation('relu'))
         self.x1 = HybridSequential(prefix='x1-')
         self.x1.add(Conv2D(outchannels, kernel_size=1, strides=1),
                     BatchNorm(), Activation('relu'))
コード例 #10
0
    def __init__(self, base=18,
                 deconv_channels=(256, 128, 64),
                 deconv_kernels=(4, 4, 4),
                 pretrained=True,
                 root=os.path.join(os.getcwd(), 'models'),
                 use_dcnv2=False,
                 ctx=mx.cpu()):

        mxnet_version = float(mx.__version__[0:3])
        if mxnet_version < 1.5:
            logging.error("please upgrade mxnet version above 1.5.x")
            raise EnvironmentError

        super(UpConvResNet, self).__init__()
        self._use_dcnv2 = use_dcnv2
        self._resnet = get_resnet(base, pretrained=pretrained, root=root, ctx=ctx)
        self._upconv = HybridSequential('')
        with self._upconv.name_scope():
            for channel, kernel in zip(deconv_channels, deconv_kernels):
                kernel, padding, output_padding = self._get_conv_argument(kernel)
                if self._use_dcnv2:
                    '''
                    in paper, we first change the channels of the three upsampling layers to
                    256, 128, 64, respectively, to save computation, we then add one 3 x 3 deformable convolutional layer
                    before each up-convolution layer with channel 256, 128, 64 
                    '''
                    assert hasattr(contrib.cnn, 'ModulatedDeformableConvolution'), \
                        "No ModulatedDeformableConvolution found in mxnet, consider upgrade to mxnet 1.6.0..."
                    self._upconv.add(contrib.cnn.ModulatedDeformableConvolution(channels=channel,
                                                                                kernel_size=3,
                                                                                strides=1,
                                                                                padding=1,
                                                                                use_bias=False,
                                                                                num_deformable_group=1))
                else:
                    self._upconv.add(Conv2D(channels=channel,
                                            kernel_size=3,
                                            strides=1,
                                            padding=1, use_bias=False))
                self._upconv.add(BatchNorm(momentum=0.9))
                self._upconv.add(Activation('relu'))
                self._upconv.add(Conv2DTranspose(channels=channel,
                                                 kernel_size=kernel,
                                                 strides=2,
                                                 padding=padding,
                                                 output_padding=output_padding,
                                                 use_bias=False,
                                                 weight_initializer=mx.init.Bilinear()))
                self._upconv.add(BatchNorm(momentum=0.9))
                self._upconv.add(Activation('relu'))

        self._upconv.initialize(ctx=ctx)
        logging.info(f"{self.__class__.__name__} weight init 완료")
コード例 #11
0
 def __init__(self,in_channel, out_channel):
     super(decoder,self).__init__()
     with self.name_scope():
         de_conv=Conv2DTranspose(channels=out_channel, kernel_size=4, strides=2, padding=1,
                                       in_channels=in_channel)
         norm = BatchNorm(momentum=0.1, in_channels=out_channel)
         relu = LeakyReLU(alpha=0.2)
     decode=[de_conv,norm,relu]
     self.decoder = HybridSequential()
     with self.decoder.name_scope():
         for block in decode:
             self.decoder.add(block)
コード例 #12
0
 def __init__(self, opts, num_filters, res_block=True, factor=1, group=1):
     super(DecoderBlock, self).__init__()
     self.dcblock = HybridSequential()
     if res_block:
         self.dcblock.add(ResDBlock(opts, num_filters * 4, group=group))
     self.dcblock.add(BatchNorm(momentum=opts.bn_mom, epsilon=opts.bn_eps))
     self.dcblock.add(Activation(opts.activation))
     self.dcblock.add(
         Conv2DTranspose(channels=int(num_filters / factor),
                         kernel_size=(2, 2),
                         strides=(2, 2),
                         padding=(0, 0),
                         use_bias=opts.use_bias))
コード例 #13
0
ファイル: pixel2pixel.py プロジェクト: llququ/chiyuan
    def __init__(self, inner_channels, outer_channels, inner_block=None, innermost=False, outermost=False, use_dropout=False, use_bias=False):
        super(UnetSkipUnit, self).__init__()
        # 先定义一些基本的组件
        self.outermost = outermost
        en_conv = Conv2D(channels=inner_channels, kernel_size=4, strides=2, padding=1, in_channels=outer_channels, use_bias=use_bias)
        en_relu = LeakyReLU(alpha=0.2)
        en_bn = BatchNorm(momentum=0.1, in_channels=inner_channels)
        deconv_innermost = Conv2DTranspose(
            channels=outer_channels, kernel_size=4, strides=2, padding=1, in_channels=inner_channels, use_bias=use_bias)
        deconv_output = Conv2DTranspose(
            channels=outer_channels, kernel_size=4, strides=2, padding=1, in_channels=2*inner_channels, use_bias=True)
        deconv_common = de_conv_innermost = Conv2DTranspose(
            channels=outer_channels, kernel_size=4, strides=2, padding=1, in_channels=2*inner_channels, use_bias=use_bias)

        de_relu = Activation('relu')
        de_bn = BatchNorm(momentum=0.1, in_channels=outer_channels)
        # Unet网络块可以分为三种:最里面的,中间的,最外面的。
        if innermost:
            encoder = [en_relu, en_conv]
            decoder = [de_relu, deconv_innermost, de_bn]
            model = encoder + decoder
        elif outermost:
            encoder = [en_conv]
            decoder = [de_relu, deconv_output]
            model = encoder + [inner_block] + decoder
            model += [Activation('tanh')]
        else:
            encoder = [en_relu, en_conv, en_bn]
            decoder = [de_relu, deconv_common, de_bn]
            model = encoder + [inner_block] + decoder
        if use_dropout:
            model += [Dropout(0.5)]
        self.model = nn.HybridSequential()
        with self.model.name_scope():
            for block in model:
                self.model.add(block)
コード例 #14
0
    def __init__(self, count: int, depth: int, layer: Layer) -> None:
        super(Skip, self).__init__()

        with self.name_scope():
            self._block = HybridSequential()

            self._block.add(Conv2D(layer.depth, 4, 2, 1, use_bias=False, in_channels=depth))
            self._block.add(BatchNorm(momentum=0.1, in_channels=layer.depth))
            self._block.add(LeakyReLU(0.2))
            self._block.add(layer)
            self._block.add(Conv2DTranspose(count, 4, 2, 1, use_bias=False, in_channels=layer.count))
            self._block.add(BatchNorm(momentum=0.1, in_channels=count))

        self._count = count
        self._depth = depth
        self._layer = layer
コード例 #15
0
    def __init__(self, innerblock=None):
        super(outerpart, self).__init__()
        with self.name_scope():
            en_conv1 = Conv2D(channels=32,
                              kernel_size=4,
                              strides=2,
                              padding=1,
                              in_channels=3)
            en_relu1 = LeakyReLU(alpha=0.2)
            en_norm1 = BatchNorm(momentum=0.1,
                                 in_channels=32,
                                 prefix='en_norm1')

            de_relu1 = Activation(activation='relu')
            de_norm1 = BatchNorm(momentum=0.1,
                                 in_channels=3,
                                 prefix='de_norm1')
            de_conv1 = Conv2DTranspose(channels=3,
                                       kernel_size=4,
                                       strides=2,
                                       padding=1,
                                       in_channels=32)
            channel_trans = Conv2D(channels=1,
                                   in_channels=3,
                                   kernel_size=1,
                                   prefix='')
            encoder1 = [en_conv1, en_norm1, en_relu1]
            decoder1 = [de_conv1, de_norm1, de_relu1, channel_trans]

            self.encoder1 = HybridSequential()
            with self.encoder1.name_scope():
                for block in encoder1:
                    self.encoder1.add(block)
            self.innerblock = innerblock
            self.decoder1 = HybridSequential()
            with self.decoder1.name_scope():
                for block in decoder1:
                    self.decoder1.add(block)
コード例 #16
0
    def __init__(
        self,
        dir_list,
        width=28,
        height=28,
        channel=1,
        initializer=None,
        batch_size=40,
        learning_rate=1e-03,
        ctx=mx.gpu(),
        discriminative_model=None,
        generative_model=None,
    ):
        '''
        Init.

        If you are not satisfied with this simple default setting,
        delegate `discriminative_model` and `generative_model` designed by yourself.

        Args:
            dir_list:       `list` of `str` of path to image files.
            width:          `int` of image width.
            height:         `int` of image height.
            channel:        `int` of image channel.
            initializer:    is-a `mxnet.initializer` for parameters of model.
                            If `None`, it is drawing from the Xavier distribution.
            
            batch_size:     `int` of batch size.
            learning_rate:  `float` of learning rate.
            ctx:            `mx.gpu()` or `mx.cpu()`.

            discriminative_model:       is-a `accelbrainbase.observabledata._mxnet.adversarialmodel.discriminative_model.DiscriminativeModel`.
            generative_model:           is-a `accelbrainbase.observabledata._mxnet.adversarialmodel.generative_model.GenerativeModel`.

        '''
        image_extractor = ImageExtractor(
            width=width,
            height=height,
            channel=channel,
            ctx=ctx
        )

        unlabeled_image_iterator = UnlabeledImageIterator(
            image_extractor=image_extractor,
            dir_list=dir_list,
            batch_size=batch_size,
            norm_mode="z_score",
            scale=1.0,
            noiseable_data=GaussNoise(sigma=1e-03, mu=0.0),
        )

        true_sampler = TrueSampler()
        true_sampler.iteratorable_data = unlabeled_image_iterator

        condition_sampler = ConditionSampler()
        condition_sampler.true_sampler = true_sampler

        computable_loss = L2NormLoss()

        if discriminative_model is None:
            output_nn = NeuralNetworks(
                computable_loss=computable_loss,
                initializer=initializer,
                learning_rate=learning_rate,
                learning_attenuate_rate=1.0,
                attenuate_epoch=50,
                units_list=[100, 1],
                dropout_rate_list=[0.5, 0.0],
                optimizer_name="SGD",
                activation_list=["relu", "sigmoid"],
                hidden_batch_norm_list=[BatchNorm(), None],
                ctx=ctx,
                hybridize_flag=True,
                regularizatable_data_list=[],
                scale=1.0,
                output_no_bias_flag=True,
                all_no_bias_flag=True,
                not_init_flag=False,
            )

            d_model = ConvolutionalNeuralNetworks(
                computable_loss=computable_loss,
                initializer=initializer,
                learning_rate=learning_rate,
                learning_attenuate_rate=1.0,
                attenuate_epoch=50,
                hidden_units_list=[
                    Conv2D(
                        channels=16,
                        kernel_size=6,
                        strides=(2, 2),
                        padding=(1, 1),
                    ), 
                    Conv2D(
                        channels=32,
                        kernel_size=3,
                        strides=(2, 2),
                        padding=(1, 1),
                    ),
                ],
                input_nn=None,
                input_result_height=None,
                input_result_width=None,
                input_result_channel=None,
                output_nn=output_nn,
                hidden_dropout_rate_list=[0.5, 0.5],
                hidden_batch_norm_list=[BatchNorm(), BatchNorm()],
                optimizer_name="SGD",
                hidden_activation_list=["relu", "relu"],
                hidden_residual_flag=False,
                hidden_dense_flag=False,
                dense_axis=1,
                ctx=ctx,
                hybridize_flag=True,
                regularizatable_data_list=[],
                scale=1.0,
            )

            discriminative_model = DiscriminativeModel(
                model=d_model, 
                initializer=None,
                learning_rate=learning_rate,
                optimizer_name="SGD",
                hybridize_flag=True,
                scale=1.0, 
                ctx=ctx, 
            )
        else:
            if isinstance(discriminative_model, DiscriminativeModel) is False:
                raise TypeError("The type of `discriminative_model` must be `DiscriminativeModel`.")

        if generative_model is None:
            g_model = ConvolutionalNeuralNetworks(
                computable_loss=computable_loss,
                initializer=initializer,
                learning_rate=learning_rate,
                learning_attenuate_rate=1.0,
                attenuate_epoch=50,
                hidden_units_list=[
                    Conv2DTranspose(
                        channels=16,
                        kernel_size=6,
                        strides=(1, 1),
                        padding=(1, 1),
                    ), 
                    Conv2DTranspose(
                        channels=1,
                        kernel_size=3,
                        strides=(1, 1),
                        padding=(1, 1),
                    ),
                ],
                input_nn=None,
                input_result_height=None,
                input_result_width=None,
                input_result_channel=None,
                output_nn=None,
                hidden_dropout_rate_list=[0.5, 0.0],
                hidden_batch_norm_list=[BatchNorm(), None],
                optimizer_name="SGD",
                hidden_activation_list=["relu", "identity"],
                hidden_residual_flag=False,
                hidden_dense_flag=False,
                dense_axis=1,
                ctx=ctx,
                hybridize_flag=True,
                regularizatable_data_list=[],
                scale=1.0,
            )

            generative_model = GenerativeModel(
                noise_sampler=UniformNoiseSampler(
                    low=-1e-05,
                    high=1e-05,
                    batch_size=batch_size,
                    seq_len=0,
                    channel=channel,
                    height=height,
                    width=width,
                    ctx=ctx
                ), 
                model=g_model, 
                initializer=None,
                condition_sampler=condition_sampler,
                conditonal_dim=1,
                learning_rate=learning_rate,
                optimizer_name="SGD",
                hybridize_flag=True,
                scale=1.0, 
                ctx=ctx, 
            )
        else:
            if isinstance(generative_model, GenerativeModel) is False:
                raise TypeError("The type of `generative_model` must be `GenerativeModel`.")

        GAN = GANController(
            true_sampler=true_sampler,
            generative_model=generative_model,
            discriminative_model=discriminative_model,
            generator_loss=GeneratorLoss(weight=1.0),
            discriminator_loss=DiscriminatorLoss(weight=1.0),
            feature_matching_loss=L2NormLoss(weight=1.0),
            optimizer_name="SGD",
            learning_rate=learning_rate,
            learning_attenuate_rate=1.0,
            attenuate_epoch=50,
            hybridize_flag=True,
            scale=1.0,
            ctx=ctx,
            initializer=initializer,
        )

        self.GAN = GAN
コード例 #17
0
    def __init__(
            self,
            midi_path_list,
            batch_size=20,
            seq_len=8,
            time_fraction=1.0,
            learning_rate=1e-10,
            learning_attenuate_rate=0.1,
            attenuate_epoch=50,
            generative_model=None,
            discriminative_model=None,
            ctx=mx.gpu(),
            initializer=None,
    ):
        '''
        Init.

        Args:
            midi_path_list:                 `list` of paths to MIDI files.
            batch_size:                     Batch size.
            seq_len:                        The length of sequence that LSTM networks will observe.
            time_fraction:                  Time fraction or time resolution (seconds).

            learning_rate:                  Learning rate in `Generator` and `Discriminator`.
            learning_attenuate_rate:        Attenuate the `learning_rate` by a factor of this value every `attenuate_epoch`.
            attenuate_epoch:                Attenuate the `learning_rate` by a factor of `learning_attenuate_rate` every `attenuate_epoch`.

            true_sampler:                   is-a `TrueSampler`.
            noise_sampler:                  is-a `NoiseSampler`.
            generative_model:               is-a `GenerativeModel`.
            discriminative_model:           is-a `DiscriminativeModel`.
            ctx:                            `mx.cpu()` or `mx.gpu()`.
            initializer:                    is-a `mxnet.initializer` for parameters of model. If `None`, it is drawing from the Xavier distribution.
        '''
        computable_loss = mx.gluon.loss.SoftmaxCrossEntropyLoss(
            sparse_label=False)

        self.__midi_controller = MidiController()
        self.__midi_df_list = [
            self.__midi_controller.extract(midi_path)
            for midi_path in midi_path_list
        ]

        bar_gram = BarGram(midi_df_list=self.__midi_df_list,
                           time_fraction=time_fraction)
        self.__bar_gram = bar_gram
        dim = self.__bar_gram.dim

        c_true_sampler = ConditionalBarGramTrueSampler(
            bar_gram=bar_gram,
            midi_df_list=self.__midi_df_list,
            batch_size=batch_size,
            seq_len=seq_len,
            time_fraction=time_fraction)

        true_sampler = BarGramTrueSampler(bar_gram=bar_gram,
                                          midi_df_list=self.__midi_df_list,
                                          batch_size=batch_size,
                                          seq_len=seq_len,
                                          time_fraction=time_fraction)

        if generative_model is None:
            condition_sampler = ConditionSampler()
            condition_sampler.true_sampler = true_sampler

            c_model = ConvolutionalNeuralNetworks(
                computable_loss=computable_loss,
                initializer=initializer,
                learning_rate=learning_rate,
                learning_attenuate_rate=1.0,
                attenuate_epoch=50,
                hidden_units_list=[
                    Conv2D(
                        channels=16,
                        kernel_size=6,
                        strides=(1, 1),
                        padding=(1, 1),
                    ),
                    Conv2D(
                        channels=len(true_sampler.program_list),
                        kernel_size=6,
                        strides=(1, 1),
                        padding=(1, 1),
                    ),
                ],
                input_nn=None,
                input_result_height=None,
                input_result_width=None,
                input_result_channel=None,
                output_nn=None,
                hidden_dropout_rate_list=[0.5, 0.0],
                hidden_batch_norm_list=[BatchNorm(), None],
                optimizer_name="SGD",
                hidden_activation_list=["relu", "identity"],
                hidden_residual_flag=False,
                hidden_dense_flag=False,
                dense_axis=1,
                ctx=ctx,
                hybridize_flag=True,
                regularizatable_data_list=[],
                scale=1.0,
            )
            condition_sampler.model = c_model
            g_model = ConvolutionalNeuralNetworks(
                computable_loss=computable_loss,
                initializer=initializer,
                learning_rate=learning_rate,
                learning_attenuate_rate=1.0,
                attenuate_epoch=50,
                hidden_units_list=[
                    Conv2DTranspose(
                        channels=16,
                        kernel_size=6,
                        strides=(1, 1),
                        padding=(1, 1),
                    ),
                    Conv2DTranspose(
                        channels=len(true_sampler.program_list),
                        kernel_size=6,
                        strides=(1, 1),
                        padding=(1, 1),
                    ),
                ],
                input_nn=None,
                input_result_height=None,
                input_result_width=None,
                input_result_channel=None,
                output_nn=None,
                hidden_dropout_rate_list=[0.5, 0.0],
                hidden_batch_norm_list=[BatchNorm(), None],
                optimizer_name="SGD",
                hidden_activation_list=["relu", "identity"],
                hidden_residual_flag=False,
                hidden_dense_flag=False,
                dense_axis=1,
                ctx=ctx,
                hybridize_flag=True,
                regularizatable_data_list=[],
                scale=1.0,
            )

            generative_model = GenerativeModel(
                noise_sampler=None,
                model=g_model,
                initializer=None,
                condition_sampler=condition_sampler,
                conditonal_dim=1,
                learning_rate=learning_rate,
                optimizer_name="SGD",
                hybridize_flag=True,
                scale=1.0,
                ctx=ctx,
            )
        else:
            if isinstance(generative_model, GenerativeModel) is False:
                raise TypeError(
                    "The type of `generative_model` must be `GenerativeModel`."
                )

        if discriminative_model is None:
            output_nn = NeuralNetworks(
                computable_loss=computable_loss,
                initializer=initializer,
                learning_rate=learning_rate,
                learning_attenuate_rate=1.0,
                attenuate_epoch=50,
                units_list=[100, 1],
                dropout_rate_list=[0.5, 0.0],
                optimizer_name="SGD",
                activation_list=["relu", "sigmoid"],
                hidden_batch_norm_list=[BatchNorm(), None],
                ctx=ctx,
                hybridize_flag=True,
                regularizatable_data_list=[],
                scale=1.0,
                output_no_bias_flag=True,
                all_no_bias_flag=True,
                not_init_flag=False,
            )

            d_model = ConvolutionalNeuralNetworks(
                computable_loss=computable_loss,
                initializer=initializer,
                learning_rate=learning_rate,
                learning_attenuate_rate=1.0,
                attenuate_epoch=50,
                hidden_units_list=[
                    Conv2D(
                        channels=16,
                        kernel_size=6,
                        strides=(2, 2),
                        padding=(1, 1),
                    ),
                    Conv2D(
                        channels=32,
                        kernel_size=3,
                        strides=(2, 2),
                        padding=(1, 1),
                    ),
                ],
                input_nn=None,
                input_result_height=None,
                input_result_width=None,
                input_result_channel=None,
                output_nn=output_nn,
                hidden_dropout_rate_list=[0.5, 0.5],
                hidden_batch_norm_list=[BatchNorm(), BatchNorm()],
                optimizer_name="SGD",
                hidden_activation_list=["relu", "relu"],
                hidden_residual_flag=False,
                hidden_dense_flag=False,
                dense_axis=1,
                ctx=ctx,
                hybridize_flag=True,
                regularizatable_data_list=[],
                scale=1.0,
            )

            discriminative_model = DiscriminativeModel(
                model=d_model,
                initializer=None,
                learning_rate=learning_rate,
                optimizer_name="SGD",
                hybridize_flag=True,
                scale=1.0,
                ctx=ctx,
            )
        else:
            if isinstance(discriminative_model, DiscriminativeModel) is False:
                raise TypeError(
                    "The type of `discriminative_model` must be `DiscriminativeModel`."
                )

        GAN = GANController(
            true_sampler=c_true_sampler,
            generative_model=generative_model,
            discriminative_model=discriminative_model,
            generator_loss=GeneratorLoss(weight=1.0),
            discriminator_loss=DiscriminatorLoss(weight=1.0),
            feature_matching_loss=L2NormLoss(weight=1.0),
            optimizer_name="SGD",
            learning_rate=learning_rate,
            learning_attenuate_rate=1.0,
            attenuate_epoch=50,
            hybridize_flag=True,
            scale=1.0,
            ctx=ctx,
            initializer=initializer,
        )

        self.__true_sampler = true_sampler
        self.__generative_model = generative_model
        self.__discriminative_model = discriminative_model
        self.__GAN = GAN
        self.__time_fraction = time_fraction
コード例 #18
0
    def __init__(self,
                 inner_channels,
                 outer_channels,
                 inner_block=None,
                 innermost=False,
                 outermost=False,
                 use_dropout=False,
                 use_bias=False,
                 use_attention=True,
                 use_resblock=True,
                 use_p_at=False,
                 use_c_at=False,
                 save_att=False):
        super(UnetSkipUnit, self).__init__()

        with self.name_scope():
            self.save_att = save_att
            self.outermost = outermost
            self.innermost = innermost
            self.use_attention = use_attention
            if not self.outermost:
                res_block_1 = Res_Block(outer_channels=outer_channels)
                res_block_2 = Res_Block(outer_channels=inner_channels)
            en_conv = Conv2D(channels=inner_channels,
                             kernel_size=4,
                             strides=2,
                             padding=1,
                             in_channels=outer_channels,
                             use_bias=use_bias)
            en_relu = LeakyReLU(alpha=0.2)
            en_norm = BatchNorm(momentum=0.1, in_channels=inner_channels)

            de_relu = Activation(activation='relu')
            de_norm = BatchNorm(momentum=0.1, in_channels=outer_channels)

            if innermost:
                de_conv = Conv2DTranspose(channels=outer_channels,
                                          kernel_size=4,
                                          strides=2,
                                          padding=1,
                                          in_channels=inner_channels,
                                          use_bias=use_bias)
                if use_p_at:

                    self.p_at = CA_M2(in_channel=inner_channels)
                else:
                    self.p_at = CA_M3()
                if use_c_at:
                    self.c_at = CA_M1()
                else:
                    self.c_at = CA_M3()
                res_block_3 = Res_Block(outer_channels=inner_channels)
                res_block_4 = Res_Block(outer_channels=outer_channels)
                if use_resblock:
                    res1 = res_block_1
                    encoder = [en_conv, en_norm, en_relu]
                    res2 = res_block_2
                    res3 = res_block_3
                    decoder = [de_conv, de_norm, de_relu]
                    res4 = res_block_4
                else:
                    encoder = [en_relu, en_conv]
                    decoder = [de_relu, de_conv, de_norm]

            elif outermost:
                de_conv = Conv2DTranspose(channels=outer_channels,
                                          kernel_size=4,
                                          strides=2,
                                          padding=1,
                                          in_channels=inner_channels)
                channel_trans = Conv2D(channels=1,
                                       in_channels=outer_channels,
                                       kernel_size=1,
                                       prefix='')

                if use_resblock:
                    res1 = None
                    encoder = [en_conv, en_norm, en_relu]
                    res2 = None
                    res3 = None
                    decoder = [de_conv, de_norm, de_relu, channel_trans]
                    res4 = None
                else:

                    encoder = [en_conv]
                    decoder = [de_relu, de_conv, de_norm, channel_trans]

                if use_p_at:
                    self.p_at = CA_M2(in_channel=inner_channels)
                else:
                    self.p_at = CA_M3()
                if use_c_at:
                    self.c_at = CA_M1()
                else:
                    self.c_at = CA_M3()

            else:
                de_conv = Conv2DTranspose(channels=outer_channels,
                                          kernel_size=4,
                                          strides=2,
                                          padding=1,
                                          in_channels=inner_channels,
                                          use_bias=use_bias)

                if use_p_at:
                    self.p_at = CA_M2(in_channel=inner_channels)
                else:
                    self.p_at = CA_M3()
                if use_c_at:
                    self.c_at = CA_M1()
                else:
                    self.c_at = CA_M3()

                res_block_3 = Res_Block(outer_channels=inner_channels)
                res_block_4 = Res_Block(outer_channels=outer_channels)

                if use_resblock:
                    res1 = res_block_1
                    encoder = [en_conv, en_norm, en_relu]
                    res2 = res_block_2
                    res3 = res_block_3
                    decoder = [de_conv, de_norm, de_relu]
                    res4 = res_block_4
                else:
                    encoder = [en_relu, en_conv, en_norm]
                    decoder = [de_relu, de_conv, de_norm]

            if use_dropout:
                decoder += [Dropout(rate=0.5)]

            self.encoder = HybridSequential()
            with self.encoder.name_scope():
                for block in encoder:
                    self.encoder.add(block)

            self.inner_block = inner_block

            self.res1 = res1
            self.res2 = res2
            self.res3 = res3
            self.res4 = res4

            self.decoder = HybridSequential()

            with self.decoder.name_scope():
                for block in decoder:
                    self.decoder.add(block)
コード例 #19
0
    def __init__(
        self,
        Darknetlayer=53,
        input_size=(416, 416),
        anchors={
            "shallow": [(10, 13), (16, 30), (33, 23)],
            "middle": [(30, 61), (62, 45), (59, 119)],
            "deep": [(116, 90), (156, 198), (373, 326)]
        },
        num_classes=1,  # foreground만
        pretrained=True,
        pretrained_path="modelparam",
        alloc_size=(64, 64),
        ctx=mx.cpu()):
        super(Yolov3, self).__init__()

        if Darknetlayer not in [53]:
            raise ValueError

        in_height, in_width = input_size
        features = []
        strides = []
        anchors = OrderedDict(anchors)
        anchors = list(anchors.values())[::-1]
        self._numoffst = len(anchors)

        darknet_output = get_darknet(Darknetlayer, ctx=mx.cpu(), dummy=True)(
            mx.nd.random_uniform(low=0,
                                 high=1,
                                 shape=(1, 3, in_height, in_width),
                                 ctx=mx.cpu()))
        for out in darknet_output:  # feature_14, feature_24, feature_28
            out_height, out_width = out.shape[2:]
            features.append([out_width, out_height])
            strides.append([in_width // out_width,
                            in_height // out_height])  # w, h

        features = features[::-1]
        strides = strides[::-1]  # deep -> middle -> shallow 순으로 !!!
        self._darkenet = get_darknet(Darknetlayer,
                                     pretrained=pretrained,
                                     ctx=ctx,
                                     root=pretrained_path)
        self._num_classes = num_classes
        self._num_pred = 5 + num_classes  # 고정

        with self.name_scope():

            head_init_num_channel = 512
            trans_init_num_channel = 256
            self._head = HybridSequential()
            self._transition = HybridSequential()
            self._upsampleconv = HybridSequential()
            self._anchor_generators = HybridSequential()

            # output
            for j in range(len(anchors)):
                if j == 0:
                    factor = 1
                else:
                    factor = 2
                head_init_num_channel = head_init_num_channel // factor
                for _ in range(3):
                    self._head.add(
                        Conv2D(channels=head_init_num_channel,
                               kernel_size=(1, 1),
                               strides=(1, 1),
                               padding=(0, 0),
                               use_bias=True,
                               in_channels=0,
                               weight_initializer=mx.init.Normal(0.01),
                               bias_initializer='zeros'))
                    self._head.add(BatchNorm(epsilon=1e-5, momentum=0.9))
                    self._head.add(LeakyReLU(0.1))

                    self._head.add(
                        Conv2D(channels=head_init_num_channel * 2,
                               kernel_size=(3, 3),
                               strides=(1, 1),
                               padding=(1, 1),
                               use_bias=True,
                               in_channels=0,
                               weight_initializer=mx.init.Normal(0.01),
                               bias_initializer='zeros'))
                    self._head.add(BatchNorm(epsilon=1e-5, momentum=0.9))
                    self._head.add(LeakyReLU(0.1))

                self._head.add(
                    Conv2D(channels=len(anchors[j]) * self._num_pred,
                           kernel_size=(1, 1),
                           strides=(1, 1),
                           padding=(0, 0),
                           use_bias=True,
                           in_channels=0,
                           weight_initializer=mx.init.Normal(0.01),
                           bias_initializer='zeros'))

            # for upsample - transition
            for i in range(len(anchors) - 1):
                if i == 0:
                    factor = 1
                else:
                    factor = 2
                trans_init_num_channel = trans_init_num_channel // factor
                self._transition.add(
                    Conv2D(channels=trans_init_num_channel,
                           kernel_size=(1, 1),
                           strides=(1, 1),
                           padding=(0, 0),
                           use_bias=True,
                           in_channels=0,
                           weight_initializer=mx.init.Normal(0.01),
                           bias_initializer='zeros'))
                self._transition.add(BatchNorm(epsilon=1e-5, momentum=0.9))
                self._transition.add(LeakyReLU(0.1))

            # for deconvolution upsampleing
            for i in range(len(anchors) - 1):
                if i == 0:
                    factor = 1
                else:
                    factor = 2
                trans_init_num_channel = trans_init_num_channel // factor
                self._upsampleconv.add(
                    Conv2DTranspose(trans_init_num_channel,
                                    kernel_size=3,
                                    strides=2,
                                    padding=1,
                                    output_padding=1,
                                    use_bias=True,
                                    in_channels=0))
                self._upsampleconv.add(BatchNorm(epsilon=1e-5, momentum=0.9))
                self._upsampleconv.add(LeakyReLU(0.1))

        for i, anchor, feature, stride in zip(range(len(anchors)), anchors,
                                              features, strides):
            self._anchor_generators.add(
                YoloAnchorGenerator(i, anchor, feature, stride,
                                    (alloc_size[0] * (2**i), alloc_size[1] *
                                     (2**i))))

        self._head.initialize(ctx=ctx)
        self._transition.initialize(ctx=ctx)
        self._upsampleconv.initialize(ctx=ctx)
        self._anchor_generators.initialize(ctx=ctx)
        logging.info(f"{self.__class__.__name__} Head weight init 완료")
コード例 #20
0
    def __init__(
        self,
        dir_list,
        test_dir_list,
        width=28,
        height=28,
        channel=1,
        initializer=None,
        batch_size=40,
        learning_rate=0.0002,
        ctx=mx.gpu(),
        discriminative_model=None,
        generative_model=None,
        re_encoder_model=None,
    ):
        '''
        Init.

        If you are not satisfied with this simple default setting,
        delegate `discriminative_model` and `generative_model` designed by yourself.

        Args:
            dir_list:       `list` of `str` of path to image files.
            test_dir_list:  `list` of `str` of path to image files for test.
            width:          `int` of image width.
            height:         `int` of image height.
            channel:        `int` of image channel.
            initializer:    is-a `mxnet.initializer` for parameters of model.
                            If `None`, it is drawing from the Xavier distribution.
            
            batch_size:     `int` of batch size.
            learning_rate:  `float` of learning rate.
            ctx:            `mx.gpu()` or `mx.cpu()`.

            discriminative_model:       is-a `accelbrainbase.observabledata._mxnet.adversarialmodel.discriminative_model.DiscriminativeModel`.
            generative_model:           is-a `accelbrainbase.observabledata._mxnet.adversarialmodel.generative_model.GenerativeModel`.
            re_encoder_model:           is-a `HybridBlock`.

        '''
        image_extractor = ImageExtractor(width=width,
                                         height=height,
                                         channel=channel,
                                         ctx=ctx)

        unlabeled_image_iterator = UnlabeledImageIterator(
            image_extractor=image_extractor,
            dir_list=dir_list,
            batch_size=batch_size,
            norm_mode="z_score",
            scale=1 / 1000,
            noiseable_data=GaussNoise(sigma=1e-08, mu=0.0),
        )

        test_unlabeled_image_iterator = UnlabeledImageIterator(
            image_extractor=image_extractor,
            dir_list=test_dir_list,
            batch_size=batch_size,
            norm_mode="z_score",
            scale=1 / 1000,
            noiseable_data=GaussNoise(sigma=1e-08, mu=0.0),
        )

        true_sampler = TrueSampler()
        true_sampler.iteratorable_data = unlabeled_image_iterator

        condition_sampler = ConditionSampler()
        condition_sampler.true_sampler = true_sampler

        computable_loss = L2NormLoss()

        if discriminative_model is None:
            output_nn = NeuralNetworks(
                computable_loss=computable_loss,
                initializer=initializer,
                learning_rate=learning_rate,
                learning_attenuate_rate=1.0,
                attenuate_epoch=50,
                units_list=[1],
                dropout_rate_list=[0.0],
                optimizer_name="SGD",
                activation_list=["sigmoid"],
                hidden_batch_norm_list=[None],
                ctx=ctx,
                hybridize_flag=True,
                regularizatable_data_list=[],
                scale=1.0,
                output_no_bias_flag=True,
                all_no_bias_flag=True,
                not_init_flag=False,
            )

            d_model = ConvolutionalNeuralNetworks(
                computable_loss=computable_loss,
                initializer=initializer,
                learning_rate=learning_rate,
                learning_attenuate_rate=1.0,
                attenuate_epoch=50,
                hidden_units_list=[
                    Conv2D(
                        channels=16,
                        kernel_size=6,
                        strides=(2, 2),
                        padding=(1, 1),
                    ),
                    Conv2D(
                        channels=32,
                        kernel_size=3,
                        strides=(2, 2),
                        padding=(1, 1),
                    ),
                ],
                input_nn=None,
                input_result_height=None,
                input_result_width=None,
                input_result_channel=None,
                output_nn=output_nn,
                hidden_dropout_rate_list=[
                    0.5,
                    0.5,
                ],
                hidden_batch_norm_list=[BatchNorm(), BatchNorm()],
                optimizer_name="SGD",
                hidden_activation_list=[
                    "relu",
                    "relu",
                ],
                hidden_residual_flag=False,
                hidden_dense_flag=False,
                dense_axis=1,
                ctx=ctx,
                hybridize_flag=True,
                regularizatable_data_list=[],
                scale=1.0,
            )

            discriminative_model = DiscriminativeModel(
                model=d_model,
                initializer=None,
                learning_rate=learning_rate,
                optimizer_name="SGD",
                hybridize_flag=True,
                scale=1.0,
                ctx=ctx,
            )
        else:
            if isinstance(discriminative_model, DiscriminativeModel) is False:
                raise TypeError(
                    "The type of `discriminative_model` must be `DiscriminativeModel`."
                )

        if re_encoder_model is None:
            re_encoder_model = ConvolutionalNeuralNetworks(
                # is-a `ComputableLoss` or `mxnet.gluon.loss`.
                computable_loss=computable_loss,
                # `list` of int` of the number of units in hidden layers.
                hidden_units_list=[
                    # `mxnet.gluon.nn.Conv2D`.
                    Conv2D(
                        channels=16,
                        kernel_size=6,
                        strides=(2, 2),
                        padding=(1, 1),
                    ),
                    Conv2D(
                        channels=32,
                        kernel_size=6,
                        strides=(2, 2),
                        padding=(1, 1),
                    ),
                ],
                # `list` of act_type` in `mxnet.ndarray.Activation` or `mxnet.symbol.Activation` in input gate.
                hidden_activation_list=[
                    "relu",
                    "relu",
                ],
                # `list` of `float` of dropout rate.
                hidden_dropout_rate_list=[
                    0.5,
                    0.5,
                ],
                # `list` of `mxnet.gluon.nn.BatchNorm`.
                hidden_batch_norm_list=[BatchNorm(), BatchNorm()],
                # Call `mxnet.gluon.HybridBlock.hybridize()` or not.
                hybridize_flag=True,
                # `mx.gpu()` or `mx.cpu()`.
                ctx=ctx,
            )

        if generative_model is None:
            encoder = ConvolutionalNeuralNetworks(
                # is-a `ComputableLoss` or `mxnet.gluon.loss`.
                computable_loss=computable_loss,
                # `list` of int` of the number of units in hidden layers.
                hidden_units_list=[
                    # `mxnet.gluon.nn.Conv2D`.
                    Conv2D(
                        channels=16,
                        kernel_size=6,
                        strides=(2, 2),
                        padding=(1, 1),
                    ),
                    Conv2D(
                        channels=32,
                        kernel_size=6,
                        strides=(2, 2),
                        padding=(1, 1),
                    ),
                ],
                # `list` of act_type` in `mxnet.ndarray.Activation` or `mxnet.symbol.Activation` in input gate.
                hidden_activation_list=[
                    "relu",
                    "relu",
                ],
                # `list` of `float` of dropout rate.
                hidden_dropout_rate_list=[
                    0.5,
                    0.5,
                ],
                # `list` of `mxnet.gluon.nn.BatchNorm`.
                hidden_batch_norm_list=[BatchNorm(), BatchNorm()],
                # Call `mxnet.gluon.HybridBlock.hybridize()` or not.
                hybridize_flag=True,
                # `mx.gpu()` or `mx.cpu()`.
                ctx=ctx,
            )
            decoder = ConvolutionalNeuralNetworks(
                # is-a `ComputableLoss` or `mxnet.gluon.loss`.
                computable_loss=computable_loss,
                # `list` of int` of the number of units in hidden layers.
                hidden_units_list=[
                    Conv2DTranspose(
                        channels=16,
                        kernel_size=6,
                        strides=(2, 2),
                        padding=(1, 1),
                    ),
                    Conv2DTranspose(
                        channels=channel,
                        kernel_size=6,
                        strides=(2, 2),
                        padding=(0, 0),
                    ),
                ],
                # `list` of act_type` in `mxnet.ndarray.Activation` or `mxnet.symbol.Activation` in input gate.
                hidden_activation_list=["relu", "tanh"],
                # `list` of `float` of dropout rate.
                hidden_dropout_rate_list=[0.5, 0.0],
                # `list` of `mxnet.gluon.nn.BatchNorm`.
                hidden_batch_norm_list=[BatchNorm(), None],
                # Call `mxnet.gluon.HybridBlock.hybridize()` or not.
                hybridize_flag=True,
                # `mx.gpu()` or `mx.cpu()`.
                ctx=ctx,
            )

            g_model = ConvolutionalAutoEncoder(
                # is-a `ConvolutionalNeuralNetworks`.
                encoder=encoder,
                # is-a `ConvolutionalNeuralNetworks`.
                decoder=decoder,
                computable_loss=computable_loss,
                initializer=initializer,
                learning_rate=learning_rate,
                learning_attenuate_rate=1.0,
                attenuate_epoch=50,
                input_nn=None,
                input_result_height=None,
                input_result_width=None,
                input_result_channel=None,
                output_nn=None,
                optimizer_name="SGD",
                hidden_residual_flag=False,
                hidden_dense_flag=False,
                dense_axis=1,
                ctx=ctx,
                hybridize_flag=True,
                regularizatable_data_list=[],
                scale=1.0,
            )

            generative_model = GenerativeModel(
                noise_sampler=UniformNoiseSampler(low=-1e-05,
                                                  high=1e-05,
                                                  batch_size=batch_size,
                                                  seq_len=0,
                                                  channel=channel,
                                                  height=height,
                                                  width=width,
                                                  ctx=ctx),
                model=g_model,
                initializer=None,
                condition_sampler=condition_sampler,
                conditonal_dim=1,
                learning_rate=learning_rate,
                optimizer_name="SGD",
                hybridize_flag=True,
                scale=1.0,
                ctx=ctx,
            )
        else:
            if isinstance(generative_model, GenerativeModel) is False:
                raise TypeError(
                    "The type of `generative_model` must be `GenerativeModel`."
                )

        ganomaly_controller = GanomalyController(
            generative_model=generative_model,
            re_encoder_model=re_encoder_model,
            discriminative_model=discriminative_model,
            advarsarial_loss=L2NormLoss(weight=0.015),
            encoding_loss=L2NormLoss(weight=0.015),
            contextual_loss=L1Loss(weight=0.5),
            discriminator_loss=DiscriminatorLoss(weight=0.015),
            feature_matching_loss=None,
            optimizer_name="SGD",
            learning_rate=learning_rate,
            learning_attenuate_rate=1.0,
            attenuate_epoch=50,
            hybridize_flag=True,
            scale=1.0,
            ctx=ctx,
            initializer=initializer,
        )

        self.ganomaly_controller = ganomaly_controller
        self.test_unlabeled_image_iterator = test_unlabeled_image_iterator
コード例 #21
0
    def __init__(self,
                 inner_channels,
                 outer_channels,
                 inner_block=None,
                 innermost=False,
                 outermost=False,
                 use_dropout=False,
                 use_bias=False,
                 use_attention=True,
                 use_resblock=True):
        super(UnetSkipUnit, self).__init__()

        with self.name_scope():
            self.outermost = outermost
            self.innermost = innermost
            self.use_attention = use_attention
            res_block = Res_Block(outer_channels=outer_channels)
            en_conv = Conv2D(channels=inner_channels,
                             kernel_size=4,
                             strides=2,
                             padding=1,
                             in_channels=outer_channels,
                             use_bias=use_bias)
            en_relu = LeakyReLU(alpha=0.2)
            en_norm = BatchNorm(momentum=0.1, in_channels=inner_channels)

            de_relu = Activation(activation='relu')
            de_norm = BatchNorm(momentum=0.1, in_channels=outer_channels)

            if innermost:
                de_conv = Conv2DTranspose(channels=outer_channels,
                                          kernel_size=4,
                                          strides=2,
                                          padding=1,
                                          in_channels=inner_channels,
                                          use_bias=use_bias)
                res_block1 = Res_Block(outer_channels=inner_channels)
                if use_resblock:

                    encoder = [res_block, en_relu, en_conv]
                    decoder = [de_relu, res_block1, de_conv, de_norm]
                else:
                    encoder = [en_relu, en_conv]
                    decoder = [de_relu, de_conv, de_norm]

                attention = self_attention_block(in_channel=inner_channels)

                model = encoder
            elif outermost:
                de_conv = Conv2DTranspose(channels=outer_channels,
                                          kernel_size=4,
                                          strides=2,
                                          padding=1,
                                          in_channels=inner_channels * 2)
                res_block1 = Res_Block(outer_channels=inner_channels * 2)
                if use_resblock:
                    encoder = [res_block, en_conv]
                    decoder = [
                        de_relu, res_block1, de_conv,
                        Activation(activation='tanh')
                    ]
                else:
                    encoder = [en_conv]
                    decoder = [de_relu, de_conv, Activation(activation='tanh')]

                attention = self_attention_block(in_channel=inner_channels * 2)
                model = encoder + [inner_block]
            else:
                de_conv = Conv2DTranspose(channels=outer_channels,
                                          kernel_size=4,
                                          strides=2,
                                          padding=1,
                                          in_channels=inner_channels * 2,
                                          use_bias=use_bias)
                res_block1 = Res_Block(outer_channels=inner_channels * 2)
                if use_resblock:
                    encoder = [res_block, en_relu, en_conv, en_norm]
                    decoder = [de_relu, res_block1, de_conv, de_norm]
                else:
                    encoder = [en_relu, en_conv, en_norm]
                    decoder = [de_relu, de_conv, de_norm]

                attention = self_attention_block(in_channel=inner_channels * 2)

                model = encoder + [inner_block]
            if use_dropout:
                decoder += [Dropout(rate=0.5)]

            self.encoder = HybridSequential()
            with self.encoder.name_scope():
                for block in model:
                    self.encoder.add(block)
            self.inner_block = inner_block
            self.attention = attention
            self.decoder = HybridSequential()
            with self.decoder.name_scope():
                for block in decoder:
                    self.decoder.add()
コード例 #22
0
ファイル: seg.py プロジェクト: Huasheng-hou/mxnet-demo
    return d_iter


batch_size = 256

train_iter, test_iter = d2l.load_data_mnist(batch_size=1)

train_iter = blendData(train_iter, imgs)
test_iter = blendData(test_iter, imgs)

num_classes = 2

net = HybridSequential()
net.add(Conv2D(channels=3, kernel_size=5, activation='sigmoid'),
        MaxPool2D(pool_size=2, strides=2),
        Conv2D(channels=8, kernel_size=5, activation='sigmoid'),
        MaxPool2D(pool_size=2, strides=2),
        Conv2D(channels=120, kernel_size=4, activation='sigmoid'),
        Conv2D(channels=84, kernel_size=1, activation='sigmoid'),
        Conv2D(channels=10, kernel_size=1),
        Conv2DTranspose(num_classes, kernel_size=56, padding=14, strides=28, activation='sigmoid'))

lr, num_epochs = 0.9, 10
ctx = d2l.try_gpu()

net.initialize(force_reinit=True, ctx=ctx, init=init.Xavier())

trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': lr})
d2l.train_ch5(net, train_iter, test_iter, batch_size, trainer, ctx, num_epochs)
コード例 #23
0
    def __init__(
        self,
        dir_list,
        width=28,
        height=28,
        channel=1,
        normal_height=14,
        normal_width=14,
        normal_channel=32,
        initializer=None,
        batch_size=40,
        learning_rate=1e-03,
        ctx=mx.gpu(),
        discriminative_model=None,
        generative_model=None,
        discriminator_loss_weight=1.0,
        reconstruction_loss_weight=1.0,
        feature_matching_loss_weight=1.0,
    ):
        '''
        Init.

        If you are not satisfied with this simple default setting,
        delegate `discriminative_model` and `generative_model` designed by yourself.

        Args:
            dir_list:       `list` of `str` of path to image files.
            width:          `int` of image width.
            height:         `int` of image height.
            channel:        `int` of image channel.

            normal_width:   `int` of width of image drawn from normal distribution, p(z).
            normal_height:  `int` of height of image drawn from normal distribution, p(z).
            normal_channel: `int` of channel of image drawn from normal distribution, p(z).

            initializer:    is-a `mxnet.initializer` for parameters of model.
                            If `None`, it is drawing from the Xavier distribution.
            
            batch_size:     `int` of batch size.
            learning_rate:  `float` of learning rate.
            ctx:            `mx.gpu()` or `mx.cpu()`.

            discriminative_model:       is-a `accelbrainbase.observabledata._mxnet.adversarialmodel.discriminative_model.discriminativemodel.eb_discriminative_model.EBDiscriminativeModel`.
            generative_model:           is-a `accelbrainbase.observabledata._mxnet.adversarialmodel.generative_model.GenerativeModel`.

            discriminator_loss_weight:      `float` of weight for discriminator loss.
            reconstruction_loss_weight:     `float` of weight for reconstruction loss.
            feature_matching_loss_weight:   `float` of weight for feature matching loss.
        '''
        image_extractor = ImageExtractor(width=width,
                                         height=height,
                                         channel=channel,
                                         ctx=ctx)

        unlabeled_image_iterator = UnlabeledImageIterator(
            image_extractor=image_extractor,
            dir_list=dir_list,
            batch_size=batch_size,
            norm_mode="z_score",
            scale=1.0,
            noiseable_data=GaussNoise(sigma=1e-03, mu=0.0),
        )

        computable_loss = L2NormLoss()

        if initializer is None:
            initializer = mx.initializer.Uniform()
        else:
            if isinstance(initializer, mx.initializer.Initializer) is False:
                raise TypeError(
                    "The type of `initializer` must be `mxnet.initializer.Initializer`."
                )

        if discriminative_model is None:
            d_encoder = ConvolutionalNeuralNetworks(
                # is-a `ComputableLoss` or `mxnet.gluon.loss`.
                computable_loss=computable_loss,
                # `list` of int` of the number of units in hidden layers.
                hidden_units_list=[
                    # `mxnet.gluon.nn.Conv2D`.
                    Conv2D(
                        channels=16,
                        kernel_size=6,
                        strides=(2, 2),
                        padding=(1, 1),
                    ),
                    Conv2D(
                        channels=32,
                        kernel_size=3,
                        strides=(1, 1),
                        padding=(1, 1),
                    ),
                ],
                # `list` of act_type` in `mxnet.ndarray.Activation` or `mxnet.symbol.Activation` in input gate.
                hidden_activation_list=["relu", "relu"],
                # `list` of `float` of dropout rate.
                hidden_dropout_rate_list=[0.5, 0.5],
                # `list` of `mxnet.gluon.nn.BatchNorm`.
                hidden_batch_norm_list=[BatchNorm(), BatchNorm()],
                # Call `mxnet.gluon.HybridBlock.hybridize()` or not.
                hybridize_flag=True,
                # `mx.gpu()` or `mx.cpu()`.
                ctx=ctx,
            )

            d_decoder = ConvolutionalNeuralNetworks(
                # is-a `ComputableLoss` or `mxnet.gluon.loss`.
                computable_loss=computable_loss,
                # `list` of int` of the number of units in hidden layers.
                hidden_units_list=[
                    # `mxnet.gluon.nn.Conv2DTranspose`.
                    Conv2DTranspose(
                        channels=16,
                        kernel_size=3,
                        strides=(1, 1),
                        padding=(1, 1),
                    ),
                    Conv2DTranspose(
                        channels=32,
                        kernel_size=6,
                        strides=(2, 2),
                        padding=(1, 1),
                    ),
                ],
                # `list` of act_type` in `mxnet.ndarray.Activation` or `mxnet.symbol.Activation` in input gate.
                hidden_activation_list=["identity", "identity"],
                # `list` of `float` of dropout rate.
                hidden_dropout_rate_list=[0.0, 0.0],
                # `list` of `mxnet.gluon.nn.BatchNorm`.
                hidden_batch_norm_list=[BatchNorm(), None],
                # Call `mxnet.gluon.HybridBlock.hybridize()` or not.
                hybridize_flag=True,
                # `mx.gpu()` or `mx.cpu()`.
                ctx=ctx,
            )
            d_model = ConvolutionalAutoEncoder(
                # is-a `ConvolutionalNeuralNetworks`.
                encoder=d_encoder,
                # is-a `ConvolutionalNeuralNetworks`.
                decoder=d_decoder,
                # is-a `ComputableLoss` or `mxnet.gluon.loss`.
                computable_loss=computable_loss,
                # `bool` of flag to tied weights or not.
                tied_weights_flag=True,
                # Call `mxnet.gluon.HybridBlock.hybridize()` or not.
                hybridize_flag=True,
                # `mx.gpu()` or `mx.cpu()`.
                ctx=ctx,
            )
            d_model.batch_size = 40

            discriminative_model = EBDiscriminativeModel(
                # is-a `ConvolutionalAutoEncoder`.
                model=d_model,
                # Call `mxnet.gluon.HybridBlock.hybridize()` or not.
                hybridize_flag=True,
                # `mx.gpu()` or `mx.cpu()`.
                ctx=ctx,
            )
        else:
            if isinstance(discriminative_model, DiscriminativeModel) is False:
                raise TypeError(
                    "The type of `discriminative_model` must be `DiscriminativeModel`."
                )

        if generative_model is None:
            encoder = ConvolutionalNeuralNetworks(
                computable_loss=computable_loss,
                initializer=initializer,
                learning_rate=learning_rate,
                learning_attenuate_rate=1.0,
                attenuate_epoch=50,
                hidden_units_list=[
                    Conv2D(
                        channels=16,
                        kernel_size=6,
                        strides=(2, 2),
                        padding=(0, 0),
                    ),
                    Conv2D(
                        channels=32,
                        kernel_size=3,
                        strides=(1, 1),
                        padding=(1, 1),
                    ),
                ],
                input_nn=None,
                input_result_height=None,
                input_result_width=None,
                input_result_channel=None,
                output_nn=None,
                hidden_dropout_rate_list=[0.5, 0.5],
                hidden_batch_norm_list=[BatchNorm(), BatchNorm()],
                optimizer_name="SGD",
                hidden_activation_list=["relu", "relu"],
                hidden_residual_flag=False,
                hidden_dense_flag=False,
                dense_axis=1,
                ctx=ctx,
                hybridize_flag=True,
                regularizatable_data_list=[],
                scale=1.0,
            )

            decoder = ConvolutionalNeuralNetworks(
                computable_loss=computable_loss,
                initializer=initializer,
                learning_rate=learning_rate,
                learning_attenuate_rate=1.0,
                attenuate_epoch=50,
                hidden_units_list=[
                    Conv2DTranspose(
                        channels=16,
                        kernel_size=3,
                        strides=(1, 1),
                        padding=(1, 1),
                    ),
                    Conv2DTranspose(
                        channels=channel,
                        kernel_size=6,
                        strides=(2, 2),
                        padding=(0, 0),
                    ),
                ],
                input_nn=None,
                input_result_height=None,
                input_result_width=None,
                input_result_channel=None,
                output_nn=None,
                hidden_dropout_rate_list=[0.0, 0.0],
                hidden_batch_norm_list=[BatchNorm(), None],
                optimizer_name="SGD",
                hidden_activation_list=["identity", "identity"],
                hidden_residual_flag=False,
                hidden_dense_flag=False,
                dense_axis=1,
                ctx=ctx,
                hybridize_flag=True,
                regularizatable_data_list=[],
                scale=1.0,
            )

            g_model = ConvolutionalAutoEncoder(
                encoder=encoder,
                decoder=decoder,
                computable_loss=computable_loss,
                initializer=initializer,
                learning_rate=learning_rate,
                learning_attenuate_rate=1.0,
                attenuate_epoch=50,
                optimizer_name="SGD",
                ctx=ctx,
                hybridize_flag=True,
                regularizatable_data_list=[],
                scale=1.0,
            )
            d_model.batch_size = 40

            true_sampler = TrueSampler()
            true_sampler.iteratorable_data = unlabeled_image_iterator

            condition_sampler = ConditionSampler()
            condition_sampler.true_sampler = true_sampler

            generative_model = GenerativeModel(
                noise_sampler=UniformNoiseSampler(low=-1e-03,
                                                  high=1e-03,
                                                  batch_size=batch_size,
                                                  seq_len=0,
                                                  channel=channel,
                                                  height=height,
                                                  width=width,
                                                  ctx=ctx),
                model=g_model,
                initializer=initializer,
                condition_sampler=condition_sampler,
                conditonal_dim=1,
                learning_rate=learning_rate,
                optimizer_name="SGD",
                hybridize_flag=True,
                scale=1.0,
                ctx=ctx,
            )
        else:
            if isinstance(generative_model, GenerativeModel) is False:
                raise TypeError(
                    "The type of `generative_model` must be `GenerativeModel`."
                )

        normal_ture_sampler = NormalTrueSampler(batch_size=batch_size,
                                                seq_len=0,
                                                channel=normal_channel,
                                                height=normal_height,
                                                width=normal_width,
                                                ctx=ctx)

        EBAAE = EBAAEController(
            true_sampler=normal_ture_sampler,
            generative_model=generative_model,
            discriminative_model=discriminative_model,
            discriminator_loss=EBDiscriminatorLoss(
                weight=discriminator_loss_weight),
            reconstruction_loss=L2NormLoss(weight=reconstruction_loss_weight),
            feature_matching_loss=L2NormLoss(
                weight=feature_matching_loss_weight),
            optimizer_name="SGD",
            learning_rate=learning_rate,
            learning_attenuate_rate=1.0,
            attenuate_epoch=50,
            hybridize_flag=True,
            scale=1.0,
            ctx=ctx,
            initializer=initializer,
        )
        self.EBAAE = EBAAE
コード例 #24
0
    def __init__(self, inner_channels, outer_channels, inner_block=None, innermost=False, outermost=False,
                 use_dropout=False, use_bias=False,use_position_attention=False,use_channel_attention=False):
        super(UnetSkipUnit, self).__init__()

        with self.name_scope():
            self.outermost = outermost

            res1=Res_Block(outer_channels=outer_channels)
            res2=Res_Block(outer_channels=inner_channels)
            res3=Res_Block(outer_channels=inner_channels)
            res4=Res_Block(outer_channels=outer_channels)
            attention_non=CA_M3()
            attention_position=CA_M2(in_channel=inner_channels)
            attention_channel=CA_M1()
            
            en_conv = Conv2D(channels=inner_channels, kernel_size=4, strides=2, padding=1,
                             in_channels=outer_channels, use_bias=use_bias)
            en_relu = LeakyReLU(alpha=0.2)
            en_norm = BatchNorm(momentum=0.1, in_channels=inner_channels)
            de_relu = Activation(activation='relu')
            de_norm = BatchNorm(momentum=0.1, in_channels=outer_channels)

            if innermost:
                if use_position_attention:
                    p_attention=attention_position
                else:
                    p_attention=attention_non
                if use_channel_attention:
                    c_attention=attention_channel
                else:
                    c_attention=attention_non
                de_conv = Conv2DTranspose(channels=outer_channels, kernel_size=4, strides=2, padding=1,
                                          in_channels=inner_channels, use_bias=use_bias)
                encoder = [res1,en_relu, en_conv,p_attention,res2]
                decoder = [res3,de_relu, de_conv, de_norm,res4]
                model = encoder + decoder
            elif outermost:
                if use_position_attention:
                    p_attention=attention_position
                else:
                    p_attention=attention_non
                if use_channel_attention:
                    c_attention=attention_channel
                else:
                    c_attention=attention_non
                de_conv = Conv2DTranspose(channels=outer_channels, kernel_size=4, strides=2, padding=1,
                                          in_channels=inner_channels)
                encoder = [en_conv,p_attention]
                decoder = [de_relu, de_conv, de_norm]
                model = encoder + [inner_block] + decoder
            else:
                if use_position_attention:
                    p_attention=attention_position
                else:
                    p_attention=attention_non
                if use_channel_attention:
                    c_attention=attention_channel
                else:
                    c_attention=attention_non
                de_conv = Conv2DTranspose(channels=outer_channels, kernel_size=4, strides=2, padding=1,
                                          in_channels=inner_channels, use_bias=use_bias)
                encoder = [res1,en_relu, en_conv, en_norm,p_attention,res2]
                decoder = [res3,de_relu, de_conv, de_norm,res4]
                model = encoder + [inner_block] + decoder
            self.c_attention=c_attention
            self.model = HybridSequential()
            with self.model.name_scope():
                for block in model:
                    self.model.add(block)
コード例 #25
0
ファイル: train_gqn.py プロジェクト: gokererdogan/Papers
def build_upsample_nn():
    nnet = nn.HybridSequential()
    nnet.add(WithELU(Conv2DTranspose(channels=32, kernel_size=(4, 4), strides=(4, 4))))
    return nnet, (32, 64, 64)
コード例 #26
0
ファイル: utils.py プロジェクト: Royzon/Mxnet-Detector
    def __init__(self, Darknetlayer=53,
                 anchors={"shallow": [(10, 13), (16, 30), (33, 23)],
                          "middle": [(30, 61), (62, 45), (59, 119)],
                          "deep": [(116, 90), (156, 198), (373, 326)]},
                 num_classes=1,  # foreground만
                 pretrained=True,
                 pretrained_path="modelparam",
                 ctx=mx.cpu()):
        super(YoloV3output, self).__init__()

        if Darknetlayer not in [53]:
            raise ValueError

        anchors = OrderedDict(anchors)
        anchors = list(anchors.values())[::-1]

        # 각 레이어에서 나오는 anchor갯수가 바뀔수도 있으니!!
        self._num_anchors = []
        for anchor in anchors:
            self._num_anchors.append(len(anchor))  # 변화 가능

        self._darkenet = get_darknet(Darknetlayer, pretrained=pretrained, ctx=ctx, root=pretrained_path)
        self._num_classes = num_classes
        self._num_pred = 5 + num_classes  # 고정

        with self.name_scope():

            head_init_num_channel = 512
            trans_init_num_channel = 256
            self._head = HybridSequential()
            self._transition = HybridSequential()
            self._upsampleconv = HybridSequential()

            # output
            for j in range(len(anchors)):
                if j == 0:
                    factor = 1
                else:
                    factor = 2
                head_init_num_channel = head_init_num_channel // factor
                for _ in range(3):
                    self._head.add(Conv2D(channels=head_init_num_channel,
                                          kernel_size=(1, 1),
                                          strides=(1, 1),
                                          padding=(0, 0),
                                          use_bias=True,
                                          in_channels=0,
                                          weight_initializer=mx.init.Normal(0.01),
                                          bias_initializer='zeros'
                                          ))
                    self._head.add(BatchNorm(epsilon=1e-5, momentum=0.9))
                    self._head.add(LeakyReLU(0.1))

                    self._head.add(Conv2D(channels=head_init_num_channel * 2,
                                          kernel_size=(3, 3),
                                          strides=(1, 1),
                                          padding=(1, 1),
                                          use_bias=True,
                                          in_channels=0,
                                          weight_initializer=mx.init.Normal(0.01),
                                          bias_initializer='zeros'
                                          ))
                    self._head.add(BatchNorm(epsilon=1e-5, momentum=0.9))
                    self._head.add(LeakyReLU(0.1))

                self._head.add(Conv2D(channels=len(anchors[j]) * self._num_pred,
                                      kernel_size=(1, 1),
                                      strides=(1, 1),
                                      padding=(0, 0),
                                      use_bias=True,
                                      in_channels=0,
                                      weight_initializer=mx.init.Normal(0.01),
                                      bias_initializer='zeros'
                                      ))

            # for upsample - transition
            for i in range(len(anchors) - 1):
                if i == 0:
                    factor = 1
                else:
                    factor = 2
                trans_init_num_channel = trans_init_num_channel // factor
                self._transition.add(Conv2D(channels=trans_init_num_channel,
                                            kernel_size=(1, 1),
                                            strides=(1, 1),
                                            padding=(0, 0),
                                            use_bias=True,
                                            in_channels=0,
                                            weight_initializer=mx.init.Normal(0.01),
                                            bias_initializer='zeros'
                                            ))
                self._transition.add(BatchNorm(epsilon=1e-5, momentum=0.9))
                self._transition.add(LeakyReLU(0.1))

            # for deconvolution upsampleing
            for i in range(len(anchors) - 1):
                if i == 0:
                    factor = 1
                else:
                    factor = 2
                trans_init_num_channel = trans_init_num_channel // factor
                self._upsampleconv.add(Conv2DTranspose(trans_init_num_channel, kernel_size=3, strides=2, padding=1,
                                                       output_padding=1, use_bias=True, in_channels=0))
                self._upsampleconv.add(BatchNorm(epsilon=1e-5, momentum=0.9))
                self._upsampleconv.add(LeakyReLU(0.1))

        self._head.initialize(ctx=ctx)
        self._transition.initialize(ctx=ctx)
        self._upsampleconv.initialize(ctx=ctx)
        print(f"{self.__class__.__name__} Head weight init 완료")