Exemplo n.º 1
0
    def __init__(self,
                 channels,
                 init_block_channels,
                 cardinality,
                 bottleneck_width,
                 bn_use_global_stats=False,
                 in_channels=3,
                 in_size=(32, 32),
                 classes=10,
                 **kwargs):
        super(CIFARResNeXt, self).__init__(**kwargs)
        self.in_size = in_size
        self.classes = classes

        with self.name_scope():
            self.features = nn.HybridSequential(prefix="")
            self.features.add(
                conv3x3_block(in_channels=in_channels,
                              out_channels=init_block_channels,
                              bn_use_global_stats=bn_use_global_stats))
            in_channels = init_block_channels
            for i, channels_per_stage in enumerate(channels):
                stage = nn.HybridSequential(prefix="stage{}_".format(i + 1))
                with stage.name_scope():
                    for j, out_channels in enumerate(channels_per_stage):
                        strides = 2 if (j == 0) and (i != 0) else 1
                        stage.add(
                            ResNeXtUnit(
                                in_channels=in_channels,
                                out_channels=out_channels,
                                strides=strides,
                                cardinality=cardinality,
                                bottleneck_width=bottleneck_width,
                                bn_use_global_stats=bn_use_global_stats))
                        in_channels = out_channels
                self.features.add(stage)
            self.features.add(nn.AvgPool2D(pool_size=8, strides=1))

            self.output = nn.HybridSequential(prefix='')
            self.output.add(nn.Flatten())
            self.output.add(nn.Dense(units=classes, in_units=in_channels))
Exemplo n.º 2
0
    def __init__(self,
                 channels,
                 init_block_channels,
                 width,
                 scale,
                 bn_use_global_stats=False,
                 in_channels=3,
                 in_size=(224, 224),
                 classes=1000,
                 **kwargs):
        super(Res2Net, self).__init__(**kwargs)
        self.in_size = in_size
        self.classes = classes

        with self.name_scope():
            self.features = nn.HybridSequential(prefix='')
            self.features.add(
                ResInitBlock(in_channels=in_channels,
                             out_channels=init_block_channels,
                             bn_use_global_stats=bn_use_global_stats))
            in_channels = init_block_channels
            for i, channels_per_stage in enumerate(channels):
                stage = nn.HybridSequential(prefix="stage{}_".format(i + 1))
                with stage.name_scope():
                    for j, out_channels in enumerate(channels_per_stage):
                        strides = 2 if (j == 0) and (i != 0) else 1
                        stage.add(
                            Res2NetUnit(
                                in_channels=in_channels,
                                out_channels=out_channels,
                                strides=strides,
                                width=width,
                                scale=scale,
                                bn_use_global_stats=bn_use_global_stats))
                        in_channels = out_channels
                self.features.add(stage)
            self.features.add(nn.AvgPool2D(pool_size=7, strides=1))

            self.output = nn.HybridSequential(prefix='')
            self.output.add(nn.Flatten())
            self.output.add(nn.Dense(units=classes, in_units=in_channels))
    def __init__(self,
                 channels,
                 block_names,
                 merge_types,
                 dropout_rate=0.0001,
                 multi_blocks=2,
                 groups=2,
                 in_channels=3,
                 in_size=(224, 224),
                 classes=1000,
                 **kwargs):
        super(ChannelNet, self).__init__(**kwargs)
        self.in_size = in_size
        self.classes = classes

        with self.name_scope():
            self.features = nn.HybridSequential(prefix="")
            for i, channels_per_stage in enumerate(channels):
                stage = nn.HybridSequential(prefix="stage{}_".format(i + 1))
                with stage.name_scope():
                    for j, out_channels in enumerate(channels_per_stage):
                        strides = 2 if (j == 0) else 1
                        stage.add(
                            ChannetUnit(in_channels=in_channels,
                                        out_channels_list=out_channels,
                                        strides=strides,
                                        multi_blocks=multi_blocks,
                                        groups=groups,
                                        dropout_rate=dropout_rate,
                                        block_names=block_names[i][j],
                                        merge_type=merge_types[i][j]))
                        if merge_types[i][j] == "cat":
                            in_channels = sum(out_channels)
                        else:
                            in_channels = out_channels[-1]
                self.features.add(stage)
            self.features.add(nn.AvgPool2D(pool_size=7, strides=1))

            self.output = nn.HybridSequential(prefix="")
            self.output.add(nn.Flatten())
            self.output.add(nn.Dense(units=classes, in_units=in_channels))
Exemplo n.º 4
0
 def __init__(self, num_classes, verbose=False, **kwargs):
     super(ResNet, self).__init__(**kwargs)
     self.verbose = verbose
     # add name_scope on the outermost Sequential
     with self.name_scope():
         # block 1
         b1 = nn.Conv2D(64, kernel_size=7, strides=2)
         # block 2
         b2 = nn.Sequential()
         b2.add(
             nn.MaxPool2D(pool_size=3, strides=2),
             Residual(64),
             Residual(64)
         )
         # block 3
         b3 = nn.Sequential()
         b3.add(
             Residual(128, same_shape=False),
             Residual(128)
         )
         # block 4
         b4 = nn.Sequential()
         b4.add(
             Residual(256, same_shape=False),
             Residual(256)
         )
         # block 5
         b5 = nn.Sequential()
         b5.add(
             Residual(512, same_shape=False),
             Residual(512)
         )
         # block 6
         b6 = nn.Sequential()
         b6.add(
             nn.AvgPool2D(pool_size=3),
             nn.Dense(num_classes)
         )
         # chain all blocks together
         self.net = nn.Sequential()
         self.net.add(b1, b2, b3, b4, b5, b6)
