--- title: 'YOLOv8設定教學' tags: 'YOLOv8,Anaconda,Python' # 建議加上標籤,方便分類搜尋 description: '這是關於YOLOv8的設定教學' --- # YOLOv8 設定教學 本篇教學將引導你完成 YOLOv8 的環境部署與模型訓練。 使用 `Anaconda` + `VS Code` 來執行YOLO程式。 **請注意:** 1. 必須先安裝 `CUDA` 、 `cuDNN` 與 `pytorch` ,才能使用GPU加速。 2. 必須先安裝 `python`。 --- ## 1. YOLOv8 環境與訓練集資料準備 ### 1.1 下載 YOLOv8 訓練主程式 * 前往Ultralytics在GitHub上的Release頁面,下載YOLOv8壓縮檔。 **連結:** [https://github.com/ultralytics/ultralytics/releases/tag/v8.3.158](https://github.com/ultralytics/ultralytics/releases/tag/v8.3.158) ![Image of Ultralytics GitHub Release 頁面](https://hackmd.io/_uploads/rkimRrU4lx.png) * 將下載的壓縮檔解壓縮後,會得到一個名為 `ultralytics-8.3.158` 的資料夾。請將此資料夾移動到方便管理的位置 (如:`D:\YOLO_Projects\ultralytics-8.3.158`)。 * 啟動**Anaconda Navigator**應用程式,切換到另一個虛擬環境 (如果沒有,建議創建一個)。 ![Image of Anaconda 環境介面](https://hackmd.io/_uploads/S1t49PUNee.png) * 在該虛擬環境中,啟動 **VS Code**。 ![Image of VS Code 啟動畫面](https://hackmd.io/_uploads/BJzFFDLVex.png) * 在VS Code中,點選「**檔案 (File)**」>「**開啟資料夾 (Open Folder)**」,選擇 `ultralytics-8.3.158` 資料夾。 ![Image of 在 VS Code 中開啟專案資料夾](https://hackmd.io/_uploads/rJfHmdINxx.png) --- ### 1.2 準備訓練資料集 * 到網路上找公開的資料集並下載 此篇以FishEye8k作為範例: https://github.com/MoyoG/FishEye8K * 下載Train & Test資料: https://scidm.nchc.org.tw/en/dataset/fisheye8k![image](https://hackmd.io/_uploads/B1Yi1KI4gg.png) --- ### 1.3 建立資料集結構 * **在 YOLOv8 專案中建立資料集目錄:** 1. 進入你 `ultralytics-8.3.158` 的主資料夾。 2. 在此資料夾內,創建一個新的子資料夾,命名為 `datasets`,裡面再創建 `FishEye8k` (如:`ultralytics-8.3.158/datasets/FishEye8k/`),這是存放所有訓練資料的根目錄。 4. 進入剛新建的資料集根目錄(`FishEye8k/`),然後在其中建立兩個主要子資料夾:`images` (用於存放圖片) 和 `labels` (用於存放對應的標註檔案)。 5. 在 `images` 和 `labels` 這兩個資料夾內部,請分別再創建 `train` (訓練集)、`val` (驗證集) 和 `test` (測試集) 三個子資料夾。資料夾結構應該如下圖所示: ![Image of FishEye8k 資料集最終資料夾結構](https://hackmd.io/_uploads/BkV3F_I4gl.png) 5. 之後回到 `ultralytics-8.3.158` 主資料夾,創建一個名為 `runs` 資料夾,然後在 `runs` 資料夾裡面再創建名為 `detect` 資料夾。用來存放YOLO訓練、測試完後所產生的檔案。![image](https://hackmd.io/_uploads/Hynv3q5Vex.png) --- ### 1.4 放入資料集檔案 * **將下載的 FishEye8k 資料放入對應目錄:** 打開剛下載的 FishEye8k 資料集壓縮包。會發現其中包含 `train` 和 `test` 兩個主要資料夾,每個又細分為 `images` 和 `labels`。請按照以下步驟,將這些檔案複製或移動到你剛建立的 YOLO 專案結構中: 1. 將下載的 `FishEye8k/train/images/` 資料夾內的所有圖片,放入: `ultralytics-8.3.158/FishEye8k/images/train/` 2. 將下載的 `FishEye8k/train/labels/` 資料夾內的所有標註檔案,放入: `ultralytics-8.3.158/FishEye8k/labels/train/` 3. 將下載的 `FishEye8k/test/images/` 資料夾內的所有圖片,放入: `ultralytics-8.3.158/FishEye8k/images/test/` 4. 將下載的 `FishEye8k/test/labels/` 資料夾內的所有標註檔案,放入: `ultralytics-8.3.158/FishEye8k/labels/test/` 5. 由於FishEye8k的壓縮檔內沒有 `val`,你必須手動把一部分的訓練影像和其對應的標註檔移動到 `val` 資料夾中。(備註: 影像及其對應的標註檔名稱必須一致) (一部分的 `ultralytics-8.3.158/FishEye8k/images/train/` 放入到 `FishEye8k/images/val/`;一部分的 `ultralytics-8.3.158/FishEye8k/labels/train/` 放入到 `FishEye8k/labels/val/` 。) `train` : `val` : `test` 的 `images`、`labels` 數量比例可分為 80% : 10% : 10% 。 --- ### 1.5 ultralytics 套件安裝 1. 到Anaconda的環境設定那邊,打開Terminal。![image](https://hackmd.io/_uploads/BkPCYocEeg.png) 2. 在Terminal上輸入 `pip install ultralytics` 去安裝套件。安裝完後應該會顯示![image](https://hackmd.io/_uploads/ryDQooqNel.png) --- ### 1.6 訓練程式碼準備 * 現在要開始撰寫一個 `yaml` 檔,也就是YOLO模型的資料集設定,好讓YOLO能夠讀取此文件。 1. 進入 `ultralytics-8.3.116\ultralytics\cfg\datasets`。 2. 在此 `datasets` 資料夾內,創建新的 `.yaml` 檔案,我取名為 `test.yaml`。 `test.yaml` 程式碼範例如下: ```javascript path: D:\imagetest\ultralytics-8.3.116\datasets #資料集的根目錄 train: FishEye8k/images/train # 訓練影像的路徑 val: FishEye8k/images/val # 驗證影像的路徑 test: FishEye8k/images/test # 測試影像的路徑 # Classes # 以下是模型將要識別的物件類別列表。 names: 0: Bus 1: Bike 2: Car 3: Pedestrian 4: Truck ``` 3. 之後到 `ultralytics-8.3.116\runs` 創建兩個 `.py` 檔案,一個名為`Train.py`;一個名為 `Test.py` ,這個是用來啟動YOLO訓練以及啟動YOLO測試的檔案。 * `Train.py` 程式碼範例如下: ```javascript from ultralytics import YOLO if __name__ == "__main__": model = YOLO('yolov8n.pt') results = model.train(data = r'D:\imagetest\ultralytics-8.3.116\ultralytics\cfg\datasets\test.yaml', epochs=100, imgsz=256, batch=8, device=0) ``` 這邊提醒,記得更改你的路徑,model.train(data = r '你的 `test.yaml` 路徑')。 `epochs` 是指訓練次數;`imgsz` 是指裁切影像解析度的大小;`batch` 是指一次訓練多少張影像; `device = 0` 是指用GPU來跑。 * `Test.py` 程式碼範例如下: ```javascript from ultralytics import YOLO def main(): model = YOLO(r'D:\imagetest\ultralytics-8.3.116\runs\detect\train8\weights\best.pt') results = model.val(data=r'D:\imagetest\ultralytics-8.3.116\ultralytics\cfg\datasets\test.yaml', split='test') print(results) if __name__ == '__main__': main() ``` 一樣請記得更改你的路徑。 4. 就可以執行了。跑完後可以在 `ultralytics-8.3.116\runs\detect` 看到訓練資料 `train`。![image](https://hackmd.io/_uploads/rycL3o5Nel.png) 5. 然後再利用訓練完的`best.pt` 權重去 `Test`。檔案一樣在`detect`,名為 `val`。 最後再次提醒,必須要先安裝 `CUDA` 、 `cuDNN` 與 `pytorch`,才能使用GPU加速。 ---