YOLOv8訓練自己的目標檢測數據集
目錄標題
- 源碼下載
- 環境配置
- 安裝包
- 訓練自己的數據集
- 數據集文件格式
- 數據集文件配置
- 超參數文件配置
- 訓練數據集
- 命令行訓練
- 腳本.py文件訓練
- 進行detect
- 顯示detect的效果
源碼下載
YOLOv8官方的GitHub代碼,同時上面也有基礎環境的配置要求以及代碼運行的教程。下載后的源碼文件名應該是ultralytics-main。
環境配置
這里可參考YOLOv5,YOLO v7的代碼環境配置。
安裝包
需要額外的安裝一些包,因為后面需要用到。
pip install ultralytics
訓練自己的數據集
數據集文件格式
- 數據集文件格式是txt的yolo格式,整體數據集文件格式如下:
- 同時images下的文件格式如下: train(訓練集圖片),val(測試集圖片),test(測試集圖片)
- 同時labels下的文件格式如下: train(訓練集圖片對應的標簽),val(測試集圖片對應的標簽),test(測試集圖片對應的標簽)
- 整體數據集格式文件如下
├── linhuo
│ ├── images
│ │ ├── train
│ │ ├── val
│ │ ├── test
│ ├── labels
│ │ ├── train
│ │ ├── val
│ │ ├── test
數據集文件配置
數據集文件配置的位置如下:
ultralytics-main/ultralytics/cfg/datasets/
在該文件下創建數據自己數據集文件配置的yaml文件,這是我創建自己數據集配置的yaml文件。同時yaml文件內要說明以下內容:
- 索引到數據集文件images下的train、val
- 數據集標注的類別數目
- 數據集標注的類別名稱
- 如我的數據集只有1類, 標注類別是fire
超參數文件配置
超參數文件配置的路徑:
ultralytics-main/ultralytics/cfg/default.yaml
具體的超參數說明可以看看網上的教程,這里主要配置model,data,patience。
- model: 可以配置yolov8n.pt, yolov8n.yaml(這里填寫配置yolov8n.pt, yolov8n.yaml的具體路徑),如果配置yolov8n.yaml需要將類別數目改為1。
model: './weights/yolov8n.pt' # (str, optional) path to model file, i.e. yolov8n.pt, yolov8n.yaml
- data: 這里是填寫數據集文件配置的地址。
data: 'ultralytics/cfg/datasets/linhuo.yaml' # (str, optional) path to data file, i.e. coco128.yaml
- patience: epochs to wait for no observable improvement for early stopping of training(就是多少次沒有訓練一個好的結果就會提前停止訓練)。
訓練數據集
命令行訓練
- task=detect:目標檢測
- mode=train:訓練模式
- model=yolov8n.pt:模型預訓練權重的地址,我是默認放到ultralytics-main目錄下
yolo task=detect mode=train model=yolov8n.pt data=ultralytics/cfg/datasets/linhuo.yaml batch=16 epochs=500
腳本.py文件訓練
- 新建立一個python腳本文件 mytrain.py
代碼為:直接運行即可。
from ultralytics import YOLO
# 權重網絡模型加載權重模型
model = YOLO('ultralytics/cfg/models/v8/yolov8.yaml').load('./weights/yolov8n.pt') # build from YAML and transfer weights# Train the model: 數據集配置yaml
results = model.train(data='ultralytics/cfg/datasets/linhuo.yaml', epochs=500, batch=16)
進行detect
- 新建立一個python腳本文件 mypre.py上面圖片有
from ultralytics import YOLO
model = YOLO('runs/detect/train/weights/best.pt')# 檢測的圖片的路徑
source = 'ultralytics/assets/2708.jpg'# 預測結果
results = model.predict(source, save=True)