最近有人問起在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 生成的,具體代碼見:點擊打開連接
優化
在分析分塊輸出以前,咱們得了解一下IOU(Intersection over Union,也被稱爲交併集之比:點擊打開連接),這樣就能理解爲何分塊輸出中的參數是一些重要且必需要輸出的參數了。.net
能夠看到,IOU(交集比並集)是一個衡量咱們的模型檢測特定的目標好壞的重要指標。100%表示咱們擁有了一個完美的檢測,即咱們的矩形框跟目標完美重合。很明顯,咱們須要優化這個參數。3d
迴歸正題,咱們來分析一下這些用來描述訓練圖集中的一個批次的訓練結果的輸出。那些想本身深刻源代碼驗證我所說的內容的同窗注意了,這段代碼:點擊打開連接 執行了如下的輸出:對象
在這篇短文裏,咱們回顧了一下YOLOv2在終端輸出的不一樣的參數的含義,這些參數也在告訴咱們YOLOv2的訓練過程是怎樣進行的。這個能在必定程度上解答你們關於YOLOv2的訓練輸出的大部分問題,但請記住,對YOLOv2的探索決不該該到此爲止。blog
跟以往同樣,歡迎你們在評論區留言,進一步討論關於YOLOv2的相關問題,我也會不斷優化改進這篇文章,因此,別忘了留言評論哦!
原英文地址: https://timebutt.github.io/static/understanding-yolov2-training-output/