Exemplo n.º 1
0
    def __init__(self, name, in_ch, ch, res_scale_fac, act_type, bn_mom, use_se, shortcut, pool_type):
        super(_RiseBlockB, self).__init__(name, ch, res_scale_fac, act_type, bn_mom, use_se, shortcut)
        self.body = HybridSequential(prefix="")
        self.branches = HybridConcurrent(axis=1, prefix="")  # entry point for all branches
        ch_0_0 = ch_1_0 = 32
        ch_1_1 = ch_1_2 = ch_0_2 = ch_0_1 = 96
        ch_2_0 = 192  # Too many local variables (18/15)

        with self.name_scope():
            # branch 0
            self.b_0 = HybridSequential()
            self.b_0.add(get_pool(pool_type, pool_size=(2, 2), strides=(2, 2)))
            self.b_0.add(Conv2D(channels=ch_0_0, kernel_size=(1, 1), in_channels=in_ch))
            self.b_0.add(get_act(act_type))
            self.b_0.add(
                Conv2D(channels=ch_0_1, kernel_size=(3, 1), padding=(0, 1), in_channels=ch_0_0, use_bias=False)
            )
            self.b_0.add(
                Conv2D(channels=ch_0_2, kernel_size=(1, 3), padding=(1, 0), in_channels=ch_0_1, use_bias=False)
            )
            self.b_0.add(_UpsampleBlock("upsample0", scale=2))

            # branch 1
            self.b_1 = HybridSequential()
            self.b_1.add(Conv2D(channels=ch_1_0, kernel_size=(1, 1), in_channels=in_ch))
            self.b_1.add(get_act(act_type))
            self.b_1.add(
                Conv2D(channels=ch_1_1, kernel_size=(3, 1), padding=(0, 1), in_channels=ch_1_0, use_bias=False)
            )
            self.b_1.add(
                Conv2D(channels=ch_1_2, kernel_size=(1, 3), padding=(1, 0), in_channels=ch_1_1, use_bias=False)
            )
            # branch 2
            self.b_2 = HybridSequential()
            self.b_2.add(Conv2D(channels=ch_2_0, kernel_size=(1, 1), in_channels=in_ch, use_bias=False))
            # concatenate all branches and add them to the body
            self.branches.add(self.b_0)
            self.branches.add(self.b_1)
            self.branches.add(self.b_2)
            self.body.add(self.branches)
Exemplo n.º 2
0
    def __init__(self, name, in_ch, ch, res_scale_fac, act_type, bn_mom,
                 use_se, shortcut, pool_type):
        """
        IN 8x8: 256 TOTAL

        BRANCH 0

        	b_0         b_0        b_0_0
        -> 24 Conv 1x1 -> POOL2D 2x2 -> 32 Conv 3x3

        -> 24-> 32

        BRANCH 1

        	b_0         b_0        b_0_0
        -> 24 Conv 1x1 -> POOL2D 4x4 -> 32 Conv 2x2

        -> 24-> 32


        BRANCH 2
        -> 24 Conv 1x1 -> 32 Conv 3x3
        -> 24 -> 32

        BRANCH 3
        -> 24 Conv 1x1 -> 24 Conv 3x1
        	       -> 24 Conv 1x3
        -> 24 -> 48


        BRANCH 4
        -> 24 Conv 1x1 -> 24 Conv 5x1
        	       -> 24 Conv 1x5
        -> 24 -> 48


        BRANCH 5
        -> 24 Conv 1x1 -> 24 Conv 3x1 -> 32 Conv 1x3
        	       -> 24 Conv 1x3 -> 32 Conv 3x1
        -> 24 -> 64

        """

        super(_RiseBlockA, self).__init__(name, ch, res_scale_fac, act_type,
                                          bn_mom, use_se, shortcut)

        self.body = HybridSequential(prefix="")

        # entry point for all branches
        self.branches = HybridConcurrent(axis=1, prefix="")

        ch_0_0 = 42
        ch_0_1 = 64

        ch_1_0 = 32
        ch_1_1 = 32

        ch_2_0 = 64
        ch_2_1 = 96
        ch_2_2 = 128

        with self.name_scope():
            # branch 0
            self.b_0 = HybridSequential()
            self.b_0.add(get_pool(pool_type, pool_size=(2, 2), strides=(2, 2)))
            self.b_0.add(
                Conv2D(channels=ch_0_0, kernel_size=(1, 1), in_channels=in_ch))
            self.b_0.add(get_act(act_type))
            self.b_0.add(
                Conv2D(channels=ch_0_1,
                       kernel_size=(3, 3),
                       padding=(1, 1),
                       in_channels=ch_0_0,
                       use_bias=True))
            self.b_0.add(get_act(act_type))
            self.b_0.add(_UpsampleBlock("upsample0", scale=2))

            # branch 1
            self.b_1 = HybridSequential()
            self.b_1.add(get_pool(pool_type, pool_size=(4, 4), strides=(4, 4)))
            self.b_1.add(
                Conv2D(channels=ch_1_0,
                       kernel_size=(1, 1),
                       in_channels=in_ch,
                       use_bias=True))
            self.b_1.add(get_act(act_type))
            self.b_1.add(
                Conv2D(channels=ch_1_1,
                       kernel_size=(3, 3),
                       padding=(1, 1),
                       in_channels=ch_1_0,
                       use_bias=True))
            self.b_1.add(get_act(act_type))
            self.b_1.add(_UpsampleBlock("upsample0", scale=4))
            # branch 1
            # self.b_1 = HybridSequential()
            # self.b_1.add(Conv2D(channels=ch_1_0, kernel_size=(1, 1), in_channels=in_ch, use_bias=False))
            # self.b_1.add(get_act(act_type))

            # branch 2
            self.b_2 = HybridSequential()
            self.b_2.add(
                Conv2D(channels=ch_2_0, kernel_size=(1, 1), in_channels=in_ch))
            self.b_2.add(get_act(act_type))
            self.b_2.add(
                Conv2D(channels=ch_2_1,
                       kernel_size=(3, 3),
                       padding=(1, 1),
                       in_channels=ch_2_0,
                       use_bias=True))
            self.b_2.add(get_act(act_type))
            self.b_2.add(
                Conv2D(channels=ch_2_2,
                       kernel_size=(3, 3),
                       padding=(1, 1),
                       in_channels=ch_2_1,
                       use_bias=True))
            self.b_2.add(get_act(act_type))
            # concatenate all branches and add them to the body
            self.branches.add(self.b_0)
            self.branches.add(self.b_1)
            self.branches.add(self.b_2)
            # self.branches.add(self.b_3)
            # self.branches.add(self.b_4)
            self.body.add(self.branches)
            self.body.add(
                Conv2D(
                    channels=ch,
                    kernel_size=(1, 1),
                    prefix="%s_conv0" % name,
                    in_channels=ch_0_1 + ch_1_1 + ch_2_2,
                    use_bias=False,
                ))  # +ch_3_2+ch_4_2