---
# System prepended metadata

title: YOLOv8設定教學
tags: [YOLOv8, Python, Anaconda]

---

---
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加速。
---