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

news2025/4/1 11:32:37

目录

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

![[科研/人因工程/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 成功训练:

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2324339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++_STL之vector篇

一、vector的常见用法 注&#xff1a;C中若使用vector需包含头文件<vector>. 1.vector的构造函数 int n 10,ret1;vector<int> nums(n,ret); //n表示vector初始的容量 ret表示vector中初始化的值for (auto e : nums)cout << e << " "; 扩展…

sqli-labs靶场 less 9

文章目录 sqli-labs靶场less 9 时间盲注 sqli-labs靶场 每道题都从以下模板讲解&#xff0c;并且每个步骤都有图片&#xff0c;清晰明了&#xff0c;便于复盘。 sql注入的基本步骤 注入点注入类型 字符型&#xff1a;判断闭合方式 &#xff08;‘、"、’、“”&#xf…

【Golang】第八弹----面向对象编程

&#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;Golang &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 前言&#xff1a;Go语言面向对象编程说明 Golang也支持面向对…

java基础以及内存图

java基础 命名&#xff1a; 大驼峰&#xff1a;类名 小驼峰&#xff1a;变量名方法名等其他的 全部大写&#xff1a;常量名字.. // 单行注释 /**/ 多行注释 变量类型 变量名 一、基本类型&#xff08;8个&#xff09; 整数&#xff1a;byte-8bit short-16bit int 32-b…

【嵌入式学习3】TCP服务器客户端 - UDP发送端接收端

目录 1、TCP TCP特点 TCP三次握手&#xff08;建立TCP连接&#xff09;&#xff1a; TCP四次握手【TCP断开链接的时候需要经过4次确认】&#xff1a; TCP网络程序开发流程 客户端开发&#xff1a;用户设备上的程序 服务器开发&#xff1a;服务器设备上的程序 2、UDP 为…

Linux之基础知识

目录 一、环境准备 1.1、常规登录 1.2、免密登录 二、Linux基本指令 2.1、ls命令 2.2、pwd命令 2.3、cd命令 2.4、touch命令 2.5、mkdir命令 2.6、rmdir和rm命令 2.7man命令 2.8、cp命令 2.9、mv命令 2.10、cat命令 2.11、echo命令 2.11.1、Ctrl r 快捷键 2…

llamafactory微调效果与vllm部署效果不一致如何解决

在llamafactory框架训练好模型之后&#xff0c;自测chat时模型效果不错&#xff0c;但是部署到vllm模型上效果却很差 这实际上是因为llamafactory微调时与vllm部署时的对话模板不一致导致的。 对应的llamafactory的代码为 而vllm启动时会采用大模型自己本身设置的对话模板信息…

WebSocket通信的握手阶段

1. 客户端建立连接时&#xff0c;通过 http 发起请求报文&#xff0c;报文表示请求服务器端升级协议为 WebSocket&#xff0c;与普通的 http 请求协议略有区别的部分在于如下的这些协议头&#xff1a; 上述两个字段表示请求服务器端升级协议为 websocket 协议。 2. 服务器端响…

分布式ID服务实现全面解析

分布式ID生成器是分布式系统中的关键基础设施&#xff0c;用于在分布式环境下生成全局唯一的标识符。以下是各种实现方案的深度解析和最佳实践。 一、核心需求与设计考量 1. 核心需求矩阵 需求 重要性 实现难点 全局唯一 必须保证 时钟回拨/节点冲突 高性能 高并发场景…

dom0运行android_kernel: do_serror of panic----failed to stop secondary CPUs 0

问题描述&#xff1a; 从日志看出,dom0运行android_kernel&#xff0c;刚开始运行就会crash,引发panic 解决及其原因分析&#xff1a; 最终问题得到解决&#xff0c;发现是前期在调试汇编阶段代码时&#xff0c;增加了汇编打印的指令&#xff0c;注释掉这些指令,问题得到解决。…

HarmonyOS NEXT——【鸿蒙原生应用加载Web页面】

鸿蒙客户端加载Web页面&#xff1a; 在鸿蒙原生应用中&#xff0c;我们需要使用前端页面做混合开发&#xff0c;方法之一是使用Web组件直接加载前端页面&#xff0c;其中WebView提供了一系列相关的方法适配鸿蒙原生与web之间的使用。 效果 web页面展示&#xff1a; Column()…

优选算法的慧根之翼:位运算专题

专栏&#xff1a;算法的魔法世界 个人主页&#xff1a;手握风云 一、位运算 基础位运算 共包含6种&(按位与&#xff0c;有0就是0)、|(按位或有1就是1)、^(按位异或&#xff0c;相同为0&#xff0c;相异为1)、~(按位取反&#xff0c;0变成1&#xff0c;1变成0)、<<(左…

图论问题集合

图论问题集合 寻找特殊有向图&#xff08;一个节点最多有一个出边&#xff09;中最大环路问题特殊有向图解析算法解析步骤 1 &#xff1a;举例分析如何在一个连通块中找到环并使用时间戳计算大小步骤 2 &#xff1a;抽象成算法注意 实现 寻找特殊有向图&#xff08;一个节点最多…

【数据结构】栈 与【LeetCode】20.有效的括号详解

目录 一、栈1、栈的概念及结构2、栈的实现3、初始化栈和销毁栈4、打印栈的数据5、入栈操作---栈顶6、出栈---栈顶6.1栈是否为空6.2出栈---栈顶 7、取栈顶元素8、获取栈中有效的元素个数 二、栈的相关练习1、练习2、AC代码 个人主页&#xff0c;点这里~ 数据结构专栏&#xff0c…

Redis设计与实现-哨兵

哨兵模式 1、启动并初始化sentinel1.1 初始化服务器1.2 使用Sentinel代码1.3 初始化sentinel状态1.4 初始化sentinel状态的master属性1.5 创建连向主服务器的网络连接 2、获取主服务器信息3、获取从服务器的信息4、向主从服务器发送信息5、接受主从服务器的频道信息6、检测主观…

C++进阶——封装哈希表实现unordered_map/set

与红黑树封装map/set基本相似&#xff0c;只是unordered_map/set是单向迭代器&#xff0c;模板多传一个HashFunc。 目录 1、源码及框架分析 2、模拟实现unordered_map/set 2.1 复用的哈希表框架及Insert 2.2 iterator的实现 2.2.1 iteartor的核心源码 2.2.2 iterator的实…

【算法day25】 最长有效括号——给你一个只包含 ‘(‘ 和 ‘)‘ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。

32. 最长有效括号 给你一个只包含 ‘(’ 和 ‘)’ 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 https://leetcode.cn/problems/longest-valid-parentheses/ 2.方法二&#xff1a;栈 class Solution { public:int longestValid…

Jenkins + CICD流程一键自动部署Vue前端项目(保姆级)

git仓库地址&#xff1a;参考以下代码完成,或者采用自己的代码。 南泽/cicd-test 拉取项目代码到本地 使用云服务器或虚拟机采用docker部署jenkins 安装docker过程省略 采用docker部署jenkins&#xff0c;注意这里的命令&#xff0c;一定要映射docker路径&#xff0c;否则无…

一款超级好用且开源免费的数据可视化工具——Superset

认识Superset 数字经济、数字化转型、大数据等等依旧是如今火热的领域&#xff0c;数据工作有一个重要的环节就是数据可视化。 看得见的数据才更有价值&#xff01; 现如今依旧有多数企业号称有多少多少数据&#xff0c;然而如果这些数据只是呆在冷冰冰的数据库或文件内则毫无…

RedHatLinux(2025.3.22)

1、创建/www目录&#xff0c;在/www目录下新建name和https目录&#xff0c;在name和https目录下分别创建一个index.htm1文件&#xff0c;name下面的index.html 文件中包含当前主机的主机名&#xff0c;https目录下的index.htm1文件中包含当前主机的ip地址。 &#xff08;1&…