def YOLOv4(input_layer, NUM_CLASS): route_1, route_2, conv = backbone.cspdarknet53(input_layer) route = conv conv = common.convolutional(conv, (1, 1, 512, 256)) conv = common.upsample(conv) route_2 = common.convolutional(route_2, (1, 1, 512, 256)) conv = tf.concat([route_2, conv], axis=-1) conv = common.convolutional(conv, (1, 1, 512, 256)) conv = common.convolutional(conv, (3, 3, 256, 512)) conv = common.convolutional(conv, (1, 1, 512, 256)) conv = common.convolutional(conv, (3, 3, 256, 512)) conv = common.convolutional(conv, (1, 1, 512, 256)) route_2 = conv conv = common.convolutional(conv, (1, 1, 256, 128)) conv = common.upsample(conv) route_1 = common.convolutional(route_1, (1, 1, 256, 128)) conv = tf.concat([route_1, conv], axis=-1) conv = common.convolutional(conv, (1, 1, 256, 128)) conv = common.convolutional(conv, (3, 3, 128, 256)) conv = common.convolutional(conv, (1, 1, 256, 128)) conv = common.convolutional(conv, (3, 3, 128, 256)) conv = common.convolutional(conv, (1, 1, 256, 128)) route_1 = conv conv = common.convolutional(conv, (3, 3, 128, 256)) conv_sbbox = common.convolutional(conv, (1, 1, 256, 3 * (NUM_CLASS + 5)), activate=False, bn=False) conv = common.convolutional(route_1, (3, 3, 128, 256), downsample=True) conv = tf.concat([conv, route_2], axis=-1) conv = common.convolutional(conv, (1, 1, 512, 256)) conv = common.convolutional(conv, (3, 3, 256, 512)) conv = common.convolutional(conv, (1, 1, 512, 256)) conv = common.convolutional(conv, (3, 3, 256, 512)) conv = common.convolutional(conv, (1, 1, 512, 256)) route_2 = conv conv = common.convolutional(conv, (3, 3, 256, 512)) conv_mbbox = common.convolutional(conv, (1, 1, 512, 3 * (NUM_CLASS + 5)), activate=False, bn=False) conv = common.convolutional(route_2, (3, 3, 256, 512), downsample=True) conv = tf.concat([conv, route], axis=-1) conv = common.convolutional(conv, (1, 1, 1024, 512)) conv = common.convolutional(conv, (3, 3, 512, 1024)) conv = common.convolutional(conv, (1, 1, 1024, 512)) conv = common.convolutional(conv, (3, 3, 512, 1024)) conv = common.convolutional(conv, (1, 1, 1024, 512)) conv = common.convolutional(conv, (3, 3, 512, 1024)) conv_lbbox = common.convolutional(conv, (1, 1, 1024, 3 * (NUM_CLASS + 5)), activate=False, bn=False) return [conv_sbbox, conv_mbbox, conv_lbbox]
def YOLOv4(input_layer, NUM_CLASS): print('[INFO][core.yolov4.YOLOv4] Initializing YOLOv4 architecture') route_1, route_2, conv = backbone.cspdarknet53(input_layer) print('[INFO][core.yolov4.YOLOv4] cspdarknet53 backbone initialized') route = conv conv = common.convolutional(conv, (1, 1, 512, 256)) conv = common.upsample(conv) route_2 = common.convolutional(route_2, (1, 1, 512, 256)) conv = tf.concat([route_2, conv], axis=-1) conv = common.convolutional(conv, (1, 1, 512, 256)) conv = common.convolutional(conv, (3, 3, 256, 512)) conv = common.convolutional(conv, (1, 1, 512, 256)) conv = common.convolutional(conv, (3, 3, 256, 512)) conv = common.convolutional(conv, (1, 1, 512, 256)) route_2 = conv conv = common.convolutional(conv, (1, 1, 256, 128)) conv = common.upsample(conv) route_1 = common.convolutional(route_1, (1, 1, 256, 128)) conv = tf.concat([route_1, conv], axis=-1) conv = common.convolutional(conv, (1, 1, 256, 128)) conv = common.convolutional(conv, (3, 3, 128, 256)) conv = common.convolutional(conv, (1, 1, 256, 128)) conv = common.convolutional(conv, (3, 3, 128, 256)) conv = common.convolutional(conv, (1, 1, 256, 128)) route_1 = conv conv = common.convolutional(conv, (3, 3, 128, 256)) conv_sbbox = common.convolutional(conv, (1, 1, 256, 3 * (NUM_CLASS + 5)), activate=False, bn=False) print(f'[DEBUG][core.yolov4.YOLOv4] conv_ssbox : {conv_sbbox}') conv = common.convolutional(route_1, (3, 3, 128, 256), downsample=True) conv = tf.concat([conv, route_2], axis=-1) conv = common.convolutional(conv, (1, 1, 512, 256)) conv = common.convolutional(conv, (3, 3, 256, 512)) conv = common.convolutional(conv, (1, 1, 512, 256)) conv = common.convolutional(conv, (3, 3, 256, 512)) conv = common.convolutional(conv, (1, 1, 512, 256)) route_2 = conv conv = common.convolutional(conv, (3, 3, 256, 512)) conv_mbbox = common.convolutional(conv, (1, 1, 512, 3 * (NUM_CLASS + 5)), activate=False, bn=False) print(f'[DEBUG][core.yolov4.YOLOv4] conv_mbbox : {conv_mbbox}') conv = common.convolutional(route_2, (3, 3, 256, 512), downsample=True) conv = tf.concat([conv, route], axis=-1) conv = common.convolutional(conv, (1, 1, 1024, 512)) conv = common.convolutional(conv, (3, 3, 512, 1024)) conv = common.convolutional(conv, (1, 1, 1024, 512)) conv = common.convolutional(conv, (3, 3, 512, 1024)) conv = common.convolutional(conv, (1, 1, 1024, 512)) conv = common.convolutional(conv, (3, 3, 512, 1024)) conv_lbbox = common.convolutional(conv, (1, 1, 1024, 3 * (NUM_CLASS + 5)), activate=False, bn=False) print(f'[DEBUG][core.yolov4.YOLOv4] conv_lbbox : {conv_lbbox}') print(f'[INFO][core.yolov4.YOLOv4] YOLOv4 architecture initialized') return [conv_sbbox, conv_mbbox, conv_lbbox]