---
# System prepended metadata

title: YOLOv11 Segmentation
tags: [yolo, 十月份]

---

# YOLOv11 Segmentation
###### tags: `yolo` `十月份`

## 摘要
介紹 YOLOv11（You Only Look Once version 11）在 Windows 環境下的完整安裝與操作流程，目標為建立一個可進行 實例分割（Instance Segmentation） 的自訂資料集模型。
首先，透過 Anaconda 建立獨立的 Python 3.11 環境，確保套件相容性與環境穩定性。接著安裝 PyTorch 與 Ultralytics YOLO，其中重點為確認 CUDA 支援，以使用 GPU 加速訓練。若遇到 CUDA 驅動版本不符，需手動安裝與環境匹配的 PyTorch 版本。
資料標註部分使用 Label Studio，設定為「Semantic Segmentation with Polygons」，以蝴蝶影像資料集為例，進行自訂標註並生成相對應的 dataset.yaml 檔案。訓練過程中透過 Ultralytics API 或命令列指令進行，並可視化結果。最後，模型可輸出為 ONNX 格式，便於部署與後續應用。

整體流程涵蓋從環境建置、資料集準備、訓練、預測到模型導出的全階段操作，實作中亦展示影像與影片的預測結果，說明 YOLOv11 在即時分割與物件偵測上的高效與靈活性。

