    def __init__(self,
                 in_channels=[80, 56, 34],
                 detection_block_channels=[160, 128, 96],
                 norm_type='bn',
                 data_format='NCHW',
                 **kwargs):
        """
        PPYOLO Tiny FPN layer
        Args:
            in_channels (list): input channels for fpn
            detection_block_channels (list): channels in fpn
            norm_type (str): batch norm type, default bn
            data_format (str): data format, NCHW or NHWC
            kwargs: extra key-value pairs, such as parameter of DropBlock and spp
        """
        super(PPYOLOTinyFPN, self).__init__()
        assert len(in_channels) > 0, "in_channels length should > 0"
        self.in_channels = in_channels[::-1]
        assert len(detection_block_channels
                   ) > 0, "detection_block_channelslength should > 0"
        self.detection_block_channels = detection_block_channels
        self.data_format = data_format
        self.num_blocks = len(in_channels)
        # parse kwargs
        self.drop_block = kwargs.get('drop_block', False)
        self.block_size = kwargs.get('block_size', 3)
        self.keep_prob = kwargs.get('keep_prob', 1.0)

        self.spp_ = kwargs.get('spp', False)
        if self.spp_:
            self.spp = SPP(self.in_channels[0] * 4,
                           self.in_channels[0],
                           k=1,
                           pool_size=[5, 9, 13],
                           norm_type=norm_type,
                           name='spp')

        self._out_channels = []
        # self.yolo_blocks = []
        self.yolo_blocks = nn.ModuleDict()
        self.yolo_blocks_names = []
        # self.routes = []
        self.routes = nn.ModuleDict()
        self.routes_names = []
        for i, (
                ch_in, ch_out
        ) in enumerate(zip(self.in_channels, self.detection_block_channels)):
            name = 'yolo_block_{}'.format(i)
            if i > 0:
                ch_in += self.detection_block_channels[i - 1]
            # yolo_block = self.add_sublayer(
            #     name,
            #     PPYOLOTinyDetBlock(
            #         ch_in,
            #         ch_out,
            #         name,
            #         drop_block=self.drop_block,
            #         block_size=self.block_size,
            #         keep_prob=self.keep_prob))
            # self.yolo_blocks.append(yolo_block)
            yolo_block = PPYOLOTinyDetBlock(
                    ch_in,
                    ch_out,
                    name,
                    drop_block=self.drop_block,
                    block_size=self.block_size,
                    keep_prob=self.keep_prob)
            self.yolo_blocks.add_module(name, yolo_block)
            self.yolo_blocks_names.append(name)
            self._out_channels.append(ch_out)

            if i < self.num_blocks - 1:
                name = 'yolo_transition_{}'.format(i)
                # route = self.add_sublayer(
                #     name,
                #     ConvBNLayer(
                #         ch_in=ch_out,
                #         ch_out=ch_out,
                #         filter_size=1,
                #         stride=1,
                #         padding=0,
                #         norm_type=norm_type,
                #         data_format=data_format,
                #         name=name))
                # self.routes.append(route)

                route = ConvBNLayer(
                        ch_in=ch_out,
                        ch_out=ch_out,
                        filter_size=1,
                        stride=1,
                        padding=0,
                        norm_type=norm_type,
                        data_format=data_format,
                        name=name)
                self.routes.add_module(name, route)
                self.routes_names.append(name)
PPYOLO Tiny FPN layer
Args:
in_channels (list): input channels for fpn
detection_block_channels (list): channels in fpn
norm_type (str): batch norm type, default bn
data_format (str): data format, NCHW or NHWC
kwargs: extra key-value pairs, such as parameter of DropBlock and spp
ptstructure/layout/ptppyolov2/ppyolov2_yolo_fpn.py