YOLOV5中損失函數(shù)即代碼講解
YOLOV5中l(wèi)oss.py文件代碼講解:https://blog.csdn.net/weixin_42716570/article/details/116759811
yolov5中一共存在三種損失函數(shù):
分類損失cls_loss:計算錨框與對應(yīng)的標定分類是否正確
定位損失box_loss:預測框與標定框之間的誤差(CIoU)
置信度損失obj_loss:計算網(wǎng)絡(luò)的置信度
通過交叉熵損失函數(shù)與對數(shù)損失的結(jié)合來計算定位損失以及分類損失。文章來源:http://www.zghlxwxcb.cn/news/detail-436950.html
class BCEBlurWithLogitsLoss(nn.Module):#二元交叉熵損失函數(shù),blur 意為模糊 據(jù)下行原版注釋是減少了錯失標簽帶來的影響
# BCEwithLogitLoss() with reduced missing label effects.
def __init__(self, alpha=0.05):
super(BCEBlurWithLogitsLoss, self).__init__()
# 這里BCEWithLogitsLoss 是輸入的每一個元素帶入sigmoid函數(shù)之后 再同標簽計算BCE loss
self.loss_fcn = nn.BCEWithLogitsLoss(reduction='none') # must be nn.BCEWithLogitsLoss()
self.alpha = alpha#這個應(yīng)該算是一個模糊系數(shù)吧 默認為0.05
def forward(self, pred, true):
# 得到了預測值和標簽值的BCE loss 注:預測值是經(jīng)過sigmoid函數(shù)處理再計算BCE的
loss = self.loss_fcn(pred, true)
pred = torch.sigmoid(pred) # prob from logits # 將預測值進行sigmoid處理 數(shù)學意義為每一位對應(yīng)類別出現(xiàn)的概率
# 假定missing的標簽用一行0進行補齊,則相減之后missing的樣本概率不受影響,正常樣本樣本概率為絕對值較小的負數(shù)
dx = pred - true # reduce only missing label effects
# dx = (pred - true).abs() # reduce missing label and false label effects
"""
torch.exp()函數(shù)就是求e的多少次方 輸入tensor每一個元素經(jīng)過計算之后返回對應(yīng)的tensor
根據(jù)下式 對于正常的較大概率的樣本 dx對應(yīng)值為絕對值較小一個負數(shù) 假設(shè)為-0.12,則-1為-1.12除0.05 為-22.4,
-22.4 指數(shù)化之后為一個很小很小的正數(shù),1-該正數(shù)之后得到的值較大 再在loss中乘上之后影響微乎其微
而對于missing的樣本 dx對應(yīng)為一個稍大的正數(shù) 如0.3 減去1之后為-0.7 除以0.05 為 -14
-14相比-22.4值為指數(shù)級增大,因此對應(yīng)的alpha_factor相比正常樣本顯著減小 在loss中較小考慮
"""
# Q:有一個問題,為什么yolov5要對missing的樣本有這樣的容忍度,而不是選擇直接屏蔽掉對應(yīng)樣本呢?
alpha_factor = 1 - torch.exp((dx - 1) / (self.alpha + 1e-4))
loss *= alpha_factor
return loss.mean() # 這個mean的意義應(yīng)該為對一批batch中的每一個樣本得到的BCE loss求均值作為返回值
二分類交叉熵損失函數(shù)
之前的分類損失是各個訓練樣本交叉熵的直接求和,也就是各個樣本的權(quán)重是一樣的,計算公式如下:
因為是二分類,p表示預測樣本屬于1時的概率,y表示標簽,y的取值范圍為{+1,-1}
對于正樣本的預測,預測輸出越接近真實樣本標簽y=1, 損失函數(shù)L越??;預測輸出越接近0,L越大。
Focal Loss損失函數(shù)講解
focal loss,這個損失函數(shù)是在標準交叉熵損失基礎(chǔ)上修改得到的文章來源地址http://www.zghlxwxcb.cn/news/detail-436950.html
到了這里,關(guān)于YOLOV5中損失函數(shù)即代碼講解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!