pytorch----retinaface(三种损失使用的函数)
retinaface损失函数定义:
(1)L(cls)(面分类损失):
#计算交叉熵
loss_c = F.cross_entropy(conf_p, targets_weighted, reduction='sum')
1、交叉熵的公式:
其中P为真实值,Q为预测值。
2、计算交叉熵的步骤:
1)步骤说明:
①将predict_scores进行softmax运算,将运算结果记为pred_scores_soft;
②将pred_scores_soft进行log运算,将运算结果记为pred_scores_soft_log;
③将pred_scores_soft_log与真实值进行计算处理。
思路即:
scores→softmax→log→compute
(2)、L(box)(面盒回归损失):
loss_l = F.smooth_l1_loss(loc_p, loc_t, reduction='sum')#Smooth L1 损失
smooth L1 loss能从两个方面限制梯度:
当预测框与 ground truth 差别过大时,梯度值不至于过大;
当预测框与 ground truth 差别很小时,梯度值足够小。
求导:
(3)面部地标回归损失L(pts):
loss_landm = F.smooth_l1_loss(landm_p, landm_t, reduction='sum')#Smooth L1 损失
(4)稠密回归损失L(pixel):
代码中并没有写出。
简单介绍一下:
损耗平衡参数λ1-λ3分别设置为0.25、0.1和0.01,这意味着我们增加了监控信号中更好的箱位和标志位置的重要性。