## Anaconda 新建環境
```cmd=
conda create -n yolov11_seg python=3.11 -y
conda activate yolov11_seg
````

## 安裝 Pytorch
Pytorch 基於Torch 函式庫所建立的Open Source Machine Learning Framework
{%preview https://github.com/ultralytics/ultralytics %}
```bash=
pip install ultralytics
```
檢查 pytorch 的版本：
```python=
import torch
torch.cuda.is_available()
exit()
````
{%preview https://pytorch.org/get-started/locally/ %}
```bash=
pip3 install --upgrade torch torchvision --index-url https://download.pytorch.org/whl/cu120
```
再次檢查 pytorch 的版本，如果還是遇到 torch 找不到 GPU (`torch.cuda.is_available() → False`)：
1. 先移除舊版本
```bash=
pip uninstall torch torchvision -y
```
2. 安裝 PyTorch 2.8.0 (CUDA 11.8 相容)
```bash=
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
```
3. 驗證：
```python=
import torch
print(torch.__version__)       # 2.8.0
print(torch.version.cuda)      # 11.8
print(torch.cuda.is_available())  
print(torch.cuda.get_device_name(0))
```

## 安裝 label-studio
{%preview https://labelstud.io/ %}
使用 label-studio 去標註自訂實例分割資料集（custom instance segmentation dataset）
1. Install Label Studio:
```bash=
pip install label-studio
```
2. Start Label Studio
```bash=
label-studio start
```
3. Open Label Studio at http://localhost:8080
4. 註冊帳號
5. 點選 **Create** 創建專案、上傳檔案、開始標註
6. 在 labeling setup 點選 **Semantic Segmentation with Polygons** 並刪除原本的 Labels 後加入新的 label names：butterfly
> 如果要標註的物件太多，可以用顏色去區分。

![image](https://hackmd.io/_uploads/rJT-v1ahxx.png)
7. 回到首頁開始標註： **Lable All Tasks**
![image](https://hackmd.io/_uploads/HJ3HFJT2ee.png)

### 資料集準備
公開的蝴蝶照片資料集：
https://www.kaggle.com/datasets/veeralakrishna/butterfly-dataset
線上有已標註完成的蝴蝶照片資料集：
https://github.com/ayoolaolafenwa/PixelLib/releases/download/1.0.0/Nature.zip

## 準備 yaml 檔案
```yaml=
train: C:\Users\user\Documents\yolov11_segmentation\train
val: C:\Users\user\Documents\yolov11_segmentation\val

# class 數量
nc: 1

# class 名稱 (依照你 label_map 順序)
names: ["butterfly"]
```

## 開始 training
```python=
from ultralytics import YOLO

model = YOLO("yolo11m-seg.pt")

model.train(data = "dataset.yaml", imgsz = 640, device = 0, batch = 8, epochs = 100, workers = 0)
```
```bash=
python train.py
```
或是輸入指令訓練：
```bash=
yolo segment train data=dataset.yaml imgsz=640 device=0 batch=8 epochs=100 workers=0 model=yolo11m-seg.pt
```
![image](https://hackmd.io/_uploads/SkixukMple.png)

## 預測模型
建立 predict.py
```python=
# 圖片測試
from ultralytics import YOLO

model = YOLO("yolo11m-seg-custom.pt")

model.predict(source = "1.jpg", show = True, save = True,
    conf = 0.7, line_width = 2, save_crop = True, save_txt = True,
    show_labels = True, show_conf = True, classes = [0])
```
或是輸入指令：
```bash=
yolo segment predict source=1.jpg show=True save=True model=yolo11m-seg-custom.pt
```
![image](https://hackmd.io/_uploads/SJxVnJzTgg.png)
![image](https://hackmd.io/_uploads/B1JtnkzTlg.png)

```python=
# 影片（及時）測試
from ultralytics import YOLO

model = YOLO("yolo11m-seg-custom.pt")

model.predict(source = "video.mp4", show = True, save = True,
    conf = 0.7, line_width = 2, save_crop = False, save_txt = False,
    show_labels = True, show_conf = True, classes = [0])
```
![image](https://hackmd.io/_uploads/Hkn_pyGpgl.png)

> 影像來源也可以是 Youtube

## 導出模型
額外建立 export.py
```python=
from ultralytics import YOLO

model = YOLO("yolo11m-seg-custom.pt")

model.export(format = "onnx")
```
![image](https://hackmd.io/_uploads/SJwBxeM6ee.png)

## 結論

本次實作成功完成 YOLOv11 的環境安裝、模型訓練與推論，並驗證 GPU 加速在模型訓練效率上的顯著提升。
透過 Label Studio 建立的自訂資料集，YOLOv11 展現出良好的實例分割表現，能精確辨識並分離目標物件。ONNX 模型導出則提升了跨平台部署的彈性，使模型可在不同應用場景（如影像分析、影片監控、AR 即時辨識）中靈活運用。

本報告的流程可作為後續開發與研究的標準化參考範本。未來可進一步整合自動標註工具、資料擴增技術（Data Augmentation） 以及多類別訓練，以提升模型的泛化能力與實務應用價值。

## 補充
YOLOv11 主要提供兩種常見任務模式：Detection（物件偵測） 與 Segmentation（影像分割）。
前者用於辨識並框出物體位置，後者則進一步標示出物體的像素級輪廓。
### Segmentation vs Detection 比較

| 項目          | Detection（偵測）                                        | Segmentation（分割）                                          |
| ----------- | ---------------------------------------------------- | --------------------------------------------------------- |
| **功能說明**    | 偵測影像中物體的位置與類別，以矩形框表示                                 | 偵測並標註物體的像素輪廓，以遮罩顯示                                        |
| **輸出結果**    | Bounding Box（矩形框）                                    | Mask（像素遮罩）                                                |
| **應用場景**    | 車牌、人臉、交通標誌、商品辨識                                      | 醫學影像、農作物檢測、工業缺陷檢測                                         |
| **標註工具**    | LabelImg、Roboflow、Label Studio                       | LabelMe、Label Studio、CVAT                                 |
| **標註格式**    | `.txt`（class x_center y_center width height）         | `.json`（多邊形）或 `.png mask`                                 |
| **資料結構**    | `images/train`, `labels/train`                       | `images/train`, `labels/train`（含遮罩或多邊形）                   |
| **YAML 設定** | `data.yaml`（一般物件偵測設定）                                | `data.yaml`（指定 segmentation 任務）                           |
| **訓練指令**    | `yolo detect train data=data.yaml model=yolov11n.pt` | `yolo segment train data=data.yaml model=yolov11n-seg.pt` |
| **模型檔案名稱**  | `yolov11n.pt`, `yolov11s.pt`, ...                    | `yolov11n-seg.pt`, `yolov11s-seg.pt`, ...                 |
| **結果輸出**    | 偵測框與分類標籤                                             | 分割遮罩與輪廓邊界                                                 |


## 參考資料
[YOLOv11 Instance Segmentation on Custom Dataset ](https://youtu.be/3LN23XJC28U?si=YKupdELpkOs_6svL)