当前位置: 首页 > news >正文

03手把手学会yolov8模型之使用Labelimg标注数据集

概述

上节讲解yolov8环境安装,编译yolov8源码,以及训练模型与常用参数介绍,详细介绍通过demo源码开发识别一张图片内容。

模型训练核心参数

  • model 指定模型配置文件。可以是官方的预训练权重(如 yolov8n.pt),也可以是自己定义的 yaml 结构文件。使用预训练权重进行迁移学习,能显著加快训练速度并提高精度。 - - yolov8n/s/m/l/x.pt (n为最小最快,x为最大最准)。
  • data 指定数据集配置文件。这是一个 yaml 文件的路径,文件里定义了训练集、验证集的图片路径、类别数和类别名称。 例如 data/coco128.yaml 或自定义数据集配置。
  • epochs 训练轮数。指整个数据集将被模型遍历学习的次数。轮数太少会导致欠拟合,太多则可能过拟合。 通常从 100 或 300 开始尝试。
  • batch 批处理大小。指一次性喂入神经网络进行计算的样本数量。越大越稳定,但消耗显存也越多。 默认 16。如果显存不够(报CUDA Out of Memory),则调小(如 8, 4);如果显存充裕,可以调大(如 32, 64)。
  • imgsz 输入图像尺寸。会将所有输入图像统一缩放到此尺寸后再送入网络。分辨率越高,对小目标检测越有利,但计算量也随之增加。 默认 640。小目标检测场景可尝试 896 或更高。
  • lr0 初始学习率。控制模型权重更新的步长。过高可能导致训练不收敛,过低会导致训练缓慢。 默认 0.01。如果训练初期Loss震荡厉害,可以适当降低,如 0.001。
  • device 训练设备。指定使用CPU还是GPU进行训练。 单个GPU填 0,CPU填 cpu,多卡填 0,1。
  • optimizer 优化器。用于更新网络权重的算法。 默认 auto(自动选择),通常是 AdamW 或 SGD(随机梯度下降)。
  • patience 早停耐心值。如果验证集上的精度在这么多轮内没有提升,训练将自动停止,防止过拟合和浪费时间。 默认 50 或 100

模型预测/推理参数

  • source 输入源。指定要进行检测的对象,可以是单张图片路径、文件夹路径、视频文件、摄像头ID或网络图片URL等。 例如 image.jpg, videos, 0 (电脑自带摄像头),screen桌面。
  • conf 置信度阈值。只有模型预测得分高于此值的检测框才会被保留。 默认 0.25。如果误检较多,可以调高,如 0.5;如果需要尽可能检出物体(宁错勿漏),可以调低,如 0.1。
  • iou 交并比阈值。用于非极大值抑制(NMS),决定两个重叠的框是否属于同一个物体。重叠度超过此阈值的框,只保留得分最高的一个。 默认 0.7。如果同一物体周围有很多重复框,可以适当调低,如 0.5。
  • save 保存检测结果图。将画好检测框和标签的结果图片保存到本地。 True 或 False。
  • save_txt 保存标签文件。将检测结果(类别id、中心点坐标、宽高)以YOLO格式保存为 .txt 文件。 True 或 False。
  • max_det 最大检测数量。限制每张图片中最多检测出多少个目标。 默认 300。
  • half 半精度推理。使用FP16浮点数进行计算,可以加快速度并减少显存占用,精度损失极小。 默认 False。推荐在支持FP16的GPU上设置为 True。
  • classes 类别过滤。只检测你指定的某些类别。例如模型中包含人和车,只想检测人,可设置此参数。 例如 0 或 [0,2,3]

demo

from ultralytics import YOLO yolo=YOLO("yolov8n.pt","detect")# 目标检测source="./5.mp4"视频文件,source="screen"电脑桌面,source=0,摄像头 result=yolo(source="./ultralytics/assets/bus.jpg",save=True)print(result)

运行结果如下:

训练数据集准备

