【YOLOv11】目标检测任务-实操过程

发布于:2025-03-31 ⋅ 阅读:(26) ⋅ 点赞:(0)

一、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 数据标注案例

![[科研/人因工程/ERCP横向/yolo模型部署/5.png]]

![[科研/人因工程/ERCP横向/yolo模型部署/6.png]]

四、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,  
                )

5.3.4 成功训练:

请添加图片描述