文章目录

  • 前言
  • 一、YOLOv11代码下载地址
    • 1.YOLOv11模型结构图
  • 二、数据集准备
    • 1.数据集标注软件
    • 2.voc数据集格式转换
    • 3.数据集划分
    • 4.修改yolo的训练配置文件
  • 三、YOLO环境配置教程
    • 1.pytorch环境安装
    • 2.其他依赖安装
  • 四、YOLOv11训练
  • 五、YOLOv11推理
  • 六、解决训练过程中断怎么继续上次训练
  • 总结


前言

YOLOv11 由 Ultralytics 团队在 2024 年 9 月 30 日发布, 最新的 YOLOv11 模型在之前的 YOLO 版本引入了新功能和改进,以进一步提高性能和灵活性。YOLO11 在快速、准确且易于使用,使其成为各种目标检测和跟踪、实例分割、图像分类和姿态估计任务的绝佳选择。可以看出官网 YOLOv11 在COCO数据集上的性能表现,如下图所示:
在这里插入图片描述


一、YOLOv11代码下载地址

手把手视频安装可以看这个视频: 视频安装教程
在这里插入图片描述

官网的源码下载地址 :官网源码

官网打不开的话,从我的网盘下载就行,网盘下载地址: YOLOv11原始版本源码下载,版本为ultralytics-8.3.6,提取码: ehhs

1.YOLOv11模型结构图

根据 yolov11.yaml 画出 yolo 整体结构图,如下图所示
在这里插入图片描述


二、数据集准备

1.数据集标注软件

数据集使用标注软件标注好,我这里推荐两个标注软件,一个是 labelimg,另外一个是 labelme,可以在python环境,使用 pip install labelimg 或者 pip install labelme 进行安装,看你选择哪个标注工具标注了,我使用 labelimg 标注工具

安装完成在终端输入命令启动标注软件
在这里插入图片描述
下面是软件界面
在这里插入图片描述
设置自动保存标注生成的标注文件
在这里插入图片描述

2.voc数据集格式转换

标注格式如果选择VOC格式,后面需要代码转换格式,如果选择yolo格式就不用转换,voc格式转换yolo格式代码如下:

import xml.etree.ElementTree as ET
import os, cv2
import numpy as np
from os import listdir
from os.path import joinclasses = []def convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = (box[0] + box[1]) / 2.0 - 1y = (box[2] + box[3]) / 2.0 - 1w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn (x, y, w, h)def convert_annotation(xmlpath, xmlname):with open(xmlpath, "r", encoding='utf-8') as in_file:txtname = xmlname[:-4] + '.txt'txtfile = os.path.join(txtpath, txtname)tree = ET.parse(in_file)root = tree.getroot()filename = root.find('filename')img = cv2.imdecode(np.fromfile('{}/{}.{}'.format(imgpath, xmlname[:-4], postfix), np.uint8), cv2.IMREAD_COLOR)h, w = img.shape[:2]res = []for obj in root.iter('object'):cls = obj.find('name').textif cls not in classes:classes.append(cls)cls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))bb = convert((w, h), b)res.append(str(cls_id) + " " + " ".join([str(a) for a in bb]))if len(res) != 0:with open(txtfile, 'w+') as f:f.write('\n'.join(res))if __name__ == "__main__":postfix = 'png'    # 图像后缀imgpath = r'E:\A-毕业设计代做数据\helmet\test\images'    # 图像文件路径xmlpath = r'E:\A-毕业设计代做数据\helmet\test\annotations'   # xml文件文件路径txtpath = r'E:\A-毕业设计代做数据\helmet\test\labels'      # 生成的txt文件路径if not os.path.exists(txtpath):os.makedirs(txtpath, exist_ok=True)list = os.listdir(xmlpath)error_file_list = []for i in range(0, len(list)):try:path = os.path.join(xmlpath, list[i])if ('.xml' in path) or ('.XML' in path):convert_annotation(path, list[i])print(f'file {list[i]} convert success.')else:print(f'file {list[i]} is not xml format.')except Exception as e:print(f'file {list[i]} convert error.')print(f'error message:\n{e}')error_file_list.append(list[i])print(f'this file convert failure\n{error_file_list}')print(f'Dataset Classes:{classes}')

