目录
- 一、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, )