An Custom Dataset implement for yolov7. Dataset from AI CUP 2022秋季競賽,無人機飛行載具之智慧計數競賽。
主辦方提供的資料及內含:
- 圖片檔 (.jpg)。
- .txt 檔:紀錄 Bounding Box 與圖片類別的資訊。
各類別的邊界框的座標,格式為: 類別 (人、摩托車、車、貨車) , x, y, w, h,
- x, y : 代表該 Bounding boxes 的中心座標。
- w, h : 代表該 Bounding boxes 的寬高。
- boundingBox 座標原點為左上角。
- xmin,ymin(x1, y1) : boundingBox 的左上角的座標;xmax,ymax(x1, y1) : boundingBox 的右下角的座標。
- bw,bh : boundingBox 的寬與高。
- 歸一化 Bounding boxes 座標 : w,h是照片本身的寬與高。 歸一化公式
- flight.yaml : 訓練網路時需要的圖片路徑與類別名字。
- weights:使用/content/yolov7/last.pt(接續上次訓練的最後一個epoch的權重(last),或者上次訓練表現最好的權重檔(best),也可以使用yolo v7作者訓練好的權重)
- data:設定檔為flight.yaml(根據自己使用的資料集的類別與存放圖片的地址做更改)
- epochs:700
- batch-size:4
- img-size:416X416
- project:訓練完成的權重存放的地址
將訓練好的網路對測試資料做預測,並輸出每張圖片 Bounding Box 的標記檔。
- weights:訓練好的網路權重
- source:圖片路徑
- img-size:640*640
- project:輸出後的圖片與標記檔存放的位置
會輸出1.帶有 Bounding Box 標記好各類物件的圖片 2.每張圖片的 Bounding Box 的標記檔 - 將輸出的 Bounding Box 反歸一化回像素與座標
在比賽中準確率 43.5973%。
- 可能原因
- Epoch 數不足 : 因 batch size 過小,訓練圖片有1000張,需要多訓練幾個 epoch。
- Epoch 300 - 38.4635% / Epoch 400 - 40.4969% / Epoch 500 - 43.5973%
- 訓練時遇到的問題
- 內存不足:因為免費的colab有限制的使用量,如果在訓練網路時,參數設定的太大會直接無法訓練,
- 相關的參數:
-batch_size:原本為64,修改為4。
-img-size:原本為608X608,修改為416X416
-epochs:訓練回合數700,最好可以是classes*2000
也可以使用自己的anaconda進行訓練,但是很容易超出內存容量。
- 如何減少網路使用到的內存:
- 使用比較小的網路模型:yolov7-tiny.yaml,原本用的是yolov7.yaml
- 更改train.py的設定:在訓練的過程中,丟棄一些梯度下降時的參數,
dist.destroy_process_group()和torch.cuda.empty_cache()
- 後續可以增加準確率的方法:
- 增加epoch訓練次數
- 使用小的網路模型yolov7-tiny.yaml,試試看增加batch_size,會不會超出內存。
- Background FP:為指的是不屬於任何一個類別但被檢測為其中一個類別的背景對象。所以有很多不屬於car類別的被檢測為該類。
- Background FN:指的是檢測器錯過的Trash或Non-trash對象,並被視為其他一些背景對象。所以檢測器無法檢測出hov和person和mortocycle。
- 訓練使用的影像大小太小(只有416X416)造成無法辨識出太小的物體,例如:人、摩托車。