代码需要修改的地方如下:
1.postfix参数填图片的后缀,需要注意图片格式要统一,是png格式就写png,是jpg格式就写jpg
2.imgpath参数填图片所在的路径
3.xmlpath参数填标注文件的路径
4.txtpath参数填生成的yolo格式的文件
在这里插入图片描述

3.数据集划分

划分训练集和验证集代码如下:

import os, shutil
from sklearn.model_selection import train_test_splitval_size = 0.2
#test_size = 0.2
postfix = 'jpg'
imgpath = r'E:\A-毕业设计代做数据\datasets\images'
txtpath =  r'E:\A-毕业设计代做数据\datasets\labels'output_train_img_folder =r'E:\A-毕业设计代做数据\datasets\dataset_kengwa/images/train'
output_val_img_folder =  r'E:\A-毕业设计代做数据\datasets\dataset_kengwa/images/val'
output_train_txt_folder =  r'E:\A-毕业设计代做数据\datasets\dataset_kengwa\labels/train'
output_val_txt_folder =  r'E:\A-毕业设计代做数据\datasets\dataset_kengwa\labels/val'os.makedirs(output_train_img_folder, exist_ok=True)
os.makedirs(output_val_img_folder, exist_ok=True)
os.makedirs(output_train_txt_folder, exist_ok=True)
os.makedirs(output_val_txt_folder, exist_ok=True)listdir = [i for i in os.listdir(txtpath) if 'txt' in i]
train, val = train_test_split(listdir, test_size=val_size, shuffle=True, random_state=0)#todo:需要test放开# train, test = train_test_split(listdir, test_size=test_size, shuffle=True, random_state=0)
# train, val = train_test_split(train, test_size=val_size, shuffle=True, random_state=0)for i in train:img_source_path = os.path.join(imgpath, '{}.{}'.format(i[:-4], postfix))txt_source_path = os.path.join(txtpath, i)img_destination_path = os.path.join(output_train_img_folder, '{}.{}'.format(i[:-4], postfix))txt_destination_path = os.path.join(output_train_txt_folder, i)shutil.copy(img_source_path, img_destination_path)shutil.copy(txt_source_path, txt_destination_path)for i in val:img_source_path = os.path.join(imgpath, '{}.{}'.format(i[:-4], postfix))txt_source_path = os.path.join(txtpath, i)img_destination_path = os.path.join(output_val_img_folder, '{}.{}'.format(i[:-4], postfix))txt_destination_path = os.path.join(output_val_txt_folder, i)shutil.copy(img_source_path, img_destination_path)shutil.copy(txt_source_path, txt_destination_path)#
# for i in train:
#     shutil.copy('{}/{}.{}'.format(imgpath, i[:-4], postfix), r'E:\1-cheng\4-yolo-dataset-daizuo\multi-classify\bird-boat-horse-aeroplane-sheep\dataset20231219/images/train/{}.{}'.format(i[:-4], postfix))
#     shutil.copy('{}/{}'.format(txtpath, i), r'E:\1-cheng\4-yolo-dataset-daizuo\multi-classify\bird-boat-horse-aeroplane-sheep\dataset20231219/labels/train/{}'.format(i))
#
# for i in val:
#     shutil.copy('{}/{}.{}'.format(imgpath, i[:-4], postfix), r'E:\1-cheng\4-yolo-dataset-daizuo\multi-classify\bird-boat-horse-aeroplane-sheep\dataset20231219/images/val/{}.{}'.format(i[:-4], postfix))
#     shutil.copy('{}/{}'.format(txtpath, i), r'E:\1-cheng\4-yolo-dataset-daizuo\multi-classify\bird-boat-horse-aeroplane-sheep\dataset20231219/labels/val/{}'.format(i))#todo:需要test则放开# for i in test:
#     shutil.copy('{}/{}.{}'.format(imgpath, i[:-4], postfix), 'images/test/{}.{}'.format(i[:-4], postfix))
#     shutil.copy('{}/{}'.format(txtpath, i), 'labels/test/{}'.format(i))

