# 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
> 如果要標註的物件太多,可以用顏色去區分。

7. 回到首頁開始標註: **Lable All Tasks**

### 資料集準備
公開的蝴蝶照片資料集:
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
```

## 預測模型
建立 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
```


```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])
```

> 影像來源也可以是 Youtube
## 導出模型
額外建立 export.py
```python=
from ultralytics import YOLO
model = YOLO("yolo11m-seg-custom.pt")
model.export(format = "onnx")
```

## 結論
本次實作成功完成 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)