Yolov5 损失函数

Yolov5 损失函数,第1张

Yolov5 损失函数
  • 正负样本匹配策略
  • 正样本个数的增加策略
  • 损失函数

正负样本匹配策略
  • 本文的正负样本指的都是预测框而不是groundtruth框。正负样本是根据groundtruth框和anchor的匹配情况来确定的。

  • yolov3/4采用的都是基于IOU的匹配策略,而 Yolov5采用的是基于宽高比例的匹配策略。具体而言,对每一个groundtruth框,分别计算它与9种anchor的宽与宽的比值、高与高的比值,在宽比值、高比值这2个比值中,取最极端的一个比值,作为groundtruth框和anchor的比值,具体实现的伪代码为:max( anchor / groundtruth, groundtruth / anchor )。

  • 得到groundtruth框和anchor的比值后,若这个比值小于设定的比值阈值(anchor_t=4),那么这些anchor(可能有多个)就负责预测groundtruth框,这些anchor的预测框就被称为正样本,所有其它的预测框都是负样本,yolov5中没有忽略样本。

正样本个数的增加策略
  • Yolov5共有3个预测分支(三个检测头),共有9种不同大小的anchor,每个预测分支上有3种不同大小的anchor。
  • Yolov5算法通过以下3种方法大幅增加正样本个数:
  • (1) 跨预测分支预测:假设一个groundtruth框可以和2个甚至3个预测分支上的anchor匹配,则这2个或3个预测分支都可以预测该groundtruth框,即一个groundtruth框可以由多个预测分支来预测。
  • (2) 跨网格预测:假设一个groundtruth框落在了某个预测分支的某个网格内,则该网格有左、上、右、下4个邻域网格,根据groundtruth框的中心位置,将最近的2个邻域网格也作为预测网格,也即一个groundtruth框可以由3个网格来预测;
  • (3) 跨anchor预测:假设一个groundtruth框落在了某个预测分支的某个网格内,该网格具有3种不同大小anchor,若groundtruth可以和这3种anchor中的多种anchor匹配,则这些匹配的anchor都可以来预测该groundtruth框,即一个groundtruth框可以使用多种anchor来预测。
损失函数
  • 分为坐标损失(loss_ciou)、目标置信度损失(loss_obj)和分类损失(loss_cls)三部分。其中目标置信度损失和分类损失采用BCEWithLogitsLoss(带log的二值交叉熵损失),坐标损失采用CIoU损失。虽然代码里面损失的变量名字写的是giou,但是通过看代码可以发现,其损失的代码实现中写了GIOU/DIOU/CIOU三种方法,默认情况下使用的是CIOU损失。
  • 3个预测分支上的分类损失、坐标损失直接相加,得到总的分类损失和坐标损失,而3个预测分支上的目标置信度损失需要进行加权再相加,得到总的目标置信度损失,权中分别为[4.0, 1.0, 0.4],其中4.0是用在大特征图(预测小目标)上,所以,这里的加权,我认为是旨在提高小目标的检测精度。
  • 最后将分类损失、坐标损失、置信度损失直接相加,得到一个总损失(每张图像的平均总损失),再乘以batch的大小,得到用于更新梯度的损失。

参考:https://blog.csdn.net/chocv/article/details/117398749

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/722462.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存