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填 0CPU填 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]demofrom ultralytics import YOLO yoloYOLO(yolov8n.pt,detect)# 目标检测source./5.mp4视频文件,sourcescreen电脑桌面,source0摄像头 resultyolo(source./ultralytics/assets/bus.jpg,saveTrue)print(result)运行结果如下:训练数据集准备YOLOv8数据准备的目的是将原始杂乱无章的图像数据转化为算法能够理解、学习并具备泛化能力的标准化格式。经过充分的训练后它能够精准在摄像头或者视频中识别我们指定的事物如猫、狗、鱼等。yolov8不具备所有事物的识别这就要求我们自身提供数据给yolov8。如我们想要识别斯诺克需要把球的图片提供给yolov8训练并标注球的具体位置、尺寸大小。需要把数据分成三类训练集图片用于训练验证集图片用于调参测试集图片评估精度截取视频中画面准备一段视频视频内容是斯诺克比赛视频将视频中帧截取并保存图片到本地。将图片的帧截取保存图片方法很多。使用python cv2库可以很轻松的做到。在yolo8源码中新建demo2.py新建data文件夹将视频文件1.mp4放入在data文件夹中新建img文件夹用于保存生成的图片import cv2 videocv2.VideoCapture(./data/1.mp4)num0sava_step100whileTrue:ret,framevideo.read()ifnot ret:breaknum1ifnum%sava_step0: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 yellow1500.txt00.4156250.5305560.0218750.03611110.5011720.4000000.0273440.03888920.4289060.2041670.0187500.030556classes.txt里red、bule、yellow是创建的标签名称对于的排序序号0、1、2。而1500.txt是1500.jpg图片所标注的矩形框。第一列0、1、2序号对于的标签是red、bule、yellow。0对应red1对应bule2对于yellow第一行中后四位数字是代表所画框的中心位置坐标(x,y)与长l、宽w。第一行表示红色球的位置与 大小。再继续多画几个球按住快捷键w画框如下图又多画了四个红球保存数据文件变化如下:classes.txtred bule yellow1500.txt00.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 brown8类标签对应斯诺克八种秋色。查看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模型训练将训练结果用于识别斯诺克台球比赛。