Пример #1
0
def yolo_body(inputs, num_anchors, num_classes):
    # 生成darknet53的主干模型
    # 52 52 256
    # 26 26 512
    # 13 13 1024
    feat1, feat2, feat3 = darknet_body(inputs)
    darknet = Model(inputs, feat3)

    # 第一个特征层
    # y1=(batch_size,13,13,3,25)
    x, y1 = make_last_layers(darknet.output, 512,
                             num_anchors * (num_classes + 5))

    x = compose(DarknetConv2D_BN_Leaky(256, (1, 1)), UpSampling2D(2))(x)
    x = Concatenate()([x, feat2])
    # 第二个特征层
    # y2=(batch_size,26,26,3,25)
    x, y2 = make_last_layers(x, 256, num_anchors * (num_classes + 5))

    x = compose(DarknetConv2D_BN_Leaky(128, (1, 1)), UpSampling2D(2))(x)
    x = Concatenate()([x, feat1])
    # 第三个特征层
    # y3=(batch_size,52,52,3,25)
    x, y3 = make_last_layers(x, 128, num_anchors * (num_classes + 5))

    return Model(inputs, [y1, y2, y3])
Пример #2
0
def yolo_body(inputs, num_anchors, num_classes):
    # 生成darknet53的主干模型
    feat1, feat2, feat3 = darknet_body(inputs)  #darknet53获得的特征层
    #52*52*256,26*26*512,13*13*1024
    darknet = Model(inputs, feat3)

    # 第一个特征层
    # y1=(batch_size,13,13,3,25)
    x, y1 = make_last_layers(darknet.output, 512,
                             num_anchors * (num_classes + 5))

    x = compose(
        DarknetConv2D_BN_Leaky(256, (1, 1)),  #一次卷积
        UpSampling2D(2))(x)  #上采样
    x = Concatenate()([x, feat2])  #与第二特征层输出结合

    # 第二个特征层
    # y2=(batch_size,26,26,3,25)
    x, y2 = make_last_layers(x, 256, num_anchors * (num_classes + 5))

    x = compose(DarknetConv2D_BN_Leaky(128, (1, 1)), UpSampling2D(2))(x)
    x = Concatenate()([x, feat1])

    # 第三个特征层
    # y3=(batch_size,52,52,3,25)
    x, y3 = make_last_layers(x, 128, num_anchors * (num_classes + 5))

    return Model(inputs, [y1, y2, y3])
Пример #3
0
def yolo_body(inputs, num_anchors, num_classes):

    # Darknet53
    feat1, feat2, feat3 = darknet_body(inputs)
    darknet = Model(inputs, feat3)

    # fist stage's outputs
    # y1 = (batch_size, 13, 13 , 3, 85)
    x, y1 = make_last_layers(darknet.output, 512,
                             num_anchors * (num_classes + 5))

    # feature fusion
    x = compose(DarknetConv2D_BN_Leaky(256, (1, 1)), UpSampling2D(2))(x)
    x = Concatenate()([x, feat2])

    # second stage's outputs
    # y2 = (batch_size, 26, 26, 3, 85)
    x, y2 = make_last_layers(x, 256, num_anchors * (num_classes + 5))

    x = compose(DarknetConv2D_BN_Leaky(128, (1, 1)), UpSampling2D(2))(x)
    x = Concatenate()([x, feat1])

    # third stage's outputs
    # y3 = (batch_size, 52, 52, 3, 85)
    x, y3 = make_last_layers(x, 128, num_anchors * (num_classes + 5))

    return Model(inputs, [y1, y2, y3])
Пример #4
0
def yolo_body(inputs, num_anchors, num_classes):
    # 生成darknet53的主干模型
    feat1, feat2, feat3 = darknet_body(inputs)
    darknet = Model(inputs, feat3)

    # 第一个特征层
    x, y1 = make_last_layers(darknet.output, 512,
                             num_anchors * (num_classes + 5))
    # 得到y1 = 【batch_size,13,13,255】
    x = compose(DarknetConv2D_BN_Leaky(256, (1, 1)), UpSampling2D(2))(x)
    # 得到x=【batch_size,26,26,256】,feat2 = 【batch_size,26,26,512】
    x = Concatenate()([x, feat2])
    # 得到x = 【batch_size,26,26,768】

    # 第二个特征层
    # y2=(batch_size,26,26,3,75)
    x, y2 = make_last_layers(x, 256, num_anchors * (num_classes + 5))
    # 得到y2 =【batch_size,26,26,255】,x = 【batch_size,26,26,256】
    x = compose(
        DarknetConv2D_BN_Leaky(128, (1, 1)),  # 得到x =【batch_size,26,26,128】
        UpSampling2D(2))(x)
    # 得到x =【batch_size,52,52,128】,feat1 = 【batch_size,52,52,256】
    x = Concatenate()([x, feat1])
    # 得到x =【batch_size,52,52,384】

    # 第三个特征层
    # y3=(batch_size,52,52,3,85)
    x, y3 = make_last_layers(x, 128, num_anchors * (num_classes + 5))
    # 得到y2 =【batch_size,52,52,255】,x = 【batch_size,52,52,128】

    return Model(inputs, [y1, y2, y3])
