Yolo v8的损失函数使用的是交叉熵损失函数。但是对于难分类的样本检测效果较差,如垃圾、垃圾桶。
Focal Loss 是一种用于解决类别不平衡问题的损失函数,因此尝试将其引入v8结构。
ps:原本v8的loss.py文件中自带了focal loss的函数,但是调用自带代码,报错。原因未知。因此,尝试重新修改Focal-loss部分的代码,并记录过程:
1、找到yolo/utils/loss.py
2、添加新的focal_loss的代码
class FocalLoss(nn.Module): def __init__(self, alpha=None, gamma=2, num_classes=80, size_average=True): """ focal_loss损失函数, -α(1-yi)**γ *ce_loss(xi,yi) 步骤详细的实现了 focal_loss损失函数. :param alpha: 阿尔法α,类别权重. 当α是列表时,为各类别权重,当α为常数时,类别权重为[α, 1-α, 1-α, ....],常用于 目标检测算法中抑制背景类 , retainnet中设置为0.25 :param gamma: 伽马γ,难易样本调节参数. retainnet中设置为2 :param num_classes: 类别数量 :param size_average: 损失计算方式,默认取均值 """ super(FocalLoss, self).__init__() self.size_average = size_average if alpha is None: self.alph