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
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值