YOLOv8数据准备的目的是将原始杂乱无章的图像数据,转化为算法能够理解、学习并具备泛化能力的标准化格式。经过充分的训练后,它能够精准在摄像头或者视频中,识别我们指定的事物,如猫、狗、鱼等。
yolov8不具备所有事物的识别,这就要求我们自身提供数据给yolov8。如我们想要识别斯诺克,需要把球的图片提供给yolov8训练,并标注球的具体位置、尺寸大小。
需要把数据,分成三类:

  • 训练集图片,用于训练
  • 验证集图片,用于调参
  • 测试集图片,评估精度

截取视频中画面

准备一段视频,视频内容是斯诺克比赛视频,将视频中帧截取,并保存图片到本地。将图片的帧截取保存图片,方法很多。使用python cv2库可以很轻松的做到。
在yolo8源码中

  • 新建demo2.py,
  • 新建data文件夹,将视频文件1.mp4放入
  • 在data文件夹中新建img文件夹,用于保存生成的图片
import cv2 video=cv2.VideoCapture("./data/1.mp4")num=0sava_step=100whileTrue:ret,frame=video.read()ifnot ret:breaknum+=1ifnum%sava_step==0:cv2.imwrite("./data/img/"+str(num)+".jpg",frame)

其中sava_step是每间隔多少帧保存一张图片。点击按钮运行,在img文件夹内生成图片,如下图:

将生成的图片,手动筛序将没有用的,不含斯诺克的删除。

图片标注

图片内有很多不同颜色的斯诺克,将不同颜色建立标签,一一标注位置大小。使用的标注工具是labelimg。首先安装labelimg工具,

  • 进入yolov8虚拟环境,conda activate yolov8
  • 安装labelimg工具,pip install labelimg
    如下图:

    若下载不成功,大部分是网络原因。安装完成后,在命令行中输入labelimg,如下图

labelimg工具的使用

打开labelimg,设置两个参数

  • 开启自动保存
  • 更改数据训练模型yolo

基本设置

开启自动保存,点击菜单View,如下图:

更改数据训练模型yolo,单击工具栏

更改为

导入训练图片

  • 选择open dir,选择img文件夹,图片将全部导入软件
  • 选择change sava dir,选择img文件夹中dst文件夹
    如下图:

标注数据

给斯诺克标注数据,需要给球起标签名称,如红色球red标签,绿色球green标签。然后给标签画框,也就是标签所在位置。

  • 点击左侧工具栏,单击Create Rect
  • 选择红色球,将其画在框中心
  • 画完弹出标签框,若有则选择, 没有则创建
    如下操作:

    选择红、绿、黄三个球,点击工具栏Save保存,后台在dst目录生成两个文本文件如下图:

    classes.txt内容
red bule yellow

1500.txt

00.4156250.5305560.0218750.03611110.5011720.4000000.0273440.03888920.4289060.2041670.0187500.030556

classes.txt里red、bule、yellow是创建的标签名称,对于的排序序号0、1、2。而1500.txt是1500.jpg图片所标注的矩形框。第一列0、1、2序号对于的标签是red、bule、yellow。

  • 0对应red
  • 1对应bule
  • 2对于yellow
    第一行中后四位数字,是代表所画框的中心位置坐标(x,y)与长l、宽w。
    第一行表示红色球的位置与 大小。再继续多画几个球,
    按住快捷键w,画框如下图:
    又多画了四个红球,保存数据,文件变化如下:
    classes.txt
red bule yellow

1500.txt

00.4156250.5305560.0218750.03611110.5011720.4000000.0273440.03888920.4289060.2041670.0187500.03055600.6281250.1736110.0156250.02500000.5558590.6090280.0164060.03194400.5281250.6041670.0171880.03333300.5007810.6819440.0187500.036111

将所有图片内的球都通过这种方式标注。
如下图:

