1. 程式人生 > >YOLOv3使用darknet訓練部分問題記錄

YOLOv3使用darknet訓練部分問題記錄

1.cfg檔案裡的batch就是batch_size,subdivisions只是在視訊記憶體不足的情況下把batch分批放入訓練。      ?現在懷疑batch_size = batch/subdivisions。昨天跑的一個訓練如果batch = batch_size的話那大約有80個epoch,但還是明顯欠擬合,loss很高。所以還在疑惑???

2.epoch = max_batches/(images/bach)   ——  暫時理解應該是這樣?

3.max_batches = max_iterations

4.訓練的時候batch在小於1000次時每100次儲存模型,大於1000後每10000次儲存一次模型。可以通過修改/examples/detector.c中的train_detector函式來自己決定多少張圖儲存一次模型。

5.假設steps = 10000 , scale = .1 ,那意思就是迭代到10000次時學習率衰減10倍。如果調整max_baches的大小,需要同時調整steps,而scale可以自己決定修不修改。

6.訓練的時候若資料集小目標較少,106層會大概率輸出nan,這是資料集的問題。如果資料集沒有問題,可以通過調大batch或者調小learning_rate來解決。(yolo的訓練調參略煩)

7.github上暫時還沒有發現在pytorch框架下較好用的訓練程式碼,嘗試著跑了兩個,效果不好,所以還是使用darknet來進行訓練。

8.使用voc_label.py輸出的是絕對路徑。

9.訓練的時候用 ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 2>1 | tee person_train.txt 儲存訓練內容

10.由於資料集的問題沒有小目標,嘗試使用三個資料集一起訓練但大幅輸出nan,表示訓練很糟糕。所以在原有第一個資料集訓練最後儲存的模型的基礎上,進行後續訓練。也就是把預訓練權重換成自己的xxx.weights,訓練的輸出暫時看起來較為正常,等訓練完成了看結果好壞。(同時需要調整cfg檔案的max_batches,比如第一次訓練完儲存的是100000次,生成了final.weights,那麼接下去訓練就需要把cfg調大超過10w次,不然會直接儲存。)

後續補充,新手入門各種踩坑。。