Пример #5
0
def yolo_body(inputs, num_anchors, num_classes):
    #---------------------------------------------------#   
    #   生成darknet53的主干模型
    #   获得三个有效特征层,他们的shape分别是:
    #   13,13,256
    #   26,26,512
    #   13,13,1024
    #---------------------------------------------------#
    feat1,feat2,feat3 = darknet_body(inputs)
    darknet = Model(inputs, feat3)

    #---------------------------------------------------#
    #   第一个特征层
    #   y1=(batch_size,13,13,3,85)
    #---------------------------------------------------#
    # 13,13,1024 -> 13,13,512 -> 13,13,1024 -> 13,13,512 -> 13,13,1024 -> 13,13,512
    x, y1 = make_last_layers(darknet.output, 512, num_anchors*(num_classes+5))

    # 13,13,512 -> 13,13,256 -> 26,26,256
    x = compose(
            DarknetConv2D_BN_Leaky(256, (1,1)),
            UpSampling2D(2))(x)
            
    # 26,26,256 + 26,26,512 -> 26,26,768
    x = Concatenate()([x,feat2])
    #---------------------------------------------------#
    #   第二个特征层
    #   y2=(batch_size,26,26,3,85)
    #---------------------------------------------------#
    # 26,26,768 -> 26,26,256 -> 26,26,512 -> 26,26,256 -> 26,26,512 -> 26,26,256
    x, y2 = make_last_layers(x, 256, num_anchors*(num_classes+5))

    # 26,26,256 -> 26,26,128 -> 52,52,128
    x = compose(
            DarknetConv2D_BN_Leaky(128, (1,1)),
            UpSampling2D(2))(x)
    # 52,52,128 + 52,52,256 -> 52,52,384
    x = Concatenate()([x,feat1])
    #---------------------------------------------------#
    #   第三个特征层
    #   y3=(batch_size,52,52,3,85)
    #---------------------------------------------------#
    # 52,52,384 -> 52,52,128 -> 52,52,256 -> 52,52,128 -> 52,52,256 -> 52,52,128
    x, y3 = make_last_layers(x, 128, num_anchors*(num_classes+5))

    return Model(inputs, [y1,y2,y3])
Пример #6
0
def yolo_body(inputs, num_anchors, num_classes):
    feat1, feat2, feat3 = darknet_body(inputs)
    darknet = Model(inputs, feat3)

    x, y1 = make_last_layers(darknet.output, 512,
                             num_anchors * (num_classes + 5))

    x = compose(DarknetConv2D_BN_Leaky(256, (1, 1)), UpSampling2D(2))(x)
    x = Concatenate()([x, feat2])

    x, y2 = make_last_layers(x, 256, num_anchors * (num_classes + 5))

    x = compose(DarknetConv2D_BN_Leaky(128, (1, 1)), UpSampling2D(2))(x)
    x = Concatenate()([x, feat1])

    x, y3 = make_last_layers(x, 128, num_anchors * (num_classes + 5))

    return Model(inputs, [y1, y2, y3])
def yolo_body(inputs, num_anchors, num_classes):
    """Gaussian YOLOv3
    Gaussian YOLOv3 can predict a bounding box distribution.
    We model the distribution by a gaussian distribution.
    p(y|x) = N(μ, δ)
    We can use δ to represent the uncertainty about bounding box.

    we change [dx, dy, dw, dh] to [μ(dx), μ(dy), μ(dw), μ(dh), δ(dx), δ(dy), δ(dw), δ(dh)]

    Args:
        inputs:      [batch, height, width, channels]
        num_anchors: usually be 3
        num_classes: number of your classes

    Returns:
        model

    """

    # Darknet53
    feat1, feat2, feat3 = darknet_body(inputs)
    darknet = Model(inputs, feat3)

    # fist stage's outputs
    # y1 = (batch_size, 13, 13 , 3, 89)
    x, y1 = make_last_layers(darknet.output, 512,
                             num_anchors * (num_classes + 9))

    # feature fusion
    x = compose(DarknetConv2D_BN_Leaky(256, (1, 1)), UpSampling2D(2))(x)
    x = Concatenate()([x, feat2])

    # second stage's outputs
    # y2 = (batch_size, 26, 26, 3, 89)
    x, y2 = make_last_layers(x, 256, num_anchors * (num_classes + 9))

    x = compose(DarknetConv2D_BN_Leaky(128, (1, 1)), UpSampling2D(2))(x)
    x = Concatenate()([x, feat1])

    # third stage's outputs
    # y3 = (batch_size, 52, 52, 3, 89)
    x, y3 = make_last_layers(x, 128, num_anchors * (num_classes + 9))

    return Model(inputs, [y1, y2, y3])
Пример #8
0
def yolo_body(inputs, num_anchors, num_classes):
    '''特征层->最后的输出

    Parameters
    ----------
        inputs: 
        num_anchors: 
        num_classes: 
    Returns
    -------
        Model(inputs, [y1,y2,y3]): 

    '''
    # 生成darknet53的主干模型
    feat1,feat2,feat3 = darknet_body(inputs)
    darknet = Model(inputs, feat3)

    # 第一个特征层
    # y1=(batch_size,13,13,3,25)
    # 
    x, y1 = make_last_layers(darknet.output, 512, num_anchors*(num_classes+5))

    x = compose(
            DarknetConv2D_BN_Leaky(256, (1,1)),
            # 执行2倍上采样
            UpSampling2D(2))(x)
    # 将x与darknet的第152层拼接,feat2为第152层输出
    x = Concatenate()([x,feat2])
    # 第二个特征层
    # y2=(batch_size,26,26,3,25)
    x, y2 = make_last_layers(x, 256, num_anchors*(num_classes+5))

    x = compose(
            DarknetConv2D_BN_Leaky(128, (1,1)),
            UpSampling2D(2))(x)
    x = Concatenate()([x,feat1])
    # 第三个特征层
    # y3=(batch_size,52,52,3,25)
    x, y3 = make_last_layers(x, 128, num_anchors*(num_classes+5))
    # 根据整个逻辑的输入和输出,构建模型。输入inputs依然保持不变,
    # 即(?, 416, 416, 3),而输出则转换为3个尺度的预测层,即[y1, y2, y3]
    return Model(inputs, [y1,y2,y3])