2018年10月6日 星期六

訓練 YOLO v1 模型

準備好訓練 YOLO v1 模型的工作後,下一步是製作模型結構及設定。我們將會訓練 YOLO v1 模型,把在 darknet/cfg/yolo.cfg 複製一份,改名為 yolo-c3.cfg。當中「c3」的意思是「Classes 3」,即模型能偵測三款物件。


打開 yolo-c3.cfg,把 # Testing# Training 中的行數,在最頭加入井號變成註釋;把 # Training 下的 batch 設定為 64、subdivisions 設定為 8。如果在訓練期間出現記憶體不足,可以將 batch 值調大,或把 subdivisions 值調低再試試。


在檔案最尾的 [convolutional] 中,把 filters 設定為 40。數值來自公式:
(5 + 偵測物件類別數量) x 5 = (5 + 3) x 5 = 40
並且,把 [region] 下的 classes 設定為 3。之後,生成一個 darknet/cfg/yolo-c3.names 文字檔,裡面記載物件類別的名字。我的情況是:
EDO Pack
烏龍茶
可口可樂
接著,生成一個 darknet/cfg/yolo-c3.data,內容為:
classes = 3
train = train.txt  
valid = test.txt  
names = yolo-c3.names  
backup = backup/
主要是告知 YOLO 有三個偵測類別、訓練的素材在哪、驗證的素材在哪、類別名稱在哪、訓練時的比重放在哪。還有,我們需要 YOLO 預設的權重檔「darknet19_448.conv.23」,可以在這裡下載

最後,確定好所需的檔案都齊備:
darknet/darknet19_448.conv.23
darknet/test.txt
darknet/train.txt
darknet/cfg/yolo-c3.cfg
darknet/cfg/yolo-c3.data
darknet/cfg/yolo-c3.names
在 Terminal 執行:
./darknet detector train cfg/yolo-c3.data cfg/yolo-c3.cfg darknet19_448.conv.23
根據我的經驗,在安裝 darknet, darkflow, YOLO-Annotation-Tool-master,...等工具時都會出現不同的錯誤。有的要求 Python 2.7;有的要求 Python 3.6。有時要 Keras 1.2.2;有時又要低一點的版本;這都可以用 Virtual Environment 來解決。但遇著 CUDA 及 CUDNN 版本問題則比較頭痛。在今次訓練中,需要分別用到 CUDNN 8 及 CUDNN 9,兩者只能選一個,只能用到哪個版本就安裝哪個版本。訓練原本做 100 次迭代便完成,但我的情況卻沒完沒了。只好手動停止。在 darknet/backup/ 中能找到權重檔,加上本身 yolo-c3.cfg 結構檔便能拿來做檢測。

沒有留言: