# 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)