目錄
- 一、torch環境安裝
- 1.1 創建虛擬環境
- 1.2 啟動虛擬環境
- 1.3 安裝pytorch
- 1.4 驗證cuda是否可用
- 二、yolo模型推理
- 2.1 下載yolo模型
- 2.2 創建模型推理文件
- 2.3 推理結果保存路徑
- 三、labelimg數據標注
- 3.1 安裝labelimg
- 3.2 解決浮點數報錯
- 3.3 labelimg UI界面介紹
- 3.4 數據標注案例
- 四、dataset劃分
- 4.1 創建數據集劃分文件
- 五、yolo模型訓練
- 5.1 創建模型訓練文件
- 5.2 創建數據配置文件
- 5.3 訓練結果展示
- 5.3.1 出現報錯:
- 5.3.2 解決方案:
- 5.3.4 成功訓練:
一、torch環境安裝
1.1 創建虛擬環境
conda create -n yolov11 python=3.11
1.2 啟動虛擬環境
conda activate yolov11
1.3 安裝pytorch
去官網尋找對應版本
官網:Previous PyTorch Versions | PyTorch
conda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.4 -c pytorch -c nvidia
1.4 驗證cuda是否可用
python
import torch
torch.cuda.is_available()
二、yolo模型推理
2.1 下載yolo模型
去官網尋找對應版本
官網:ultralytics/ultralytics at v8.3.94
2.2 創建模型推理文件
在根目錄新建一個python文件,取名為:detect.py
# -*- coding: utf-8 -*-
"""
@Auth : HP-Succinum@File :detect.py
@IDE :PyCharm
"""
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO if __name__ == '__main__': # Load a model model = YOLO(model=r'E:\yolo\ultralytics-8.3.94\runs\train\exp4\weights\best.pt') model.predict(source=r'E:\yolo\ultralytics-8.3.94\dataset\Cat_Dataset\images\train\coffee-cat.jpg', save=True, show=True, )
2.3 推理結果保存路徑
三、labelimg數據標注
3.1 安裝labelimg
pip install labelimg
3.2 解決浮點數報錯
labelimg 打框就閃退 TypeError: setValue(self, int): argument 1 has unexpected type ‘float‘_in scrollrequest bar.setvalue(bar.value() + bar.si-CSDN博客
3.3 labelimg UI界面介紹
3.4 數據標注案例
四、dataset劃分
4.1 創建數據集劃分文件
在根目錄新建一個python文件,取名為:train_test_split.py
import os
import shutil
from sklearn.model_selection import train_test_split # 設置參數
val_size = 0.2
test_size = 0.2
postfix = 'jpg'
imgpath = r'E:\yolo\ultralytics-8.3.94\dataset\Cat_Dataset\images'
txtpath = r'E:\yolo\ultralytics-8.3.94\dataset\Cat_Dataset\labels' output_train_img_folder = r'E:\yolo\ultralytics-8.3.94\dataset\Cat_Dataset\images/train'
output_val_img_folder = r'E:\yolo\ultralytics-8.3.94\dataset\Cat_Dataset\images/val'
output_test_img_folder = r'E:\yolo\ultralytics-8.3.94\dataset\Cat_Dataset\images/test'
output_train_txt_folder = r'E:\yolo\ultralytics-8.3.94\dataset\Cat_Dataset\labels/train'
output_val_txt_folder = r'E:\yolo\ultralytics-8.3.94\dataset\Cat_Dataset\labels/val'
output_test_txt_folder = r'E:\yolo\ultralytics-8.3.94\dataset\Cat_Dataset\labels/test' # 創建輸出文件夾
os.makedirs(output_train_img_folder, exist_ok=True)
os.makedirs(output_val_img_folder, exist_ok=True)
os.makedirs(output_test_img_folder, exist_ok=True)
os.makedirs(output_train_txt_folder, exist_ok=True)
os.makedirs(output_val_txt_folder, exist_ok=True)
os.makedirs(output_test_txt_folder, exist_ok=True) # 獲取標簽文件列表
listdir = [i for i in os.listdir(txtpath) if 'txt' in i] # 劃分數據集
train_val, test = train_test_split(listdir, test_size=test_size, shuffle=True, random_state=0)
train, val = train_test_split(train_val, test_size=val_size / (1 - test_size), shuffle=True, random_state=0) # 定義文件復制函數
def copy_files(file_list, img_src_folder, txt_src_folder, img_dst_folder, txt_dst_folder): for i in file_list: try: img_source_path = os.path.join(img_src_folder, '{}.{}'.format(i[:-4], postfix)) txt_source_path = os.path.join(txt_src_folder, i) img_destination_path = os.path.join(img_dst_folder, '{}.{}'.format(i[:-4], postfix)) txt_destination_path = os.path.join(txt_dst_folder, i) shutil.copy(img_source_path, img_destination_path) shutil.copy(txt_source_path, txt_destination_path) except FileNotFoundError: print(f"文件 {img_source_path} 或 {txt_source_path} 未找到。") except Exception as e: print(f"復制文件時發生錯誤: {e}") # 復制訓練集文件
copy_files(train, imgpath, txtpath, output_train_img_folder, output_train_txt_folder) # 復制驗證集文件
copy_files(val, imgpath, txtpath, output_val_img_folder, output_val_txt_folder) # 復制測試集文件
copy_files(test, imgpath, txtpath, output_test_img_folder, output_test_txt_folder)
print("數據集劃分完成!")
將數據集的圖像和標簽信息路徑輸入:
imgpath = r'E:\yolo\ultralytics-8.3.94\dataset\Cat_Dataset\images'
txtpath = r'E:\yolo\ultralytics-8.3.94\dataset\Cat_Dataset\labels'
五、yolo模型訓練
5.1 創建模型訓練文件
在根目錄新建一個python文件,取名為:train.py
# -*- coding: utf-8 -*-
"""
@Auth : HP-Succinum
@File :detect.py
@IDE :PyCharm
""" import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO if __name__ == '__main__': # model.load('yolo11n.pt') # 加載預訓練權重,改進或者做對比實驗時候不建議打開,因為用預訓練模型整體精度沒有很明顯的提升 model = YOLO(model=r'E:\yolo\ultralytics-8.3.94\ultralytics\cfg\models\11\yolo11.yaml') model.train(data=r'data.yaml', imgsz=640, epochs=50, batch=4, workers=0, device='', optimizer='SGD', close_mosaic=10, resume=False, project='runs/train', name='exp', single_cls=False, cache=False, )
5.2 創建數據配置文件
訓練數據配置文件,在根目錄創建一個data.yaml文件
# train images (relative to 'path') 8 images
train: E:\yolo\ultralytics-8.3.94\dataset\Cat_Dataset\images\train # val images (relative to 'path') 4 images
val: E:\yolo\ultralytics-8.3.94\dataset\Cat_Dataset\images\val # number of class
nc: 1 # class names
names: ['cat']
5.3 訓練結果展示
5.3.1 出現報錯:
訓練進程因 OpenMP 庫的初始化問題而終止,最終退出代碼為 3
日志里的錯誤信息 OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
表明,程序嘗試多次初始化 OpenMP 運行時庫 libiomp5md.dll
,這往往是因為多個 OpenMP 運行時庫被鏈接到程序里,可能會使性能下降或者產生錯誤的結果。
5.3.2 解決方案:
在train.py文件的開頭加入以下代碼
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'
故當前train.py文件為:
# -*- coding: utf-8 -*-
"""
@Auth : HP-Succinum@File :detect.py
@IDE :PyCharm
""" import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE' if __name__ == '__main__': model = YOLO(model=r'E:\yolo\ultralytics-8.3.94\ultralytics\cfg\models\11\yolo11.yaml') # 加載預訓練權重,改進或者做對比實驗時候不建議打開,因為用預訓練模型整體精度沒有很明顯的提升 model.load('yolo11n.pt') model.train(data=r'data.yaml', imgsz=640, epochs=50, batch=4, workers=0, device='', optimizer='SGD', close_mosaic=10, resume=False, project='runs/train', name='exp', single_cls=False, cache=False, )