Python影像辨識筆記(十五):訓練YOLOv4的過程中遇到的問題

Yanwei Liu
3 min readJun 10, 2020

1.為什麼自己的 dataset,所訓練出來的 mAP比官方高?

可能用到的是COCO的YOLOv4 Pre-trained weight;而不是paper中所採用的csdarknet53-omega.conv.105

2020/06/10才發現:
原來5/26首次訓練、6/2第二次訓練的的yolov4.conv137是已訓練好的YOLOv4 Model針對COCO的pre-trained model。
官方是從無到有建立YOLOv4 Model是用csdarknet53-omega.conv.105(ImageNet的pre-trained model)https://github.com/AlexeyAB/darknet/issues/58042020/06/11更新:
把val set當成test set在評估,造成mAP比官方高的問題

2. learning rate問題

loss、IoU……等參數出現NaN的狀況

最終model的avg loss會介於0.05(簡單少量資料集)至3.0(大資料量、不易訓練的資料集)

learning rate太大很容易Nan;太小的話學習又太慢。目前測試下來發現learning rate盡量不要用預設的數值,要自己去測試,找出一個適合自己GPU設備的數字出來。(若用4顆GPU,learning rate為0.01時,實際learning rate還要把0.01再除以4)目前還沒找到最適合的learning rateHow to Configure the Learning Rate When Training Deep Learning Neural NetworksIf you get a Nan, then for some datasets better to decrease learning rate, for 4 GPUs set learning_rate = 0,00065 (i.e. learning_rate = 0.00261 / GPUs). In this case also increase 4x times burn_in = in your cfg-file. I.e. use burn_in = 4000 instead of 1000.

3. 關於 cfg中的 steps、scales說明

steps=100, 25000, 35000      #學習率變化時的反覆運算次數
scales=10,.1,.1 #學習率變化的比率

在0-100次iteration期間learning rate為預設值0.001

在100-25k次iteration期間learning rate為預設的10倍,0.01
在25k-35k次iteration期間learning rate為當前值的0.1倍,0.001

在35k到max_batches期間learning rate為當前值的0.1倍,0.0001。

4.搞清楚mAP和AP的單位差別

要注意mAP是AP_50不是一般AP以官方Model為例(416x416)
62.8% mAP@0.5 (41.2% AP@0.5:0.95)

5.Training set和Validation set有沒有可能重複

應該不太可能,在cfg/coco.data中,train和valid路徑很明顯是不同的檔案,不同檔案中的內容,也不應該是重複的

6.搞清楚Training set、Validation set、Test set的差別

Training set只用來「訓練
Validation set用來更新訓練時的「超參數(hyperparameters)
Test set用來「評估」訓練好的模型的mAP

--

--