# YOLOv11環境安裝 **1. 替yolov11創建一個新的Anaconda環境,並啟動該環境:** 先啟動miniconda環境 ``` source /storage_1/KF07453/miniconda3/bin/activate ``` 接著建立yolo環境 ``` conda create -n yolov11 python==3.8 conda activate yolov11 ``` # **2. 下載yolov11 github** ``` git clone https://github.com/ultralytics/ultralytics.git cd ultralytics ``` # **3.下載ultralytics套件** ```pip install ultralytics``` # **4.下載yolov11權重檔** ` wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x.pt` # **5.測試環境** `yolo predict model=yolo11n.pt source='https://ultralytics.com/images/bus.jpg'` 預測結果會輸出在ultralytics/runs/detect/predict資料夾中 # # Yolov11訓練資料 **1.建立dataset yaml檔案,提供模型訓練時須使用的訓練資料路徑及物件種類** `touch test.yaml` **2.訓練資料結構** yaml檔案中,訓練資料路徑**只需要提供圖片的路徑**,無須提供標記的路徑 ``` duck_yolo ├── images ├├── train (train.png) ├├── val (val.png) ├── labels ├├── train (train.txt) ├├── val (val.txt) ``` **train:** 訓練集資料 **val:** 驗證集資料 # **3.編輯test.yaml** 貼上以下程式碼: ``` train: /storage_1/KF07453/duck_test/images/train val: /storage_1/KF07453/duck_test/images/val nc: 1 names: ['ducks'] ``` # # YOLOv11訓練與預測 **1.使用yolo train指令** ```yolo train model=yolo11x.pt data=test.yaml epochs=1000 batch=32 imgsz=1024 device=0,1,2,3``` [訓練參數](https://docs.ultralytics.com/modes/train/?h=setting#train-settings)可依照需求進行調整 # **2.超參數之配置** 須直接修改default.yaml,路徑顯示在yolo cfg指令下面(灰色的文字) ```Printing '/storage_1/KF07453/miniconda3/envs/yolov11/lib/python3.8/site-packages/ultralytics/cfg/default.yaml'``` 若不修改,則以預設的參數進行訓練 ``` yolo cfg vim path/to/yaml ``` # **3.執行訓練** 訓練結果會輸出在runs/detect/train中 模型會儲存在runs/detect/train/weight/中的best.pt 超參數的設定可以在runs/detect/train/arg.yaml中查看 # **4.模型預測** [預測參數](https://docs.ultralytics.com/modes/predict/#inference-sources)可依照需求進行調整 ``` yolo predict model='path/to/best.pt' source='path/to/.mp4' \ imgsz=1024 show_conf=False show_labels=False ``` # **5.Tensorboard監控訓練過程與結果** (1)先在**本機環境**開啟cmd,"將本機的16006 port連接到伺服器的6006 port" ```ssh -L 16006:127.0.0.1:6006 <使用者>@<伺服器ip>``` 例如: ```ssh -L 16006:127.0.0.1:6006 KF07453@140.120.98.182``` (2)於**伺服器端**yolo環境(yolov11)安裝tensorboard,並預設模型訓練時會啟用tensorboard ``` pip install tensorboard yolo settings tensorboard=True ``` (3)在**伺服器端**執行yolo訓練 ```yolo train data=... epoch=...``` (3)開啟**另一個伺服器終端**,輸入以下指令(模型訓練輸出的位置) ``` tensorboard --logdir /storage_1/KF07453/ultralyticss/runs/train ``` (4)打開**本機**的google chrome瀏覽器,輸入以下網址即可進到tensorboard ```http://localhost:16006/``` ![螢幕擷取畫面 2025-08-07 171951](https://hackmd.io/_uploads/rkG4gxGOlg.png) #=============================================================== # YOLOv11 影像分割(segmentation) **1.啟動環境** ``` conda activate yolov11 cd ultralytics ``` # **2.根據設備與需求選擇權重檔下載** ``` wget \ https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-seg.pt ``` ![image](https://hackmd.io/_uploads/HkImbD_fJg.png) # **3.訓練資料標記** 使用[labelme.exe](https://github.com/santanu23/labelme-windows-10-exe/releases/tag/v4.2.5)進行標記 * 選擇左上工具列-->Open dir輸入需標記圖片的資料夾(images) ![messageImage_1731912439908](https://hackmd.io/_uploads/BJa0QPufye.jpg) * 選擇上方工具列-->File-->Change Output dir,指定輸出標記檔案的資料夾位置(json_labels) ![messageImage_1731913070871](https://hackmd.io/_uploads/HJ2YSDOfye.jpg) # * 選擇上方工具列的Create polygons進行標記 ![messageImage_1731912609277](https://hackmd.io/_uploads/By4aQPdGye.jpg) # * 使用多邊形圈選目標物 ![messageImage_1731913235240](https://hackmd.io/_uploads/SJJVIv_zke.jpg) 輸出的標記檔案會與原圖片相同,副檔名為.json檔案 # **4.將標記的json檔案轉換為yolo訓練時所需的txt檔案** 建立format_conversion.py `vim format_conversion.py` 編輯format_conversion.py,並貼上以下程式碼: ``` import json import os from glob import glob def labelme_to_yolo_segmentation(json_dir, output_dir, class_id=0): os.makedirs(output_dir, exist_ok=True) json_files = glob(os.path.join(json_dir, "*.json")) for json_path in json_files: with open(json_path, 'r') as f: data = json.load(f) image_height = data['imageHeight'] image_width = data['imageWidth'] yolo_annotations = [] for shape in data['shapes']: if shape['shape_type'] == 'polygon': # Ensure it's a polygon polygon_points = shape['points'] # Normalize polygon points normalized_points = [] for x, y in polygon_points: normalized_x = x / image_width normalized_y = y / image_height normalized_points.extend([normalized_x, normalized_y]) # Create YOLO format annotation string annotation = f"{class_id} " + " ".join(map(str, normalized_points)) yolo_annotations.append(annotation) # Save annotations to a corresponding txt file base_name = os.path.splitext(os.path.basename(json_path))[0] output_txt_path = os.path.join(output_dir, f"{base_name}.txt") with open(output_txt_path, 'w') as out_file: for annotation in yolo_annotations: out_file.write(annotation + "\n") labelme_to_yolo_segmentation( json_dir='json_labels', output_dir='labels' ) ``` # **5.訓練資料結構** 建立pig_seg.yaml `vim pig_seg.yaml` yaml檔案中,訓練資料路徑**只需要提供圖片的路徑**,無須提供標記的路徑 ``` pig_yolo_segment ├── images ├├── train (train.png) ├├── val (val.png) ├── labels ├├── train (train.txt) ├├── val (val.txt) ``` **train:** 訓練集資料 **val:** 驗證集資料 # **6.模型訓練** [訓練參數](https://docs.ultralytics.com/modes/train/?h=setting#train-settings)可依照需求進行調整 ``` yolo train data=/storage_1/KF07453/ultralytics/data/pig-seg.yaml \ model=yolo11x-seg.pt batch=32 device=0,1,2,3 imgsz=1024 epochs=1000 ``` 訓練結果輸出在runs/segment/train資料夾中 模型輸出在runs/segment/train/weights中的best.pt # **7.模型預測** [預測參數](https://docs.ultralytics.com/modes/predict/#inference-sources)可依照需求進行調整 ``` yolo predict imgsz=1024 source=20231125_07.avi \ model=/storage_1/KF07453/ultralytics/runs/segment/train4/weights/best.pt \ show_labels=False show_conf=False line_width=1 ``` 預測結果輸出在runs/segment/predict資料夾中 ![螢幕擷取畫面 2025-08-07 172545](https://hackmd.io/_uploads/H1TQZlMdxe.png) # **8. 輸出segment後的圖片** 可參考此[網頁](https://docs.ultralytics.com/zh/guides/isolating-segmentation-objects/)