需要修改的地方如下
在这里插入图片描述
下面四个参数只需在自己电脑任意位置新建一个文件夹就行,用于存放生成的训练集和验证集,比如新建一个文件夹叫dataset_kengwa,后面的路径不用动,如下图左边的框出来的路径覆盖成你的就行
在这里插入图片描述
数据集有以下两种方式放置,都可以进行训练,常见的数据集放置是第一种,也有开源的数据集按照第二种方式放置的,我都遇见过,也能训练起来
在这里插入图片描述

4.修改yolo的训练配置文件

我们需要在项目下创建一个data.yaml的文件,文件名根据数据集名称取,我这里方便演示直接叫data.yaml,如下图所示
在这里插入图片描述
代码如下:

train: E:\Desktop\new-yolov9\yolotest\images\train  # train images (relative to 'path') 4 images
val: E:\Desktop\new-yolov9\yolotest\images\val  # val images (relative to 'path') 4 imagesnc: 2# class names
names: ['dog','cat']

三、YOLO环境配置教程

YOLOv11/YOLOv10/YOLOv9/YOLOv8/YOLOv7/YOLOv5 环境都是通用的,只需要安装一次就行

1.pytorch环境安装

基础环境配置参考教程链接:环境配置链接,如果已经配置好环境可以忽略此步骤

2.其他依赖安装

安装requirements.txt文件的环境,需要注释掉下面两行,前面的步骤已经安装了,不注释的话会覆盖前面的会安装最新版本的pytorch,所以注释掉

在这里插入图片描述
没有这个文件可以自己新建一个requirements.txt,然后把下面代码复制进去就好了
在这里插入图片描述

在这里插入图片描述

# Ultralytics requirements
# Example: pip install -r requirements.txt# Base ----------------------------------------
matplotlib>=3.3.0
numpy==1.24.4 # pinned by Snyk to avoid a vulnerability
opencv-python>=4.6.0
pillow>=7.1.2
pyyaml>=5.3.1
requests>=2.23.0
scipy>=1.4.1
tqdm>=4.64.0# Logging -------------------------------------
# tensorboard>=2.13.0
# dvclive>=2.12.0
# clearml
# comet# Plotting ------------------------------------
pandas>=1.1.4
seaborn>=0.11.0# Export --------------------------------------
# coremltools>=7.0  # CoreML export
# onnx>=1.12.0  # ONNX export
# onnxsim>=0.4.1  # ONNX simplifier
# nvidia-pyindex  # TensorRT export
# nvidia-tensorrt  # TensorRT export
# scikit-learn==0.19.2  # CoreML quantization
# tensorflow>=2.4.1  # TF exports (-cpu, -aarch64, -macos)
# tflite-support
# tensorflowjs>=3.9.0  # TF.js export
# openvino-dev>=2023.0  # OpenVINO export# Extras --------------------------------------
psutil  # system utilization
py-cpuinfo  # display CPU info
thop>=0.1.1  # FLOPs computation
# ipython  # interactive notebook
# albumentations>=1.0.3  # training augmentations
# pycocotools>=2.0.6  # COCO mAP
# roboflow

四、YOLOv11训练

(1)在根目录新建一个python文件,取名为:train.py,如果之前看过我的文章,已经新建过就不用重新新建了
在这里插入图片描述