Exemplo n.º 5
0
    def __init__(self, num_classes, verbose=False, *args, **kwargs):
        super(GoogleNet, self).__init__(*args, **kwargs)
        self.verbose = verbose
        with self.name_scope():
            b1 = nn.Sequential()
            b1.add(
                nn.Conv2D(64,
                          kernel_size=7,
                          strides=2,
                          padding=3,
                          activation='relu'),
                nn.MaxPool2D(pool_size=3, strides=2))

            b2 = nn.Sequential()
            b2.add(nn.Conv2D(64, kernel_size=1),
                   nn.Conv2D(192, kernel_size=3, padding=1),
                   nn.MaxPool2D(pool_size=3, strides=2))

            b3 = nn.Sequential()
            b3.add(Inception(64, 96, 128, 16, 32, 32),
                   Inception(128, 128, 192, 32, 96, 64),
                   nn.MaxPool2D(pool_size=3, strides=2))

            b4 = nn.Sequential()
            b4.add(Inception(192, 96, 208, 16, 48, 64),
                   Inception(160, 112, 224, 24, 64, 64),
                   Inception(128, 128, 256, 24, 64, 64),
                   Inception(112, 144, 288, 32, 64, 64),
                   Inception(256, 160, 320, 32, 128, 128),
                   nn.MaxPool2D(pool_size=3, strides=2))

            b5 = nn.Sequential()
            b5.add(Inception(256, 160, 320, 32, 128, 128),
                   Inception(384, 192, 384, 48, 128, 128),
                   nn.AvgPool2D(pool_size=2))

            b6 = nn.Sequential()
            b6.add(nn.Flatten(), nn.Dense(num_classes))

            self.net = nn.Sequential()
            self.net.add(b1, b2, b3, b4, b5, b6)
Exemplo n.º 6
0
def test_pool():
    layers1d = [
        nn.MaxPool1D(),
        nn.MaxPool1D(3),
        nn.MaxPool1D(3, 2),
        nn.AvgPool1D(),
        nn.GlobalAvgPool1D(),
    ]
    for layer in layers1d:
        check_layer_forward(layer, (1, 2, 10))

    layers2d = [
        nn.MaxPool2D(),
        nn.MaxPool2D((3, 3)),
        nn.MaxPool2D(3, 2),
        nn.AvgPool2D(),
        nn.GlobalAvgPool2D(),
    ]
    for layer in layers2d:
        check_layer_forward(layer, (1, 2, 10, 10))

    layers3d = [
        nn.MaxPool3D(),
        nn.MaxPool3D((3, 3, 3)),
        nn.MaxPool3D(3, 2),
        nn.AvgPool3D(),
        nn.GlobalAvgPool3D(),
    ]
    for layer in layers3d:
        check_layer_forward(layer, (1, 2, 10, 10, 10))

    # test ceil_mode
    x = mx.nd.zeros((2, 2, 10, 10))

    layer = nn.MaxPool2D(3, ceil_mode=False)
    layer.collect_params().initialize()
    assert (layer(x).shape == (2, 2, 3, 3))

    layer = nn.MaxPool2D(3, ceil_mode=True)
    layer.collect_params().initialize()
    assert (layer(x).shape == (2, 2, 4, 4))
Exemplo n.º 7
0
    def __init__(self, version, classes=1000, **kwargs):
        super(SqueezeNet, self).__init__(**kwargs)
        assert version in ['1.0', '1.1'], ("Unsupported SqueezeNet version {version}:"
                                           "1.0 or 1.1 expected".format(version=version))
        with self.name_scope():
            self.features = nn.HybridSequential(prefix='')
            if version == '1.0':
                self.features.add(nn.Conv2D(96, kernel_size=7, strides=2))
                self.features.add(nn.Activation('relu'))
                self.features.add(nn.MaxPool2D(pool_size=3, strides=2, ceil_mode=True))
                self.features.add(_make_fire(16, 64, 64))
                self.features.add(_make_fire(16, 64, 64))
                self.features.add(_make_fire(32, 128, 128))
                self.features.add(nn.MaxPool2D(pool_size=3, strides=2, ceil_mode=True))
                self.features.add(_make_fire(32, 128, 128))
                self.features.add(_make_fire(48, 192, 192))
                self.features.add(_make_fire(48, 192, 192))
                self.features.add(_make_fire(64, 256, 256))
                self.features.add(nn.MaxPool2D(pool_size=3, strides=2, ceil_mode=True))
                self.features.add(_make_fire(64, 256, 256))
            else:
                self.features.add(nn.Conv2D(64, kernel_size=3, strides=2))
                self.features.add(nn.Activation('relu'))
                self.features.add(nn.MaxPool2D(pool_size=3, strides=2, ceil_mode=True))
                self.features.add(_make_fire(16, 64, 64))
                self.features.add(_make_fire(16, 64, 64))
                self.features.add(nn.MaxPool2D(pool_size=3, strides=2, ceil_mode=True))
                self.features.add(_make_fire(32, 128, 128))
                self.features.add(_make_fire(32, 128, 128))
                self.features.add(nn.MaxPool2D(pool_size=3, strides=2, ceil_mode=True))
                self.features.add(_make_fire(48, 192, 192))
                self.features.add(_make_fire(48, 192, 192))
                self.features.add(_make_fire(64, 256, 256))
                self.features.add(_make_fire(64, 256, 256))
            self.features.add(nn.Dropout(0.5))

            self.output = nn.HybridSequential(prefix='')
            self.output.add(nn.Conv2D(classes, kernel_size=1))
            self.output.add(nn.Activation('relu'))
            self.output.add(nn.AvgPool2D(13))
            self.output.add(nn.Flatten())
    def __init__(self,
                 in_channels,
                 out_channels,
                 strides,
                 bn_use_global_stats,
                 binarized=False,
                 **kwargs):
        super(PreResUnit1bit, self).__init__(**kwargs)
        self.resize_identity = (strides != 1)

        with self.name_scope():
            self.body = PreResBlock1bit(
                in_channels=in_channels,
                out_channels=out_channels,
                strides=strides,
                bn_use_global_stats=bn_use_global_stats,
                binarized=binarized)
            if self.resize_identity:
                self.identity_pool = nn.AvgPool2D(pool_size=3,
                                                  strides=2,
                                                  padding=1)
