1. 程式人生 > >使用YOLO訓練自己的資料樣本經驗總結

使用YOLO訓練自己的資料樣本經驗總結

YOLO近一年多新出的一種object detection的方法,關於目標檢測及YOLO的介紹可參見:基於深度學習的目標檢測研究進展CVPR2016目標檢測之識別效率篇:YOLO, G-CNN, Loc-NetRCNN學習筆記(6):You Only Look Once(YOLO):Unified, Real-Time Object Detection
1. 好,現在我們使用yolo一般是想訓練自己的資料集然後識別自己想要detect的object,因為YOLO程式本身是以VOC2012 dataset為樣本來訓練並識別的,詳見官網YOLO: Real-Time Object Detection


2. 關於自己訓練這塊,官網沒有做太多說明,這裡有個不錯的教程: Start Training YOLO with Our Own Data 。上邊有一個比較小的資料樣本,而且都標註好了,方便測試。這裡提一下如果自己標註並轉換到規範格式的話,注意convert.py本身是不完善的,每標記一類object都需要修改部分程式碼,尤其類別一定要記的更改,也可參考 yolo的訓練和測試
3. 具體操作過程中我本來用的guanghan fork的github程式碼,然後一直是Nan 的問題。最後掉頭使用了官方的github庫,一次執行成功(現在還在執行,哈哈)。所以還是建議用官方的原始碼吧,畢竟也在不斷update,guanghan的應該是不怎麼更新了,不過也有必要下下來試一試。
4. 出現NaN
問題期間一直在那兒除錯(發現自己在除錯時還是偏愛printf,哈哈,技術拙略吧),也算是對原始碼更熟悉了一點。原始碼從yolo.c看起,然後是network.cdata.h 啥的,可以使用grep 'str_tofind' -nr . 在當前資料夾中遞迴查詢字元出現的位置。還有就是有問題儘量先從官方資料裡找,readme檔案中有連結其google group 。我就是順著這裡看了一遍最後還是沒有找到解決方法,就從新安裝了darknet進行嘗試了。
5. 其他問題,比如我這裡比較悲催,沒有配置GPU的大電腦,只有一塊nvidia的TX1板。記憶體比較小,很容易崩,這一點就需要不斷調整batch和subdivisions了,不囉嗦了。另外也經常會用到sudo sysctl -w vm/drop_caches=3
釋放記憶體, free -m 檢視記憶體使用情況, ~/tegrastats 檢視硬體使用情況等命令。
6. 現在還只是處於訓練狀態,後面應該還會遇到其他問題,再補充。
這裡寫圖片描述
如圖訓練過程中,引數IOU代表預測目標位置的準確性,越接近1越好;每個batch之後會輸出loss和avg loss,其值越小越好。