yolov3和yolov4损失函数

yolov3损失函数

loss公式

在这里插入图片描述
其中:
网格共有KxK个,每个网格产生M个候选框anchor,每个anchor经过网络会得到相应的bounding box,最终形成KxKxM个bounding box,如果box内noobj,则只计算该box的置信loss。

1.回归loss会乘以一个(2-wxh)的比例系数,用来加大对小box的损失。
其中box_loss_scale=(2-wxh);object_mask其实是个置信度,如果有目标则为1,没有目标为0;对于wh_loss采用回归方法;而对于xy_loss,上述公式采用回归方法,xi和yi hat其实是取了sigmoid之后的值,而在keras版本中,采用了交叉熵,因为raw_pred是经过model的卷积输出,如果采用sigmoid+方差,容易梯度消失,收敛较慢,所以采用二值交叉熵binary_crossentropy更容易计算。

2.置信度loss损失函数采用交叉熵,分为两部分:obj和noobj,其中noobj的loss还增加了权重系数lambda,这是为了减少noobj计算部分的贡献权重。

3.分类loss损失函数采用交叉熵,当第i个网格的第j个anchor box负责某一个真实目标时,那么这个anchor box所产生的bounding box才会去计算分类损失函数。

loss代码

box_loss_scale = 2 - y_true[l][...,2:3]*y_true[l][...,3:4]
# raw_true_xy = [13x(x_true-1),13x(y_true-1)] (< 0)
# raw_pred[..., 0:2] = [pred_x,pred_y]
# binary_crossentropy = [13x(x_true-1),13x(y_true-1)]xlog([pred_x,pred_y])+(1-[13x(x_true-1),13x(y_true-1)])xlog(1-[pred_x,pred_y])
xy_loss = object_mask * box_loss_scale * K.binary_crossentropy(raw_true_xy, raw_pred[...,0:2], from_logits=True)
wh_loss = object_mask * box_loss_scale * 0.5 * K.square(raw_true_wh-raw_pred[...,2:4])
confidence_loss = object_mask * K.binary_crossentropy(object_mask, raw_pred[...,4:5], from_logits=True)+ (1-object_mask) * K.binary_crossentropy(object_mask, raw_pred[...,4:5], from_logits=True) * ignore_mask
class_loss = object_mask * K.binary_crossentropy(true_class_probs, raw_pred[...,5:], from_logits=True)
xy_loss = K.sum(xy_loss) / mf
wh_loss = K.sum(wh_loss) / mf
confidence_loss = K.sum(confidence_loss) / mf
class_loss = K.sum(class_loss) / mf
loss += xy_loss + wh_loss + confidence_loss + class_loss

 
 

    yolov4损失函数

    loss公式

    与yolov3不同的是,location_loss使用了ciou。ciou在iou的基础上考虑了边框的重合度、中心距离和宽高比的尺度信息。
    ciou——loss函数如下:
    在这里插入图片描述

    loss代码

    box_loss_scale = 2 - y_true[l][...,2:3]*y_true[l][...,3:4]
    raw_true_box = y_true[l][...,0:4]
    ciou = box_ciou(pred_box, raw_true_box)
    ciou_loss = object_mask * box_loss_scale * (1 - ciou)
    ciou_loss = K.sum(ciou_loss) / mf
    location_loss = ciou_loss
    confidence_loss = object_mask * K.binary_crossentropy(object_mask, raw_pred[...,4:5], from_logits=True)+(1-object_mask) * K.binary_crossentropy(object_mask, raw_pred[...,4:5], from_logits=True) * ignore_mask
    class_loss = object_mask * K.binary_crossentropy(true_class_probs, raw_pred[...,5:], from_logits=True)
    confidence_loss = K.sum(confidence_loss) / mf
    class_loss = K.sum(class_loss) / mf
    loss += location_loss + confidence_loss + class_loss
    
    • 0
      点赞
    • 16
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值