目录
一、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 解决浮点数报错
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,
)