(2)把训练代码复制到train.py文件,如果之前看过我的文章,已经复制过了就不用重新复制了,只需修改参数就行
训练的代码如下:

# -*- coding: utf-8 -*-
"""
@Auth : 挂科边缘
@File :trian.py
@IDE :PyCharm
@Motto:学习新思想,争做新青年
@Email :179958974@qq.com
"""
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLOif __name__ == '__main__':model = YOLO(model=r'D:\2-Python\1-YOLO\YOLOv11\ultralytics-8.3.2\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,)

注意注意注意:模型配置路径改成你自己的路径,还有数据集配置文件也修改成你自己的路径

在这里插入图片描述
训练代码的参数解释:

  • model参数:该参数填入模型配置文件的路径,改进的话建议不需要填预训练模型权重
  • data参数:该参数可以填入训练数据集配置文件的路径
  • imgsz参数:该参数代表输入图像的尺寸,指定为 640x640 像素
  • epochs参数:该参数代表训练的轮数
  • batch参数:该参数代表批处理大小,电脑显存越大,就设置越大,根据自己电脑性能设置
  • workers参数:该参数代表数据加载的工作线程数,出现显存爆了的话可以设置为0,默认是8
  • device参数:该参数代表用哪个显卡训练,留空表示自动选择可用的GPU或CPU
  • optimizer参数:该参数代表优化器类型
  • close_mosaic参数:该参数代表在多少个 epoch 后关闭 mosaic 数据增强
  • resume参数:该参数代表是否从上一次中断的训练状态继续训练。设置为False表示从头开始新的训练。如果设置为True,则会加载上一次训练的模型权重和优化器状态,继续训练。这在训练被中断或在已有模型的基础上进行进一步训练时非常有用。
  • project参数:该参数代表项目文件夹,用于保存训练结果
  • name参数:该参数代表命名保存的结果文件夹
  • single_cls参数:该参数代表是否将所有类别视为一个类别,设置为False表示保留原有类别
  • cache参数:该参数代表是否缓存数据,设置为False表示不缓存。

注意注意注意:一般做科研改进工作时候可以不用预训练权重,因为用预训练模型整体精度很难提高

我这里演示加载预训练权重,训练输出如下所示:
在这里插入图片描述

五、YOLOv11推理

(1)官网的预训练模型下载

在这里插入图片描述

进入官网的源码下载地址 :官网模型下载地址,往下面拉,看到模型位置,YOLOv11 针对不同的场景和应用提供了 YOLOv11n、YOLOv11s 等不同大小的模型,具体看官网提供的,需要下载哪个,鼠标左键单击下载就行。
在这里插入图片描述

我的源码包已经下载好了模型了,如果需要其他权重自行下载就行

(2)在根目录新建一个python文件,取名为:detect.py
在这里插入图片描述
(3)把推理代码复制到detect.py文件
注意注意注意:模型路径改成你自己的路径,还有预测图像也改成你自己的路径
推理的代码如下:

# -*- coding: utf-8 -*-
"""
@Auth : 挂科边缘
@File :detect.py
@IDE :PyCharm
@Motto:学习新思想,争做新青年
@Email :179958974@qq.com
"""from ultralytics import YOLOif __name__ == '__main__':# Load a modelmodel = YOLO(model=r'D:\2-Python\1-YOLO\YOLOv11\ultralytics-8.3.2\yolo11n-seg.pt')  model.predict(source=r'D:\2-Python\1-YOLO\YOLOv11\ultralytics-8.3.2\ultralytics\assets\bus.jpg',save=True,show=True,)

推理代码的参数解释
1.model参数:该参数可以填入模型文件路径
2.source参数:该参数可以填入需要推理的图片或者视频路径,如果打开摄像头推理则填入0就行
3.save参数:该参数填入True,代表把推理结果保存下来,默认是不保存的,所以一般都填入True
4.show参数:该参数填入True,代表把推理结果以窗口形式显示出来,默认是显示的,这个参数根据自己需求打开就行,不显示你就填False就行

分割模型推理结果如下:
在这里插入图片描述
目标检测模型推理结果如下:
在这里插入图片描述

六、解决训练过程中断怎么继续上次训练

在训练过程不小心中断了,那怎么继续上次的训练了,这里先不慌,官网也的代码写得非常好,它有这个断点训练功能,那么 YOLOv8 v10 v11 处理的方法都是一模一样,接下来直接看图操作就行:
在这里插入图片描述

  • model参数:该参数填入上次中断的模型,为 last.pt

  • resume参数:该参数设置为True,则会加载上一次训练的模型权重和优化器状态,继续训练。


总结

YOLOv11训练自己数据集和推理到此结束,有问题可以留言,创作不易,请帮忙点个爱心呗,谢谢
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20250731在荣品的PRO-RK3566开发板的Android13下跑通敦泰的FT8206触控芯片

20250731在荣品的PRO-RK3566开发板的Android13下跑通敦泰的FT8206触控芯片 2025/7/31 17:48缘起:本文前置条件:已经解决FT8206和PRO-RK3566的硬件连接。 通过i2cdect可以扫描到i2c从机地址:0x38。【8位地址为0x70】缘起:本文只分析…

异常检测:算法分类及经典模型概览

第一部分:异常检测的核心概念 在深入算法细节之前,理解异常检测的“语境”至关重要。 1. 什么是异常检测? 异常检测(Anomaly Detection 或 Outlier Detection)旨在通过数据挖掘技术,识别出数据集中与大多数…

技术干货 | 矢网DTF测量技术:透视线缆、天线与波导内部缺陷的“射频X光”(二)

无线通信、雷达等领域中,射频组件与传输系统的性能至关重要,其内部微小损伤易导致信号问题甚至系统失效。传统测试无法精确定位故障点,排查困难。DTF测量,矢网赋予的“透视眼”!它能穿透“黑箱”,精确定位线…

【[CSP-J 2022] 上升点列】

题目 [CSP-J 2022] 上升点列 题目描述 在一个二维平面内,给定 n 个整数点 (x i ,y i​ ),此外你还可以自由添加 k 个整数点。 你在自由添加 k 个点后,还需要从 nk 个点中选出若干个整数点并组成一个序列,使得序列中任意相邻两点间…

Kong API Gateway的十年进化史

一、技术基因的诞生(2007-2015) 2007年,三位意大利开发者Augusto Marietti、Marco Palladino和Michele Orru在博洛尼亚的一个小车库中创立了Mashape公司。 最初他们开发了一个名为Mashup的API聚合平台,试图通过整合第三方API为开发…

蓝牙设备配对:从机发现主机全过程

在蓝牙 paging 过程中,从设备(Slave)是通过特定的扫描机制和跳频方式来发现主设备发送的 ID 包的,具体过程如下:从设备处于特定扫描模式:从设备需要处于 Page Scan 模式,才能够接收主设备发送的…

聚观早报 | 三星获特斯拉AI芯片订单;小米16首发成安卓最强SOC;iPhone 17 Pro支持8倍光学变焦

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。整理丨肖羽7月29日消息三星获特斯拉AI芯片订单小米16首发成安卓最强SOCiPhone 17 Pro支持8倍光学变焦宁德时代滑板底盘公司启动首轮融…

Gemini Fullstack LangGraph Quickstart(DeepSeek+Tavily版本)

文章目录参考资料说明Gemini Fullstack LangGraph QuickstartDeepSeek Fullstack LangGraph Quickstart项目部署完整源码地址后端部署前端部署参考资料 DeepResearch应用开发实战网盘课件资料 说明 本文仅供学习和交流使用,感谢赋范社区相关老师的辛苦付出&#…

钢筋计数误差↓78%!陌讯多模态融合算法在建筑地产AI质检的落地实践

​摘要​​针对建筑地产行业钢筋验收场景的高误差痛点,本文解析陌讯视觉算法的多模态融合架构如何实现毫米级精度目标检测。实测显示:在Jetson Xavier NX边缘设备上,钢筋计数mAP0.5达​​92.4%​​,较基线模型提升28个百分点&…

负载均衡 LoadBalance

问题引入 我们一个服务可能会进行多机部署,也就说多台服务器组成的集群共同对外提供一致的服务,那么我们的微服务的代码就需要拷贝多份,部署到不同的机器上。 我们使用 IDEA 来开启多个相同的服务 这里以 product-service 为例:…

13. 若依框架中的 Sensitive 敏感字段过滤

若依框架中有Sensitive注解,但代码中并未使用,但该注解的实现还是比较值的学习的。该注解是一个运行时注解该注解只能应用在字段上JacksonAnnotationsInside 表示当使用Jackson序列化时,Jackson会自动识别该注解下的其他Jackson相关注解&…

git本地仓库,工作区和暂存区的知识

一 git工作原理 Git 的工作原理基于分布式版本控制,通过管理文件的不同版本状态,实现代码的追踪、协作和回溯。除了常见的工作区(Working Directory) 和暂存区(Staging Area/Index),核心还包括本…

MPU6050模块

一:MPU6050简介输出一个随姿态变化而变化的电压,想要量化电压,就得使用ADC转化欧拉角偏航角(Yaw):也叫航向角,通常是绕 z 轴旋转的角度,以 x 轴正向为起始边,旋转后 x 轴…

jvm的栈和堆

在 JVM 中,栈(Stack)和堆(Heap)是两种核心内存区域,用于存储不同类型的数据,它们的设计和存储规则有明确区分,主要体现在存储内容、生命周期和管理方式上:一、栈&#xf…

自动驾驶车辆的敏捷安全档案

简介近年来,在开发安全关键软件时,敏捷开发方法的使用日益增多。敏捷方法非常适合自动驾驶汽车软件的增量改进、运行设计域的逐步扩展以及新型智能路侧单元的开发。由于车辆和智能路侧单元的预期改进,未来几年将会有新的自动驾驶车辆试验。因…

【时时三省】(C语言基础)动态内存分配与它的指针变量

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省什么是内存的动态分配全局变量是分配在内存中的静态存储区的,非静态的局部变量(包括形参)是分配在内存中的动态存储区的,这个存储区是一个称为栈…

SpringMVC的核心架构与请求处理流程

Spring MVC 核心架构核心组件组件作用类比DispatcherServlet前端控制器,统一接收请求并协调各组件处理一个餐厅的前台HandlerMapping根据请求URL映射到对应的处理器(Controller)路由表HandlerAdapter执行处理器方法,处理参数绑定、…

css 不错的按钮动画

效果图wxml <view class"{{status?active:}}"><view class"up-top btn"><text>向上</text></view><view class"up-left btn"><text>向左</text></view><view class"up-center b…

若依框架RuoYi-Vue-Plus-5.X的启动,本地安装docker,再部署 Redis、PG数据库(智慧水务)SmartWaterServer

一、部署redis数据库拉取镜像 docker pull redis启动Redis容器docker run -d --name redis-server -p 6379:6379 -v redis-data:/data redis redis-server --requirepass 123redis版本二、部署PostgreSQL 数据库拉取镜像docker pull postgres:15 创建数据存储目录、建议将数据挂…

Idea 清除无用的引用类

在IntelliJ IDEA中&#xff0c;你可以通过以下方式将选中的代码设置为大写&#xff1a;1. 使用快捷键(推荐)Windows/Linux&#xff1a;Ctrl Shift UMac&#xff1a;Cmd Shift U操作步骤&#xff1a;选中文本按下快捷键&#xff0c;即可在大小写之间切换。2. 通过菜单操作选…