(轉)理解YOLOv2訓練過程當中輸出參數含義

最近有人問起在YOLOv2訓練過程當中輸出在終端的不一樣的參數分別表明什麼含義,如何去理解這些參數?本篇文章中我將嘗試着去回答這個有趣的問題。git

恰好如今我正在訓練一個YOLOv2模型,拿這個真實的例子來討論再合適不過了,下邊是我訓練中使用的 .cfg 文件(你能夠在cfg文件夾下找到它):github



如下是訓練過程當中終端輸出的一個截圖:c#

以上截圖顯示了全部訓練圖片的一個批次(batch),批次大小的劃分根據咱們在 .cfg 文件中設置的subdivisions參數。在我使用的 .cfg 文件中 batch = 64 ,subdivision = 8,因此在訓練輸出中,訓練迭代包含了8組,每組又包含了8張圖片,跟設定的batch和subdivision的值一致。網絡

(注: 也就是說每輪迭代會從全部訓練集裏隨機抽取 batch = 64 個樣本參與訓練,全部這些 batch 個樣本又被均分爲 subdivision = 8 次送入網絡參與訓練,以減輕內存佔用的壓力)學習

批輸出

針對上圖中最後一行中的信息,咱們來一步一步的分析。以下的輸出是由 detector.c 生成的,具體代碼見:點擊打開連接

優化

  • 9798: 指示當前訓練的迭代次數
  • 0.370096: 是整體的Loss(損失)
  • 0.451929 avg: 是平均Loss,這個數值應該越低越好,通常來講,一旦這個數值低於0.060730 avg就能夠終止訓練了。
  • 0.001000 rate: 表明當前的學習率,是在.cfg文件中定義的。
  • 3.300000 seconds: 表示當前批次訓練花費的總時間。
  • 627072 images: 這一行最後的這個數值是9798*64的大小,表示到目前爲止,參與訓練的圖片的總量。

分塊輸出

在分析分塊輸出以前,咱們得了解一下IOU(Intersection over Union,也被稱爲交併集之比:點擊打開連接),這樣就能理解爲何分塊輸出中的參數是一些重要且必需要輸出的參數了。.net

 



能夠看到,IOU(交集比並集)是一個衡量咱們的模型檢測特定的目標好壞的重要指標。100%表示咱們擁有了一個完美的檢測,即咱們的矩形框跟目標完美重合。很明顯,咱們須要優化這個參數。3d

迴歸正題,咱們來分析一下這些用來描述訓練圖集中的一個批次的訓練結果的輸出。那些想本身深刻源代碼驗證我所說的內容的同窗注意了,這段代碼:點擊打開連接  執行了如下的輸出:對象

  • Region Avg IOU: 0.326577: 表示在當前subdivision內的圖片的平均IOU,表明預測的矩形框和真實目標的交集與並集之比,這裏是32.66%,這個模型須要進一步的訓練。
  • Class: 0.742537: 標註物體分類的正確率,指望該值趨近於1。
  • Obj: 0.033966: 越接近1越好。
  • No Obj: 0.000793: 指望該值愈來愈小,但不爲零。
  • Avg Recall: 0.12500: 是在recall/count中定義的,是當前模型在全部subdivision圖片中檢測出的正樣本與實際的正樣本的比值。在本例中,只有八分之一的正樣本被正確的檢測到。
  • count: 8:count後的值是全部的當前subdivision圖片(本例中一共8張)中包含正樣本的圖片的數量。在輸出log中的其餘行中,能夠看到其餘subdivision也有的只含有6或7個正樣本,說明在subdivision中含有不含檢測對象的圖片。

總結

在這篇短文裏,咱們回顧了一下YOLOv2在終端輸出的不一樣的參數的含義,這些參數也在告訴咱們YOLOv2的訓練過程是怎樣進行的。這個能在必定程度上解答你們關於YOLOv2的訓練輸出的大部分問題,但請記住,對YOLOv2的探索決不該該到此爲止。blog

跟以往同樣,歡迎你們在評論區留言,進一步討論關於YOLOv2的相關問題,我也會不斷優化改進這篇文章,因此,別忘了留言評論哦!

原英文地址: https://timebutt.github.io/static/understanding-yolov2-training-output/

轉自:https://blog.csdn.net/dcrmg/article/details/78565440

相關文章
相關標籤/搜索