天天看點

關于Yet-Another-EfficientDet-Pytorch 的輸出,loss分析

連結: https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch.

features, regressions, classifications, anchors = model(imgs)
           

第一個輸出features,

代入第二,三,四個輸出相關的函數中,相當于第二階網絡,

得到第二,三,四個輸出

regressions= self.regressor(features)
classifications= self.classifer(features)
anchors = self.anchors (imgs)
           

一.

其中features沒有用在loss 函數裡,同時features是efficientdet骨幹網絡(主網絡)輸出的feature

但features合并了3個level層的feature

二.

regressions 是features 作為輸入的一個網絡(第二階網絡)的輸出,相當于做卷積運算

(每層都輸出 [x,y,height,width],3層合并),

shape (batch_size, 10000+ ,4)

三.

classification 是features 作為輸入的一個網絡(第二階網絡)的輸出,相當于做卷積運算

(每層都輸出 [one-hot] 類别的矩陣,3層合并)

shape (batch_size, 10000+ ,num_class)

bce = -(targets * torch.log(classification) + (1.0 - targets) * torch.log(1.0 - classification))
cls_loss = focal_weight * bce
           

分類損失,用的是binary-cross-entropy loss,并且前置系數(focalloss)

計算過程(個人觀點):

1.如80分類,每一類:是與不是的機率求log,并于target系數相乘(target系數隻有0,1兩種情況),

2.得到一個長度80的輸出,和focal_weight 系數相乘(focal_weight可檢視focalloss相關講解,論文。我的了解是,不同類别根據識别的難易程度,設定不同權重)

3.最終的長度80的輸出,求均值或求和,得到分類損失

四.

anchors 用于 和target的标注的聯合計算,進行自适應變換,

變換成對應regressions 的尺寸大小(對應3個level)的 size,

好跟regressions 計算求loss(focalloss。。。帶系數的cross entropy loss),得到邊框回歸損失

shape (batch_size, 10000+ ,4)

繼續閱讀