###### tags: `yolov5 Doc` # 2. 官方訓練建議 - [Tips for Best Training Results](https://docs.ultralytics.com/tutorials/training-tips-best-results/) --- ## Dataset - 圖片數量 : 每個類別的圖片 > 1500 張 - 實例數量 : 每個類別"實例"希望 > 10000 <font color='blue'>(實例-指的是 label 的物件數,ex 類別車子的物件數)</font> - 圖片的多樣性 : 圖片可有多樣項 ex : 不同角度、時間、天氣、季節... - Label 的一致性 : 圖片中所有"實例"必須要被 labeled 到 - Label 的準確性 : bounding box 必須準確 label 在實例上 - Label 的驗證 : 可以查看 runs/train/train_batch*.jpg 來驗證 label 有無問題 - Baclground Images : 推薦要有 0%-10% 的無"實例"圖片,可以減少 FP <br> --- ## Model Selection ![](https://i.imgur.com/zo9pkeJ.png) ### (1).Model 選擇 - Yolov5x 通常會比其他模型結果好,但運算量大 - 行動裝置部署 : 建議使用 Yolov5s/m - 雲端部屬 : 建議使用 Yolob5l/x [詳細比較](https://github.com/ultralytics/yolov5#pretrained-checkpoints) ### (2). Pretrain Weight - 推薦中小型的資料集可以使用 Pretrain Data ``` python train.py --data custom.yaml --weights yolov5s.pt yolov5m.pt yolov5l.pt yolov5x.pt *custom_pretrained.pt ``` ### (3). 不使用 Pretrain Data - 推薦大型資料集直接隨機初始化 Weight ``` python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml yolov5m.yaml yolov5l.yaml yolov5x.yaml ``` <br> --- ## Training Setting - **Epochs 設定** : 通常先從 300 次開始訓練,如果 overfitting 就減少 Epochs, 反之增加 Epochs - **圖片大小設定** : 如果圖片中有一些小物件,圖片解析度越高越好 如果有很多小物件,或許可以另外設定資料集 - **Batch Size** : 越大越好,盡量做到硬體極限,因為太小的 Batch 會造成很差的 Batch Normalization 效果 - **Hyperparameters** : 可以先使用預設的 `hyp.scratch-low.yaml`,雖然可以提升預測效果,但會減慢訓練速度,也可以使用 evolve 自動優化 hyperparameters [Evolve Tutoral](https://docs.ultralytics.com/tutorials/hyperparameter-evolution/) [Evolve Tutoral ( github ) ](https://github.com/ultralytics/yolov5/issues/607) <br> --- ## Multi-GPU Training [Multi-GPU Training](https://docs.ultralytics.com/tutorials/multi-gpu-training/) 多 GPU 訓練 1. `--device 0,1` : 不建議,速度會很慢 2. ``` python -m torch.distributed.run --nproc_per_node 2 train.py ... --device 0,1 ``` batch 會被分開一半到各自 GPU 計算 (64->32) `--nproc_per_node 2` : 代表 GPU 數量 (這邊為 2) <br> --- ## Hyperparameter Evolution 參數自動優化 [Hyperparameter Evolution](https://docs.ultralytics.com/tutorials/hyperparameter-evolution/) 會利用 GA (基因演算法) 找出最好的訓練參數 ( 包括圖片的變形 ) ``` train.py --evolve 300 --hyp data/hyps/hyp.scratch-high.yaml ``` 如果沒設定初始的 hypeparameter, 會自動使用 `'data/hyps/hyp.scratch-low.yaml'` ! <font color=red>越好的初始參數,會的到越好的結果</font> ``` python train.py \ --workers 0 \ --device 0 \ --batch-size 16 \ --data data/drone.yaml \ --img 1080 1080 \ --cfg cfg/training/yolov7x.yaml \ --weights '' \ --hyp data/hyp.scratch.p5.yaml ``` ``` python train.py --workers 0 --device 0 --batch-size 16 --data data/drone.yaml --img 1080 1080 --cfg cfg/training/yolov7x.yaml --weights '' --hyp data/hyp.scratch.p5.yaml ```