# Python YOLO 訓練操作說明 [toc] ## 注意事項 - matlab 製作出的 Label(您提供的部分)沒辦法直接透過 python 讀出內部資訊,需要使用 matlab 抓出資訊轉成 json ,後續利用我提供的 `label.py` 轉成 COCO 格式可以方便後續處理。 - YOLO 系列其實在論文本體都會應用不同的資料擴增方式,尤其是 v4 提出的 cutmix (可參考 [yolov4 資料擴增方式說明](https://blog.csdn.net/c2250645962/article/details/106193051)),此部分提供作參考看適不適合做為您的任務需求。 - 個人覺得醫學影像上利用擴增製造出來的特徵不太能確保完整性,以先前經驗而言,會有一定程度影響到原先的 x 光圖,建議日後還是以增加樣本為主,少用擴增,之前碩班相關課程利用擴增方法有被教授質疑過不少次。 ## 資料集製作 請參考 [資料集製作](https://hackmd.io/@joey3639570/BJBExa2a2) ## YOLOv4 ### 簡介 此部分使用 [bubbliiiing/yolov4-pytorch](https://github.com/bubbliiiing/yolov4-pytorch) 完成,由於 yolov4 官方程式碼是以 c/c++ 撰寫,雖然有較快速度及完整度,但使用及安裝上不太方便(若此部分有需求可以另外提出),此 git 為測試過後較為穩定的版本,其他 git 或多或少都有遇到 bug。 ### 安裝說明 #### Cuda, Cudnn 安裝 - Cuda 此處建議針對顯示卡型號挑選版本進行安裝,且以 pytorch 能匹配的版本進行安裝,這裡使用 [Cuda 11.7](https://developer.nvidia.com/cuda-11-7-1-download-archive) 進行安裝說明。 ![](https://hackmd.io/_uploads/HkWaW6Ka3.png) 請根據自己的 windows 版本選擇,安裝器則都可以,下載後則進行安裝就可以。 :::info 若想確保 Cuda 安裝成功,請開啟終端機或 anaconda prompt ,並且執行以下 ``` nvcc -V ``` 出現以下畫面表示安裝成功,建議執行完 Cuda 安裝程式後重新啟動電腦。 ![](https://hackmd.io/_uploads/HyGPf1sa2.png) ::: - Cudnn - 開啟 [Nvidia Cudnn 官方網站](https://developer.nvidia.com/cudnn) - 點擊如下圖 ![](https://hackmd.io/_uploads/SyqMmJs62.png) - 登入,沒有帳號則註冊 - 進入下載頁面後,選擇 11.x 版本之 Cuda ![](https://hackmd.io/_uploads/B1ai7ks62.png) - 選擇 windows 版本之安裝程式 ![](https://hackmd.io/_uploads/SyymNyjph.png) - 下載後,進行解壓縮 - 將資料夾內容複製到對應路徑 `C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7` ![](https://hackmd.io/_uploads/ryOrrkia3.png) #### Pytorch 安裝說明 此處開始建議使用 anaconda 建立虛擬環境: - 利用 anaconda prompt 開啟終端機 ![](https://hackmd.io/_uploads/SyufbAF62.png) - 進行環境建立: ``` conda create --name ultralytics python=3.8 ``` :::info `-- name` 的後面可以自行命名,此為虛擬環境的名稱 ::: - 切換到建立好的虛擬環境 ``` conda activate ultralytics ``` - 安裝 pytorch ``` pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117 ``` ### 操作說明 製作好的資料集已附在資料夾內部。 - 下載雲端內 yolov4-pytorch 資料夾並且解壓縮資料夾 - 開啟 anaconda prompt 並且移動到該資料夾 - 確保切換到了安裝好的虛擬環境 - 執行以下開始訓練 ``` python train.py ``` :::info 若執行中發現缺少套件,請直接利用 pip 安裝即可 (先確保有在虛擬環境中才行) ::: - 訓練結果及相關資料會存放在 `logs` 資料夾內 ### 參數介紹 這部分直接修改 `train.py` 的內容,重點有以下: - `pretrained` 及 `model_path` (105, 116 列) 是否使用主幹網路的預訓練權重,這裡使用的是主幹的權重,因此在模型建構的時候進行載入。 - 如果設定了`model_path`,則主幹的權值無需載入,pretrained的值無意義。 - 如果不設定`model_path`,`pretrained = True`,這時僅載入主幹開始訓練。 - 如果不設定`model_path`,`pretrained = False`,`Freeze_Train = False`,這時從0開始訓練,且沒有凍結主幹的過程。 - 118~136 列可以看到資料擴增相關設定,可以參考上面解說 - 如果有發生超出記憶體容量或是閃退,請修改 batch_size 相關參數(188, 199 列) - 若有修改到資料集部分,務必注意 `train_annotation_path` 及 `val_annotation_path` (272, 273 列) 指定的是否為正常路徑及正確檔案 ### 權重下載連結 - [CSPdarknet53 backbone 權重(訓練基底)](https://github.com/bubbliiiing/yolov4-pytorch/releases/download/v1.0/CSPdarknet53_backbone_weights.pth) - [VOC 資料集訓練後的 YOLOv4](https://github.com/bubbliiiing/yolov4-pytorch/releases/download/v1.0/yolo4_voc_weights.pth) - [COCO 資料集訓練後的 YOLOv4](https://github.com/bubbliiiing/yolov4-pytorch/releases/download/v1.0/yolo4_weights.pth) ## YOLOv5 ### 簡介 此部分使用 ultralytics/yolov5 完成,其建立於 pytorch 之上,並且提供相當方便的操作及修改就能完成所想要的實驗,且安裝方面穩定簡單。 ### 安裝說明 直接下載該雲端 yolov5 資料夾,資料集已附在內部。 - 切換到建立好的虛擬環境(要安裝好 Pytorch) ``` conda activate ultralytics ``` - 安裝 yolov5 官方套件 ``` pip install ultralytics ``` ### 操作說明 - 利用 anaconda prompt 開啟終端機 ![](https://hackmd.io/_uploads/SyufbAF62.png) - 移動到 yolov5 資料夾 - 確認以下範例指令可以執行,便可以執行訓練 ``` python train.py --data data.yaml --weights yolov5s.pt --img 640 --batch-size 2 ``` 執行畫面參考: ![](https://hackmd.io/_uploads/ryj4bAtan.png) :::info 若遇到下圖問題: ![](https://hackmd.io/_uploads/SkF3S6KT2.png) 請前往安裝 [Git](https://git-scm.com/download/win) 安裝後重開終端機即可使用。 ::: - 訓練結束後會存放結果及對應檔案在 `runs/detect/train號碼` #### 訓練指令參數說明 範例 1 - 使用訓練好的權重繼續訓練: ``` python train.py --data data.yaml --weights yolov5s.pt --img 640 ``` :::success 官方提供的預訓練(COCO)權重如下,官方有更多可以參考: ![](https://hackmd.io/_uploads/r1d_gRt63.png) 分別有不同速度,不同模型大小。 ::: 範例 2 - 全新訓練(不使用預訓練權重): ``` python train.py --data data.yaml --weights '' --cfg yolov5s.yaml --img 640 ``` - `--weights` 指定使用的權重,若指定為 `''` 即為不指定權重從頭訓練,必須指定 `--cfg` 再根據模型設定細節進行訓練。 - `--cfg`,模型設定細節檔案,若有指定 `--weights` 則不用指定 `--cfg` - `--data`,資料集設定,這裡只須設定為 `--data data.yaml`,已經有設定好了 - `--epochs` ,訓練總循環次數設定,若沒有被 `--patience` 的提前停止策略停止,則訓練到這個指定循環次數就停只 - `--patience` ,提前停止策略等待回數,可以指定為 0 就可以不使用提前停止,以設定為 100 為例,若 100 個訓練循環都沒有讓準度變高(Loss 下降),則停止訓練,此是避免 overfitting 所使用 - `--batch-size`,訓練一次讀入多少張圖片,此需要根據 GPU 記憶體調配,指定為 -1 可以自動安排 - `--imgsz`,訓練讀入的圖片大小,預設 640 - `--optimizer`,預設為 `SGD`,可以從 ['SGD', 'Adam', 'AdamW'] 挑選。 ## YOLOv8 ### 簡介 此部分使用 ultralytics/yolov8 完成,其建立於 pytorch 之上,並且提供相當方便的操作及修改就能完成所想要的實驗,且安裝方面穩定簡單。 ### 安裝說明 ### 操作說明 根據要訓練的模型大小寫一個新的 .py ,或是使用我先寫好的進行修改,雲端內部 yolov8。 於終端機輸入以下進行訓練: ``` python yolo_model_train.py ``` :::info 若有彈出找不到資料集的相關問題,請前往修改 `C:\Users\使用者名稱\AppData\Roaming\Ultralytics\settings.yaml` ![](https://hackmd.io/_uploads/H1HWA0tTn.png) 改成您解壓縮 YOLOv8 部分的資料夾中 datasets 的位置,就是有 train/valid/test 三個資料夾在的資料夾。 ::: ### 參數說明 同 YOLOv5 部分,但變成寫在 .py 檔案,如下位置。 ![](https://hackmd.io/_uploads/HkWe7AYTn.png)