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

目录

  • 一、torch环境安装
    • [1.1 创建虚拟环境](#1.1 创建虚拟环境)
    • [1.2 启动虚拟环境](#1.2 启动虚拟环境)
    • [1.3 安装pytorch](#1.3 安装pytorch)
    • [1.4 验证cuda是否可用](#1.4 验证cuda是否可用)
  • 二、yolo模型推理
    • [2.1 下载yolo模型](#2.1 下载yolo模型)
    • [2.2 创建模型推理文件](#2.2 创建模型推理文件)
    • [2.3 推理结果保存路径](#2.3 推理结果保存路径)
  • 三、labelimg数据标注
    • [3.1 安装labelimg](#3.1 安装labelimg)
    • [3.2 解决浮点数报错](#3.2 解决浮点数报错)
    • [3.3 labelimg UI界面介绍](#3.3 labelimg UI界面介绍)
    • [3.4 数据标注案例](#3.4 数据标注案例)
  • 四、dataset划分
    • [4.1 创建数据集划分文件](#4.1 创建数据集划分文件)
  • 五、yolo模型训练
    • [5.1 创建模型训练文件](#5.1 创建模型训练文件)
    • [5.2 创建数据配置文件](#5.2 创建数据配置文件)
    • [5.3 训练结果展示](#5.3 训练结果展示)
      • [5.3.1 出现报错:](#5.3.1 出现报错:)
      • [5.3.2 解决方案:](#5.3.2 解决方案:)
      • [5.3.4 成功训练:](#5.3.4 成功训练:)

一、torch环境安装

1.1 创建虚拟环境

BASH 复制代码
conda create -n yolov11 python=3.11

1.2 启动虚拟环境

BASH 复制代码
conda activate yolov11

1.3 安装pytorch

去官网寻找对应版本

官网:Previous PyTorch Versions | PyTorch

BASH 复制代码
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是否可用

BASH 复制代码
python
import torch
torch.cuda.is_available()

二、yolo模型推理

2.1 下载yolo模型

去官网寻找对应版本

官网:ultralytics/ultralytics at v8.3.94

2.2 创建模型推理文件

在根目录新建一个python文件,取名为:detect.py

PYTHON 复制代码
# -*- 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

PYTHON 复制代码
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

PYTHON 复制代码
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

PYTHON 复制代码
# -*- 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文件

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文件的开头加入以下代码

PYTHON 复制代码
import os 
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'

故当前train.py文件为:

PYTHON 复制代码
# -*- 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 成功训练:

相关推荐
plmm烟酒僧3 小时前
在 RK3588 多线程推理 YOLO 时,同时开启硬件解码和 RGA 加速的性能分析
yolo·rkmpp·瑞芯微·硬件加速·rga·色彩空间转换
opentrending3 小时前
Github 热点项目 awesome-mcp-servers MCP 服务器合集,3分钟实现AI模型自由操控万物!
服务器·人工智能·github
lisw054 小时前
DeepSeek原生稀疏注意力(Native Sparse Attention, NSA)算法介绍
人工智能·深度学习·算法
whaosoft-1434 小时前
51c深度学习~合集4
人工智能
逢生博客4 小时前
阿里 FunASR 开源中文语音识别大模型应用示例(准确率比faster-whisper高)
人工智能·python·语音识别·funasr
哲讯智能科技5 小时前
智慧能源新篇章:SAP如何赋能光伏行业数字化转型
大数据·人工智能
云卓SKYDROID5 小时前
无人机DSP处理器工作要点!
人工智能·无人机·科普·云卓科技
gang_unerry5 小时前
量子退火与机器学习(2):少量实验即可找到新材料,黑盒优化➕量子退火
人工智能·机器学习·量子计算·量子退火
訾博ZiBo5 小时前
AI日报 - 2025年4月2日
人工智能
说私域5 小时前
消费品行业创新创业中品类创新与数字化工具的融合:以开源 AI 智能客服、AI 智能名片及 S2B2C 商城小程序为例
人工智能·小程序·开源