Exemplo n.º 9
0
def dense_net():
    net = nn.Sequential()
    with net.name_scope():
        # first block
        net.add(nn.Conv2D(init_channels, kernel_size=7, strides=2, padding=3),
                nn.BatchNorm(), nn.Activation('relu'),
                nn.MaxPool2D(pool_size=3, strides=2, padding=1))

        # dense blocks
        channels = init_channels
        for i, layers in enumerate(block_layers):
            net.add(DenseBlock(layers, growth_rate))
            channels += layers * growth_rate
            if i != len(block_layers) - 1:
                net.add(transition_block(channels // 2))

        # last block
        net.add(nn.BatchNorm(), nn.Activation('relu'),
                nn.AvgPool2D(pool_size=1), nn.Flatten(), nn.Dense(num_classes))

    return net
Exemplo n.º 10
0
    def __init__(self, block, layers, channels, drop_rate, classes=10, **kwargs):
        super(CIFARWideResNet, self).__init__(**kwargs)
        assert len(layers) == len(channels) - 1
        with self.name_scope():
            self.features = nn.HybridSequential(prefix='')
            self.features.add(nn.BatchNorm(scale=False, center=False))

            self.features.add(nn.Conv2D(channels[0], 3, 1, 1, use_bias=False))
            self.features.add(nn.BatchNorm())

            in_channels = channels[0]
            for i, num_layer in enumerate(layers):
                stride = 1 if i == 0 else 2
                self.features.add(self._make_layer(block, num_layer, channels[i+1], drop_rate,
                                                   stride, i+1, in_channels=in_channels))
                in_channels = channels[i+1]
            self.features.add(nn.BatchNorm())
            self.features.add(nn.Activation('relu'))
            self.features.add(nn.AvgPool2D(8))
            self.features.add(nn.Flatten())
            self.output = nn.Dense(classes)
Exemplo n.º 11
0
    def __init__(self,
                 channels,
                 init_block_channels,
                 side_channels,
                 groups,
                 in_channels=3,
                 classes=1000,
                 **kwargs):
        super(MENet, self).__init__(**kwargs)

        with self.name_scope():
            self.features = nn.HybridSequential(prefix='')
            self.features.add(MEInitBlock(
                in_channels=in_channels,
                out_channels=init_block_channels))
            in_channels = init_block_channels
            for i, channels_per_stage in enumerate(channels):
                stage = nn.HybridSequential(prefix='stage{}_'.format(i + 1))
                with stage.name_scope():
                    for j, out_channels in enumerate(channels_per_stage):
                        downsample = (j == 0)
                        ignore_group = (i == 0) and (j == 0)
                        stage.add(MEUnit(
                            in_channels=in_channels,
                            out_channels=out_channels,
                            side_channels=side_channels,
                            groups=groups,
                            downsample=downsample,
                            ignore_group=ignore_group))
                        in_channels = out_channels
                self.features.add(stage)
            self.features.add(nn.AvgPool2D(
                pool_size=7,
                strides=1))

            self.output = nn.HybridSequential(prefix='')
            self.output.add(nn.Flatten())
            self.output.add(nn.Dense(
                units=classes,
                in_units=in_channels))
Exemplo n.º 12
0
    def __init__(self,
                 channels,
                 init_block_channels,
                 final_block_channels,
                 in_channels=3,
                 in_size=(224, 224),
                 classes=1000,
                 **kwargs):
        super(SqueezeNext, self).__init__(**kwargs)
        self.in_size = in_size
        self.classes = classes

        with self.name_scope():
            self.features = nn.HybridSequential(prefix='')
            self.features.add(
                SqnxtInitBlock(in_channels=in_channels,
                               out_channels=init_block_channels))
            in_channels = init_block_channels
            for i, channels_per_stage in enumerate(channels):
                stage = nn.HybridSequential(prefix='stage{}_'.format(i + 1))
                with stage.name_scope():
                    for j, out_channels in enumerate(channels_per_stage):
                        strides = 2 if (j == 0) and (i != 0) else 1
                        stage.add(
                            SqnxtUnit(in_channels=in_channels,
                                      out_channels=out_channels,
                                      strides=strides))
                        in_channels = out_channels
                self.features.add(stage)
            self.features.add(
                SqnxtConv(in_channels=in_channels,
                          out_channels=final_block_channels,
                          kernel_size=1,
                          strides=1))
            in_channels = final_block_channels
            self.features.add(nn.AvgPool2D(pool_size=7, strides=1))

            self.output = nn.HybridSequential(prefix='')
            self.output.add(nn.Flatten())
            self.output.add(nn.Dense(units=classes, in_units=in_channels))
Exemplo n.º 13
0
    def __init__(self,
                 channels,
                 init_block_channels,
                 bn_use_global_stats=False,
                 in_channels=3,
                 in_size=(32, 32),
                 classes=10,
                 **kwargs):
        super(CIFAR10WRN, self).__init__(**kwargs)
        self.in_size = in_size
        self.classes = classes

        with self.name_scope():
            self.features = nn.HybridSequential(prefix='')
            self.features.add(
                conv3x3(in_channels=in_channels,
                        out_channels=init_block_channels))
            in_channels = init_block_channels
            for i, channels_per_stage in enumerate(channels):
                stage = nn.HybridSequential(prefix='stage{}_'.format(i + 1))
                with stage.name_scope():
                    for j, out_channels in enumerate(channels_per_stage):
                        strides = 2 if (j == 0) and (i != 0) else 1
                        stage.add(
                            PreResUnit(in_channels=in_channels,
                                       out_channels=out_channels,
                                       strides=strides,
                                       bn_use_global_stats=bn_use_global_stats,
                                       bottleneck=False,
                                       conv1_stride=False))
                        in_channels = out_channels
                self.features.add(stage)
            self.features.add(
                PreResActivation(in_channels=in_channels,
                                 bn_use_global_stats=bn_use_global_stats))
            self.features.add(nn.AvgPool2D(pool_size=8, strides=1))

            self.output = nn.HybridSequential(prefix='')
            self.output.add(nn.Flatten())
            self.output.add(nn.Dense(units=classes, in_units=in_channels))
 def __init__(self, classes=1000, additional_stage=False, **kwargs):
     """
      Input size is 448
     :param classes: Output classes
     :param additional_stage: If False means Attention56, True means Attention92
     :param kwargs:
     """
     self.additional_stage = additional_stage
     super(ResidualAttentionModel_448input, self).__init__(**kwargs)
     with self.name_scope():
         self.conv1 = nn.HybridSequential()
         with self.conv1.name_scope():
             self.conv1.add(nn.Conv2D(64, kernel_size=7, strides=2, padding=3, use_bias=False))
             self.conv1.add(nn.BatchNorm())
             self.conv1.add(nn.Activation('relu'))
         self.mpool1 = nn.MaxPool2D(pool_size=3, strides=2, padding=1)
         # 112 x 112
         self.residual_block0 = ResidualBlock(128, in_channels=64)
         self.attention_module0 = AttentionModule_stage0(128)
         self.residual_block1 = ResidualBlock(256, in_channels=128, stride=2)
         # 56 x 56
         self.attention_module1 = AttentionModule_stage1(256)
         self.residual_block2 = ResidualBlock(512, in_channels=256, stride=2)
         self.attention_module2 = AttentionModule_stage2(512)
         if additional_stage:
             self.attention_module2_2 = AttentionModule_stage2(512)
         self.residual_block3 = ResidualBlock(1024, in_channels=512, stride=2)
         self.attention_module3 = AttentionModule_stage3(1024)
         if additional_stage:
             self.attention_module3_2 = AttentionModule_stage3(1024)
             self.attention_module3_3 = AttentionModule_stage3(1024)
         self.residual_block4 = ResidualBlock(2048, in_channels=1024, stride=2)
         self.residual_block5 = ResidualBlock(2048)
         self.residual_block6 = ResidualBlock(2048)
         self.mpool2 = nn.HybridSequential()
         with self.mpool2.name_scope():
             self.mpool2.add(nn.BatchNorm())
             self.mpool2.add(nn.Activation('relu'))
             self.mpool2.add(nn.AvgPool2D(pool_size=7, strides=1))
         self.fc = nn.Conv2D(classes, kernel_size=1)
Exemplo n.º 15
0
    def __init__(self, in_channels, out_channels, side_channels, groups,
                 downsample, ignore_group, **kwargs):
        super(MEUnit, self).__init__(**kwargs)
        self.downsample = downsample
        mid_channels = out_channels // 4

        if downsample:
            out_channels -= in_channels

        with self.name_scope():
            # residual branch
            self.compress_conv1 = group_conv1x1(
                in_channels=in_channels,
                out_channels=mid_channels,
                groups=(1 if ignore_group else groups))
            self.compress_bn1 = nn.BatchNorm(in_channels=mid_channels)
            self.c_shuffle = ChannelShuffle(channels=mid_channels,
                                            groups=groups)
            self.dw_conv2 = depthwise_conv3x3(
                channels=mid_channels, strides=(2 if self.downsample else 1))
            self.dw_bn2 = nn.BatchNorm(in_channels=mid_channels)
            self.expand_conv3 = group_conv1x1(in_channels=mid_channels,
                                              out_channels=out_channels,
                                              groups=groups)
            self.expand_bn3 = nn.BatchNorm(in_channels=out_channels)
            if downsample:
                self.avgpool = nn.AvgPool2D(pool_size=3, strides=2, padding=1)
            self.activ = nn.Activation('relu')

            # fusion branch
            self.s_merge_conv = conv1x1(in_channels=mid_channels,
                                        out_channels=side_channels)
            self.s_merge_bn = nn.BatchNorm(in_channels=side_channels)
            self.s_conv = conv3x3(in_channels=side_channels,
                                  out_channels=side_channels,
                                  strides=(2 if self.downsample else 1))
            self.s_conv_bn = nn.BatchNorm(in_channels=side_channels)
            self.s_evolve_conv = conv1x1(in_channels=side_channels,
                                         out_channels=mid_channels)
            self.s_evolve_bn = nn.BatchNorm(in_channels=mid_channels)
Exemplo n.º 16
0
    def _make_transition(self, transition_num):
        dilation = self.dilation[transition_num + 1]
        num_out_features = self.num_features // self.reduction_rates[
            transition_num]
        num_out_features = int(round(num_out_features / 32)) * 32
        logging.info("Features in transition {}: {} -> {}".format(
            transition_num + 1, self.num_features, num_out_features))
        self.num_features = num_out_features

        transition = nn.HybridSequential(prefix='')
        with transition.name_scope():
            for layer in self.downsample_struct.split(","):
                if layer == "bn":
                    transition.add(nn.BatchNorm())
                elif layer == "relu":
                    transition.add(nn.Activation("relu"))
                elif layer == "q_conv":
                    transition.add(
                        nn.activated_conv(self.num_features, kernel_size=1))
                elif "fp_conv" in layer:
                    groups = 1
                    if ":" in layer:
                        groups = int(layer.split(":")[1])
                    transition.add(
                        nn.Conv2D(self.num_features,
                                  kernel_size=1,
                                  groups=groups,
                                  use_bias=False))
                elif layer == "pool" and dilation == 1:
                    transition.add(nn.AvgPool2D(pool_size=2, strides=2))
                elif layer == "max_pool" and dilation == 1:
                    transition.add(nn.MaxPool2D(pool_size=2, strides=2))
                elif "cs" in layer:
                    groups = 16
                    if ":" in layer:
                        groups = int(layer.split(":")[1])
                    transition.add(ChannelShuffle(groups=groups))

        self.get_layer(transition_num + 1).add(transition)
        return transition
Exemplo n.º 17
0
    def __init__(self,
                 channels,
                 odd_pointwise,
                 avg_pool_size,
                 cls_activ,
                 bn_use_global_stats=False,
                 in_channels=3,
                 classes=1000,
                 **kwargs):
        super(DarkNet, self).__init__(**kwargs)

        with self.name_scope():
            self.features = nn.HybridSequential(prefix='')
            for i, channels_per_stage in enumerate(channels):
                stage = nn.HybridSequential(prefix='stage{}_'.format(i + 1))
                with stage.name_scope():
                    for j, out_channels in enumerate(channels_per_stage):
                        stage.add(dark_convYxY(
                            in_channels=in_channels,
                            out_channels=out_channels,
                            bn_use_global_stats=bn_use_global_stats,
                            pointwise=(len(channels_per_stage) > 1) and not(((j + 1) % 2 == 1) ^ odd_pointwise)))
                        in_channels = out_channels
                    if i != len(channels) - 1:
                        stage.add(nn.MaxPool2D(
                            pool_size=2,
                            strides=2))
                self.features.add(stage)

            self.output = nn.HybridSequential(prefix='')
            self.output.add(nn.Conv2D(
                channels=classes,
                kernel_size=1,
                in_channels=in_channels))
            if cls_activ:
                self.output.add(nn.LeakyReLU(alpha=0.1))
            self.output.add(nn.AvgPool2D(
                pool_size=avg_pool_size,
                strides=1))
            self.output.add(nn.Flatten())
Exemplo n.º 18
0
    def __init__(self,
                 channels,
                 init_block_channels,
                 cardinality,
                 bottleneck_width,
                 bn_use_global_stats=False,
                 in_channels=3,
                 classes=1000,
                 **kwargs):
        super(SENet, self).__init__(**kwargs)

        with self.name_scope():
            self.features = nn.HybridSequential(prefix='')
            self.features.add(
                SEInitBlock(in_channels=in_channels,
                            out_channels=init_block_channels,
                            bn_use_global_stats=bn_use_global_stats))
            in_channels = init_block_channels
            for i, channels_per_stage in enumerate(channels):
                stage = nn.HybridSequential(prefix='stage{}_'.format(i + 1))
                identity_conv3x3 = (i != 0)
                with stage.name_scope():
                    for j, out_channels in enumerate(channels_per_stage):
                        strides = 2 if (j == 0) and (i != 0) else 1
                        stage.add(
                            SENetUnit(in_channels=in_channels,
                                      out_channels=out_channels,
                                      strides=strides,
                                      cardinality=cardinality,
                                      bottleneck_width=bottleneck_width,
                                      bn_use_global_stats=bn_use_global_stats,
                                      identity_conv3x3=identity_conv3x3))
                        in_channels = out_channels
                self.features.add(stage)
            self.features.add(nn.AvgPool2D(pool_size=7, strides=1))

            self.output = nn.HybridSequential(prefix='')
            self.output.add(nn.Flatten())
            self.output.add(nn.Dropout(rate=0.2))
            self.output.add(nn.Dense(units=classes, in_units=in_channels))
    def __init__(self,
                 channels,
                 first_stage_stride,
                 bn_use_global_stats=False,
                 in_channels=3,
                 in_size=(224, 224),
                 classes=1000,
                 **kwargs):
        super(MobileNet, self).__init__(**kwargs)
        self.in_size = in_size
        self.classes = classes

        with self.name_scope():
            self.features = nn.HybridSequential(prefix="")
            init_block_channels = channels[0][0]
            self.features.add(
                conv3x3_block(in_channels=in_channels,
                              out_channels=init_block_channels,
                              strides=2,
                              bn_use_global_stats=bn_use_global_stats))
            in_channels = init_block_channels
            for i, channels_per_stage in enumerate(channels[1:]):
                stage = nn.HybridSequential(prefix="stage{}_".format(i + 1))
                with stage.name_scope():
                    for j, out_channels in enumerate(channels_per_stage):
                        strides = 2 if (j == 0) and (
                            (i != 0) or first_stage_stride) else 1
                        stage.add(
                            dwsconv3x3_block(
                                in_channels=in_channels,
                                out_channels=out_channels,
                                strides=strides,
                                bn_use_global_stats=bn_use_global_stats))
                        in_channels = out_channels
                self.features.add(stage)
            self.features.add(nn.AvgPool2D(pool_size=7, strides=1))

            self.output = nn.HybridSequential(prefix="")
            self.output.add(nn.Flatten())
            self.output.add(nn.Dense(units=classes, in_units=in_channels))
Exemplo n.º 20
0
    def _make_layer(self, stage_index, block, layers, planes, strides=1, norm_layer=None, last_gamma=False):

        down_sample = None
        if strides != 1 or self.inplanes != planes * block.expansion:
            # down_sample
            down_sample = nn.HybridSequential(prefix='down{}_'.format(stage_index))
            down_sample.add(nn.AvgPool2D(pool_size=3, strides=strides, padding=1),  # down sample
                            nn.Conv2D(planes * block.expansion, kernel_size=1, strides=1, use_bias=False))
            down_sample.add(norm_layer(**self.norm_kwargs))

        layer = nn.HybridSequential(prefix='layer{}_'.format(stage_index))

        with layer.name_scope():
            layer.add(block(planes=planes, strides=strides, down_sample=down_sample,
                            norm_layer=norm_layer, norm_kwargs=self.norm_kwargs,
                            last_gamma=last_gamma))

            for _ in range(0, layers - 1):
                layer.add(block(planes=planes, norm_layer=norm_layer,
                                norm_kwargs=self.norm_kwargs, last_gamma=last_gamma))

        return layer
Exemplo n.º 21
0
    def __init__(self,
                 dropout_rate=0.0,
                 bn_use_global_stats=False,
                 in_channels=3,
                 in_size=(299, 299),
                 classes=1000,
                 **kwargs):
        super(InceptionV4, self).__init__(**kwargs)
        self.in_size = in_size
        self.classes = classes
        layers = [4, 8, 4]
        normal_units = [InceptionAUnit, InceptionBUnit, InceptionCUnit]
        reduction_units = [ReductionAUnit, ReductionBUnit]

        with self.name_scope():
            self.features = nn.HybridSequential(prefix='')
            self.features.add(
                InceptInitBlock(in_channels=in_channels,
                                bn_use_global_stats=bn_use_global_stats))

            for i, layers_per_stage in enumerate(layers):
                stage = nn.HybridSequential(prefix="stage{}_".format(i + 1))
                with stage.name_scope():
                    for j in range(layers_per_stage):
                        if (j == 0) and (i != 0):
                            unit = reduction_units[i - 1]
                        else:
                            unit = normal_units[i]
                        stage.add(
                            unit(bn_use_global_stats=bn_use_global_stats))
                self.features.add(stage)

            self.features.add(nn.AvgPool2D(pool_size=8, strides=1))

            self.output = nn.HybridSequential(prefix='')
            self.output.add(nn.Flatten())
            if dropout_rate > 0.0:
                self.output.add(nn.Dropout(rate=dropout_rate))
            self.output.add(nn.Dense(units=classes, in_units=1536))
Exemplo n.º 22
0
 def __init__(self,
              channels,
              in_size,
              fixed_size,
              bn_use_global_stats=False,
              bn_cudnn_off=False,
              **kwargs):
     super(StridedDiceRightBranch, self).__init__(**kwargs)
     with self.name_scope():
         self.pool = nn.AvgPool2D(pool_size=3, strides=2, padding=1)
         self.dice = DiceBlock(in_channels=channels,
                               out_channels=channels,
                               in_size=(in_size[0] // 2, in_size[1] // 2),
                               fixed_size=fixed_size,
                               bn_use_global_stats=bn_use_global_stats,
                               bn_cudnn_off=bn_cudnn_off)
         self.conv = conv1x1_block(
             in_channels=channels,
             out_channels=channels,
             bn_use_global_stats=bn_use_global_stats,
             bn_cudnn_off=bn_cudnn_off,
             activation=(lambda: PReLU2(in_channels=channels)))
Exemplo n.º 23
0
    def __init__(self,
                 in_channels,
                 out_channels,
                 downscale,
                 dw_use_bn,
                 dw_activation,
                 bn_use_global_stats=False,
                 bn_cudnn_off=False,
                 **kwargs):
        super(RegNetVUnit, self).__init__(**kwargs)
        self.downscale = downscale

        with self.name_scope():
            self.conv1 = conv1x1_block(
                in_channels=in_channels,
                out_channels=out_channels,
                bn_use_global_stats=bn_use_global_stats,
                bn_cudnn_off=bn_cudnn_off)
            if self.downscale:
                self.pool = nn.AvgPool2D(
                    pool_size=3,
                    strides=2,
                    padding=1)
            self.conv2 = dwsconv3x3_block(
                in_channels=out_channels,
                out_channels=out_channels,
                dw_use_bn=dw_use_bn,
                bn_use_global_stats=bn_use_global_stats,
                bn_cudnn_off=bn_cudnn_off,
                dw_activation=dw_activation,
                pw_activation=None)
            if self.downscale:
                self.identity_block = DownBlock(
                    in_channels=in_channels,
                    out_channels=out_channels,
                    strides=2,
                    bn_use_global_stats=bn_use_global_stats,
                    bn_cudnn_off=bn_cudnn_off)
            self.activ = nn.Activation("relu")
Exemplo n.º 24
0
    def __init__(self, layers, cardinality, bottleneck_width,
                 classes=1000, use_se=False, **kwargs):
        super(ResNext, self).__init__(**kwargs)
        self.cardinality = cardinality
        self.bottleneck_width = bottleneck_width
        channels = 64

        with self.name_scope():
            self.features = nn.HybridSequential(prefix='')
            self.features.add(nn.Conv2D(channels, 7, 2, 3, use_bias=False))

            self.features.add(nn.BatchNorm())
            self.features.add(nn.Activation('relu'))
            self.features.add(nn.MaxPool2D(3, 2, 1))

            for i, num_layer in enumerate(layers):
                stride = 1 if i == 0 else 2
                self.features.add(self._make_layer(channels, num_layer, stride, use_se, i+1))
                channels *= 2
            self.features.add(nn.AvgPool2D(7))

            self.output = nn.Dense(classes)
Exemplo n.º 25
0
 def __init__(self,
              num_blocks_list=None,
              channels_list=None,
              strides_list=None,
              num_classes=10,
              use_backbone=False,
              **kwargs):
     super(ResNet, self).__init__(**kwargs)
     self.use_backbone = use_backbone
     with self.name_scope():
         self.conv = nn.HybridSequential()
         self.body = nn.HybridSequential()
         self.pool = nn.HybridSequential()
         self.conv.add(nn.Conv2D(64, 3, 1, padding=1))
         self.conv.add(nn.Activation('relu'))
         for n, c, s in zip(num_blocks_list, channels_list, strides_list):
             self.body.add(ConvLayer(n, c, s))
             self.pool.add(nn.MaxPool2D((3, 3), strides=s, padding=1))
         if not use_backbone:
             self.fc = nn.HybridSequential()
             self.fc.add(nn.AvgPool2D())
             self.fc.add(nn.Dense(num_classes, use_bias=False))
Exemplo n.º 26
0
    def __init__(self,
                 channels,
                 init_block_channels,
                 final_block_channels,
                 use_se=False,
                 use_residual=False,
                 in_channels=3,
                 classes=1000,
                 **kwargs):
        super(ShuffleNetV2, self).__init__(**kwargs)

        with self.name_scope():
            self.features = nn.HybridSequential(prefix='')
            self.features.add(
                ShuffleInitBlock(in_channels=in_channels,
                                 out_channels=init_block_channels))
            in_channels = init_block_channels
            for i, channels_per_stage in enumerate(channels):
                stage = nn.HybridSequential(prefix='stage{}_'.format(i + 1))
                with stage.name_scope():
                    for j, out_channels in enumerate(channels_per_stage):
                        downsample = (j == 0)
                        stage.add(
                            ShuffleUnit(in_channels=in_channels,
                                        out_channels=out_channels,
                                        downsample=downsample,
                                        use_se=use_se,
                                        use_residual=use_residual))
                        in_channels = out_channels
                self.features.add(stage)
            self.features.add(
                shuffle_conv1x1(in_channels=in_channels,
                                out_channels=final_block_channels))
            in_channels = final_block_channels
            self.features.add(nn.AvgPool2D(pool_size=7, strides=1))

            self.output = nn.HybridSequential(prefix='')
            self.output.add(nn.Flatten())
            self.output.add(nn.Dense(units=classes, in_units=in_channels))
Exemplo n.º 27
0
    def __init__(self,
                 channels,
                 init_block_channels,
                 bottleneck,
                 conv1_stride,
                 use_se,
                 bn_use_global_stats=False,
                 in_channels=3,
                 classes=1000,
                 **kwargs):
        super(ResNet, self).__init__(**kwargs)

        with self.name_scope():
            self.features = nn.HybridSequential(prefix='')
            self.features.add(
                ResInitBlock(in_channels=in_channels,
                             out_channels=init_block_channels,
                             bn_use_global_stats=bn_use_global_stats))
            in_channels = init_block_channels
            for i, channels_per_stage in enumerate(channels):
                stage = nn.HybridSequential(prefix='stage{}_'.format(i + 1))
                with stage.name_scope():
                    for j, out_channels in enumerate(channels_per_stage):
                        strides = 2 if (j == 0) and (i != 0) else 1
                        stage.add(
                            ResUnit(in_channels=in_channels,
                                    out_channels=out_channels,
                                    strides=strides,
                                    bn_use_global_stats=bn_use_global_stats,
                                    bottleneck=bottleneck,
                                    conv1_stride=conv1_stride,
                                    use_se=use_se))
                        in_channels = out_channels
                self.features.add(stage)
            self.features.add(nn.AvgPool2D(pool_size=7, strides=1))

            self.output = nn.HybridSequential(prefix='')
            self.output.add(nn.Flatten())
            self.output.add(nn.Dense(units=classes, in_units=in_channels))
Exemplo n.º 28
0
    def __init__(self, **kwargs):
        super(ResidualAttentionModel_56, self).__init__(**kwargs)
        """
        input size 224
        """
        with self.name_scope():
            self.conv1 = nn.HybridSequential()
            with self.conv1.name_scope():
                self.conv1.add(
                    nn.Conv2D(64,
                              kernel_size=7,
                              strides=2,
                              padding=3,
                              use_bias=False))
                self.conv1.add(nn.BatchNorm())
                self.conv1.add(nn.Activation('relu'))
            self.mpool1 = nn.MaxPool2D(pool_size=3, strides=2, padding=1)

            self.residual_block1 = ResidualBlock(256, in_channels=64)
            self.attention_module1 = AttentionModule_stage1(256)
            self.residual_block2 = ResidualBlock(512,
                                                 in_channels=256,
                                                 stride=2)
            self.attention_module2 = AttentionModule_stage2(512)
            self.residual_block3 = ResidualBlock(1024,
                                                 in_channels=512,
                                                 stride=2)
            self.attention_module3 = AttentionModule_stage3(1024)
            self.residual_block4 = ResidualBlock(2048,
                                                 in_channels=1024,
                                                 stride=2)
            self.residual_block5 = ResidualBlock(2048)
            self.residual_block6 = ResidualBlock(2048)
            self.mpool2 = nn.HybridSequential()
            with self.mpool2.name_scope():
                self.mpool2.add(nn.BatchNorm())
                self.mpool2.add(nn.Activation('relu'))
                self.mpool2.add(nn.AvgPool2D(pool_size=7, strides=1))
            self.fc = nn.Conv2D(10, kernel_size=1)
Exemplo n.º 29
0
    def __init__(self,
                 channels,
                 init_block_channels,
                 groups,
                 bn_use_global_stats=False,
                 in_channels=3,
                 classes=1000,
                 **kwargs):
        super(CondenseNet, self).__init__(**kwargs)

        with self.name_scope():
            self.features = nn.HybridSequential(prefix='')
            self.features.add(
                CondenseInitBlock(in_channels=in_channels,
                                  out_channels=init_block_channels))
            in_channels = init_block_channels
            for i, channels_per_stage in enumerate(channels):
                stage = nn.HybridSequential(prefix='stage{}_'.format(i + 1))
                with stage.name_scope():
                    if i != 0:
                        stage.add(TransitionBlock())
                    for j, out_channels in enumerate(channels_per_stage):
                        stage.add(
                            CondenseUnit(
                                in_channels=in_channels,
                                out_channels=out_channels,
                                groups=groups,
                                bn_use_global_stats=bn_use_global_stats))
                        in_channels = out_channels
                self.features.add(stage)
            self.features.add(
                PostActivation(in_channels=in_channels,
                               bn_use_global_stats=bn_use_global_stats))
            self.features.add(nn.AvgPool2D(pool_size=7, strides=1))

            self.output = nn.HybridSequential(prefix='')
            self.output.add(nn.Flatten())
            self.output.add(CondenseDense(units=classes, in_units=in_channels))
Exemplo n.º 30
0
    def __init__(self,
                 channels,
                 init_block_channels,
                 growth_rate,
                 bn_use_global_stats=False,
                 dropout_rate=0.0,
                 in_channels=3,
                 in_size=(224, 224),
                 classes=1000,
                 **kwargs):
        super(SparseNet, self).__init__(**kwargs)
        self.in_size = in_size
        self.classes = classes

        with self.name_scope():
            self.features = nn.HybridSequential(prefix='')
            self.features.add(
                PreResInitBlock(in_channels=in_channels,
                                out_channels=init_block_channels,
                                bn_use_global_stats=bn_use_global_stats))
            in_channels = init_block_channels
            for i, channels_per_stage in enumerate(channels):
                stage = SparseStage(in_channels=in_channels,
                                    channels_per_stage=channels_per_stage,
                                    growth_rate=growth_rate,
                                    bn_use_global_stats=bn_use_global_stats,
                                    dropout_rate=dropout_rate,
                                    do_transition=(i != 0))
                in_channels = channels_per_stage[-1]
                self.features.add(stage)
            self.features.add(
                PreResActivation(in_channels=in_channels,
                                 bn_use_global_stats=bn_use_global_stats))
            self.features.add(nn.AvgPool2D(pool_size=7, strides=1))

            self.output = nn.HybridSequential(prefix='')
            self.output.add(nn.Flatten())
            self.output.add(nn.Dense(units=classes, in_units=in_channels))