YOLOv3訓練過程中出現過擬合現象的解決方法

龍嘯wyh發表於2020-10-21

遇到問題:用YOLO訓練自己的資料集,在訓練集圖片上,測試效果很好,換成測試集圖片或者其他圖片,測試效果極差。而且10000次就開始收斂了,然後又繼續訓練到50000次,這個過程Loss值一直穩定0.1左右,不再下降——經過查閱資料,最大可能性就是過擬合了。
(一)過擬合現象
有時我們發現,模型在訓練集上效果很好,但是在測試集上效果不好,這種現象稱為過擬合

(二)解決辦法
1.增加樣本資料量
2.資料增強,人為擴充套件資料量
3.正則化: 正則化之所以能夠降低過擬合的原因在於,正則化是結構風險最小化的一種策略實現。 給loss function加上正則化項,能使得新得到的優化目標函式h = f+normal,需要在f和normal中做一個權衡,如果還像原來只優化f的情況下,那可能得到一組解比較複雜,使得正則項normal比較大,那麼h就不是最優的,因此可以看出加正則項能讓解更加簡單,通過降低模型複雜度,得到更小的泛化誤差,降低過擬合程度。
4.Dropout: 在前向傳播時,某個神經元的啟用值以一定的概率p停止工作,隨機地刪除網路中的一般隱藏的神經元,這樣可以使模型泛化性更強,因為它不會太依賴某些區域性的特徵,從而解決過擬合問題 一般取值為0.3或0.5 。
5.early stopping 在訓練中計算模型在驗證集上的表現,當模型在驗證集上的表現開始下降的時候,停止訓練,這樣就能避免繼續訓練導致過擬合的問題 。

既然出現過擬合,嘗試用前幾次儲存下來的權重測試一下,不用最終的權重。是不是前面儲存的權重效果可能會好點呢?

驗證一下:發現測試效果並不好。
(三)經驗之談
不能檢測出自己的資料集,是指訓練集還是測試集,一般理解肯定是自己的測試集,那麼有兩種可能,一種是你的網路過擬合了,第二種是訓練集和測試集幾乎沒有關聯性。
假設1:用訓練集A訓練,之後檢測訓練集A中的資料,發現不能檢測。演算法完全沒有學習,甚至都沒有出現過擬合,可能是訓練資料不足、學習率過大等問題導致的。
假設2:用訓練集A訓練,之後檢測測試集B中的資料,發現不能檢測。可能性1:訓練集A和測試集B中的資料關聯性不強,YOLO沒能很好的將從訓練集A中的學習到的檢測能力擴充套件到測試集B上。可能性2:假設1中提到的問題。可能性3:需要檢測的目標在圖片中佔據區域較小,因為YOLO是將圖片分成13*13(應該是吧)個格子,每個格子進行預測的,每個格子對應預測影像中一定區域內是某個目標的可能性。當目標只佔據一個格子的很小區域時,預測的可信度不高,也就預測不出來。

相關文章