从文件内容看到已经完成标注了哪些文件

  • 1500.txt对于是1500jpg文件
  • 25500.txt对于是25500jpg文件
  • 26500.txt对于是26500jpg文件
  • 27000.txt对于是27000jpg文件
  • 27500.txt对于是27500jpg文件
    classes具体标签内容
red bule yellow green white pink black brown

8类标签,对应斯诺克八种秋色。
查看1500图片的标注数据

00.4156250.5305560.0218750.03611110.5011720.4000000.0273440.03888920.4289060.2041670.0187500.03055670.6281250.1736110.0156250.02500000.5558590.6090280.0164060.03194400.5281250.6041670.0171880.03333300.5007810.6819440.0187500.03611130.5730470.2062500.0132810.02361140.5789060.1958330.0125000.02500050.4980470.5826390.0164060.02361160.4890630.7298610.0171880.03472200.4675780.7194440.0164060.02777800.4761720.6395830.0148440.02638900.5148440.6493060.0156250.02916700.4929690.6388890.0140630.03055600.5085940.6368060.0125000.02638900.5000000.6250000.0125000.02222200.4839840.6270830.0132810.02638900.4921880.6159720.0171880.02361100.4964840.6000000.0148440.022222

至此数据标注已经完成,下节讲解如何整理标注的数据,给yolo8模型训练,将训练结果用于识别斯诺克台球比赛。

http://www.jsqmd.com/news/849121/

相关文章:

  • AI数据标注实战:如何高效、准确地标注训练数据
  • Java SE 11 与 Spring Boot 在电商场景中的应用
  • 【更新至2024年】2011-2024年地级市金融科技指数数据
  • Proteus仿真避坑指南:数字电子钟的24小时清零与闹钟功能实现
  • vue多语言交易所系统/期货/合约交易/质押生息/盲盒/挖矿/跟单源码
  • Gdev 至 Rust 移植工程(七)
  • GIS技巧100例23-ArcGIS像元统计实战:从月度栅格到年度气候指标
  • 别再为Keil 5报错头疼了!STM32F401CCU6固件库移植保姆级避坑指南(V1.8.0)
  • AI产品经理入门实战:如何理解意图识别?
  • AArch64架构Watchpoint机制详解与调试实践
  • 如何3步掌握Path of Building物品制作:终极实战指南
  • 通过Taotoken用量看板分析团队大模型API消耗模式与优化点
  • 2026年选对工作钢格板厂家,这三大核心标准决定你的采购成败
  • 【RuoYi】数据分页功能分析 —— 以登录日志页面为例
  • 【原创】智询管理系统操作说明
  • Spring Boot 3.0升级踩坑记:手把手教你解决 ‘javax.servlet.http不存在‘ 的报错
  • 技术动态 | 大模型驱动情报领域知识图谱构建新范式:ERC-KG方法精确率高达94.32% - 解放军网络空间部队信工大等
  • 无人机精准着陆:NMPC-CBF技术实现厘米级控制
  • 023、无传感器位置估计基础
  • 大模型微调实战:用LoRA技术微调LLaMA 2模型
  • 别硬熬本科论文!paperxie 智能写作,把 4 步流程焊死在你的效率里
  • 告别Meson和CMake:手把手教你用老式configure交叉编译GLib 2.46.2(附arm-linux.cache模板)
  • 5分钟终极指南:用m4s-converter永久保存你的B站缓存视频
  • 2026年平台踩踏钢格板厂家推荐,这5家靠谱又耐用
  • EPnP算法中的‘控制点’到底是什么?一个类比带你轻松理解SLAM中的坐标变换核心
  • 传统后端程序员必看:3-6个月转型高薪AI应用开发
  • 跳出无效熬夜怪圈:paperxie 用四步闭环,重构本科毕业论文写作逻辑
  • JetBrains IDE试用期重置终极指南:三步实现无限期使用
  • IDEA插件EasyYapi实战:如何为Dubbo/Feign等RPC接口自动生成API文档?
  • 桌面音乐可视化革命:Lano Visualizer如何让你的音乐“看得见“