faster rcnn訓練過程出現loss=nan解決辦法

在我訓練faster rcnn的過程中,使用VOC2007數據集end2end訓練方法,並沒有出現loss=nan的問題,出現了loss=nan說明模型發散,此時應該停止訓練,不然得到的模型也不能檢測出物體。

在我自己訓練自己的數據(Kitti數據集轉成voc數據集)的時候,出現一個RuntimeWarning: invalid value encountered in log targets_dw = np.log(gt_widths / ex_widths),然後就會出現loss=nan這種情況,網上很多說出現loss=nan改學習率就行,但是在這種自己做的數據集且出現這個警告的情況下,改學習率是沒用的,正確的做法是打開lib/database/pascal_voc.py文件,找到208行,將208行至211行每一行後面的-1刪除,如下所示:

x1 = float(bbox.find('xmin').text) 
y1 = float(bbox.find('ymin').text) 
x2 = float(bbox.find('xmax').text) 
y2 = float(bbox.find('ymax').text) 

原因是因爲我們製作的xml文件中有些框的座標是從左上角開始的,也就是(0,0)如果再減一就會出現log(-1)的情況。

改完之後就不會出現RuntimeWarning: invalid value encountered in log targets_dw = np.log(gt_widths / ex_widths)這個問題了,loss也不會出現等於nan了,如果還出現loss=nan,可以再試試調小學習率以及各個損失項的佔比重。

親測有效。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章