参考:https://mp.weixin.qq.com/s/ra2qpFSbSuuJPDj39A5MWA
源于GiantPandaCV ,作者BBuf
文章仅为学习笔记,感谢文章各位贡献者,侵删
交叉熵loss
M表示类别数,为one-hot向量(即元素只取0、1,若与样本类别相同则取1,否则取0)
缺点:若前景像素远小于背景像素,损失函数中y=0部分会占据主导,模型严重偏向背景
代码实现:
#二值交叉熵,input需要经过sigmoid处理
nn.BCELoss(F.sigmoid(input), target)
#多分类交叉熵
nn.CrossEntropyLoss(input, target)
带权交叉熵loss
添加权重参数,计算公式为,N表示总的像素数,Nc表示gt类别为c的像素个数,对于样本不均衡可以获得更好的效果
Focal Loss
retinanet引入focal loss解决难易样本不均衡的问题。一阶段目标检测器会产生10k数量级的候选框,但只有少数是正样本。计算分类时常用的交叉熵损失公式为:
为了解决政府样本不均衡的问题,利用加权的形式:
由于候选目标包含容易区分的和不易区分样本,由于易分样本占大多数(易分样本指置信度高的样本),尽管损失很低,但是仍然主导了损失韩式。易分样本对模型效果提升很少,应该主要关注难分样本——focal loss:
focal loss pytorch代码:
参考网址
dice loss
dice系数:
上述函数用来度量集合的相似度。分子2是由于分母重复计算并集的原因,s取值[0,1]。针对分割任务,X、Y指gt和预测的图像。还可以改写为:
dice loss 定义公式:
注意一般情况下使用dice loss会对反向传播不利,使得训练不稳定。一般用于样本极度不均衡的情况
原因说明:参考网址
IOU loss
定义:(1-jaccard系数)
与dice loss一样属于metric learning的衡量方式,一样存在训练过程不稳定的问题,在分割任务中不怎么使用
Tversky loss
dice loss实质上属于tversky loss的特殊形式。
Tversky系数:是dice系数和jaccard系数的广义系数
alpha和β均为0.5时为dice系数,为1时为jaccard系数。A-B为假阳性,B-A为假阴性
Generalized Dice loss
由于dice loss对小目标预测十分不利,一旦小目标有部分像素预测错误就可能引起dice系数巨大波动(分母),导致梯度变化大训练不稳定。又因为dice loss针对的是某一个特定类别的分割的损失,多个类别要用到多个dice loss。GDL就是对多个dice loss 进行加权整合。
BCE + Dice loss
适用于数据均衡的情况下,若数据不均衡,容易退化成dice loss
Focal loss + Dice loss
https://arxiv.org/pdf/1808.05238.pdf
Exponential Logarithmic loss
https://arxiv.org/abs/1809.00076
整合focal loss和dice loss。表达式:
其中
Lovasz-Softmax Loss
https://arxiv.org/pdf/1705.08790.pdf
iou loss的扩展