《YOLO 标注训练全攻略》

news2024/10/22 2:37:46

《YOLO 标注训练全攻略》

  • 一、YOLO 训练概述
    • (一)YOLO 的广泛应用
    • (二)标注训练的意义
  • 二、数据准备阶段
    • (一)数据收集与划分
    • (二)图像标注工具
    • (三)数据增强(可选)
    • (四)划分训练集和验证集
  • 三、YOLO 训练阶段
    • (一)安装依赖环境
    • (二)调整训练参数
    • (三)开始训练
  • 四、模型评估与预测
    • (一)图像检测
    • (二)模型效果评估

一、YOLO 训练概述

YOLO(You Only Look Once)作为一种先进的目标检测算法,在计算机视觉领域占据着重要地位。其标注训练更是整个流程中的关键环节,具有重大的意义和广泛的应用场景。

(一)YOLO 的广泛应用

YOLO 在目标检测领域优势显著,以其高效性和准确性而流行。例如,在安防监控中,YOLO 可以实时检测和识别人员、车辆等,速度可达每秒几十帧甚至更高。在自动驾驶领域,YOLO 能够快速准确地识别道路上的车辆、行人、交通标志等,为自动驾驶系统提供关键的环境感知信息,极大地提高了驾驶安全性和智能化水平。在工业自动化方面,YOLO 可用于制造线上检测产品缺陷或进行质量控制,提高生产效率和产品质量。此外,YOLO 在零售分析、无人机、医疗影像分析等领域也有着广泛的应用。

(二)标注训练的意义

进行 YOLO 标注训练具有重要意义。通过标注训练,可以根据特定的需求定制化检测任务。比如,对于特定的工业产品检测,通过对大量产品图像进行标注训练,可以让 YOLO 模型准确识别出产品的缺陷类型和位置,满足工业生产中的质量控制需求。在医疗影像分析中,针对特定的疾病诊断需求,可以对大量医疗影像进行标注训练,使 YOLO 模型能够辅助医生快速准确地检测出病灶,提高诊断效率和准确性。总之,标注训练能够让 YOLO 更好地适应不同的应用场景,满足各种特定需求。

二、数据准备阶段

(一)数据收集与划分

数据收集的途径:
可以利用网络上的开源数据集,如 COCO、Pascal VOC 等,这些数据集经过大量的标注和验证,具有较高的质量和多样性。
自己采集数据也是一种有效的方式,可以通过摄像头、传感器或其他设备采集图像或视频,根据特定的应用场景进行定制化的数据收集。例如在工业自动化领域,可以在生产线上采集产品图像;在安防监控中,可以通过安装监控摄像头获取实时视频流并提取图像。
数据集合成也是一种扩充数据集的方法,可以使用图像合成工具生成合成数据,以增加数据的多样性和数量。
数据集的划分:
通常将数据集划分为训练集、验证集和测试集。常见的划分比例为 80% 的数据用于训练,10% 用于验证,10% 用于测试。这样的划分可以在训练过程中评估模型的性能,并在测试集上最终验证模型的泛化能力。

(二)图像标注工具

安装 labelimg:
在 cmd 中输入 “pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple” 进行安装。安装结束后,在 cmd 中输入 “labelimg” 即可打开。
切换为 YOLO 格式进行标注:
在工具栏中 “保存” 按钮的正下方,单击 “PascalVOC” 按钮切换到 YOLO 格式。在 data/predefined_classes.txt 定义将用于培训的课程列表。可以使用 Open/OpenDIR 处理单个或多个图像。完成单个图像后,单击保存。YOLO 格式的 txt 文件将与图像同名保存在同一文件夹中,同时还会生成一个名为 “classes.txt” 的文件,定义了 YOLO 标签所引用的类名列表。

(三)数据增强(可选)

数据增强的方法和作用:
数据增强的方法包括随机剪裁、随机翻转、随机颜色变化、随机加噪、随机模糊等。这些方法可以增加数据的多样性,使模型学习到更多的特征,提高模型的泛化能力。
例如,随机剪裁可以随机从输入图像中剪裁出一块区域并将其作为新的输入,增加数据的多样性;随机翻转可以随机将输入图像左右或上下翻转,使模型学习到不同方向的特征;随机颜色变化可以随机调整输入图像的对比度、亮度和饱和度,使模型对不同颜色的光照条件具有更强的适应性。
代码实现示例:
以 HSV 变换为例,代码实现如下:

   # 文件位置:utils/datasets.py
   # 色域空间增强 Augment colorspace:H 色调、S 饱和度、V 亮度
   # 通过一些随机值改变 hsv,实现数据增强
   augment_hsv(img, hgain=hyp['hsv_h'], sgain=hyp['hsv_s'], vgain=hyp['hsv_v'])
   # 被调用的函数位置:utils/augmentations.py
   def augment_hsv(im, hgain=0.5, sgain=0.5, vgain=0.5):
       # HSV color-space augmentation
       if hgain or sgain or vgain:
           r = np.random.uniform(-1,1, 3) * [hgain, sgain, vgain] + 1  # random gains
           hue, sat, val = cv2.split(cv2.cvtColor(im, cv2.COLOR_BGR2HSV))
           dtype = im.dtype  # uint8
           x = np.arange(0,256, dtype=r.dtype)
           lut_hue = ((x * r[0]) % 180).astype(dtype)
           lut_sat = np.clip(x * r[1],0, 255).astype(dtype)
           lut_val = np.clip(x * r[2],0, 255).astype(dtype)
           im_hsv = cv2.merge((cv2.LUT(hue, lut_hue), cv2.LUT(sat, lut_sat), cv2.LUT(val, lut_val)))
           cv2.cvtColor(im_hsv, cv2.COLOR_HSV2BGR, dst=im)  # no return needed

(四)划分训练集和验证集

通过脚本划分:
下面是随机划分训练集和验证集的脚本代码,只需要填充好 image_dir、label_dir(标注好的图片和标签路径),train_image_dir、train_label_dir、val_image_dir、val_label_dir(生成训练集、验证集的图片和标签路径),还可以自己调整 train_val_split 的值来调整训练集和验证集的划分比例。

   """随机划分训练集和验证集"""
   import os
   import random
   from shutil import copyfile

   # 输入路径
   image_dir = r'G:\\yolov8\\data\\images'  # 替换成你的图像文件夹路径
   label_dir = r'G:\\yolov8\\data\\label'  # 替换成你的标签文件夹路径

   # 输出路径
   train_image_dir = r'G:\\yolov8\\ultralytics-main\\ultralytics-main\\my_data\\detection\\train\\images'
   train_label_dir = r'G:\\yolov8\\ultralytics-main\\ultralytics-main\\my_data\\detection\\train\\labels'
   val_image_dir = r'G:\\yolov8\\ultralytics-main\\ultralytics-main\\my_data\\detection\\val\\images'
   val_label_dir = r'G:\\yolov8\\ultralytics-main\\ultralytics-main\\my_data\\detection\\val\\labels'

   # 创建输出文件夹
   os.makedirs(train_image_dir, exist_ok=True)
   os.makedirs(train_label_dir, exist_ok=True)
   os.makedirs(val_image_dir, exist_ok=True)
   os.makedirs(val_label_dir, exist_ok=True)

   # 划分数据集的比例
   train_val_split = 0.8

   # 获取图像文件列表
   image_files = os.listdir(image_dir)
   random.shuffle(image_files)

   # 计算划分的索引
   split_index = int(len(image_files) * train_val_split)

   # 划分训练集和验证集
   train_image_files = image_files[:split_index]
   val_image_files = image_files[split_index:]

   # 复制图像文件并相应地复制标签文件
   def copy_images_and_labels(image_files, source_image_dir, source_label_dir, dest_image_dir, dest_label_dir):
       for image_file in image_files:
           # 复制图像文件
           source_image_path = os.path.join(source_image_dir, image_file)
           dest_image_path = os.path.join(dest_image_dir, image_file)
           copyfile(source_image_path, dest_image_path)

           # 复制对应的标签文件
           label_file = os.path.splitext(image_file)[0] + '.txt'
           source_label_path = os.path.join(source_label_dir, label_file)
           dest_label_path = os.path.join(dest_label_dir, label_file)
           copyfile(source_label_path, dest_label_path)

   # 复制训练集图像和标签
   copy_images_and_labels(train_image_files, image_dir, label_dir, train_image_dir, train_label_dir)

   # 复制验证集图像和标签
   copy_images_and_labels(val_image_files, image_dir, label_dir, val_image_dir, val_label_dir)

划分比例的选择:
常见的划分比例为 80% 的数据用于训练,10% 用于验证,10% 用于测试。这个比例可以根据数据量和任务的特性进行调整。如果数据量较大,可以适当增加验证集和测试集的比例,以更好地评估模型的性能和泛化能力;如果数据量较小,可以适当减少验证集和测试集的比例,以保证有足够的数据用于训练。

三、YOLO 训练阶段

(一)安装依赖环境

安装 YOLO 训练所需的依赖环境是确保训练顺利进行的重要步骤。首先,需要安装 torch 和 torchvision。可以通过以下命令进行安装:
pip install torch
pip install torchvision

此外,还需要配置项目所需的其他软件包。根据项目的要求,可以在项目的根目录下找到 requirements.txt 文件,通过以下命令安装其中列出的软件包:

pip install -r requirements.txt

(二)调整训练参数

训练参数的调整对于获得良好的训练效果至关重要。以下是一些常见的训练参数及其调整方法:
迭代次数:迭代次数决定了模型训练的轮数。一般来说,迭代次数越多,模型的性能越好,但训练时间也会相应增加。可以根据任务的复杂性和数据量的大小来调整迭代次数。如果数据量较小,可以适当减少迭代次数,以避免过拟合;如果数据量较大,可以适当增加迭代次数,以提高模型的性能。例如,对于一个简单的目标检测任务,数据量较小,可以将迭代次数设置为 50 到 100 次;对于一个复杂的目标检测任务,数据量较大,可以将迭代次数设置为 500 到 1000 次。
批次大小:批次大小决定了每次训练时输入模型的样本数量。批次大小越大,模型的训练速度越快,但也需要更多的内存。如果显卡的显存较小,可以适当减小批次大小,以避免内存不足的问题;如果显卡的显存较大,可以适当增加批次大小,以提高训练速度。一般来说,批次大小可以设置为 8、16、32、64 等。例如,如果显卡的显存为 4GB,可以将批次大小设置为 8 或 16;如果显卡的显存为 8GB 或以上,可以将批次大小设置为 32 或 64。

(三)开始训练

在完成依赖环境的安装和训练参数的调整后,可以开始运行 train.py 文件进行训练。在终端中进入项目的根目录,输入以下命令:

python train.py --data [your_data.yaml] --weight [pretrained_weight.pt] --cfg [model_config.yaml] --batch-size [batch_size] --epochs [epochs]

其中,[your_data.yaml] 是你自己创建的数据集配置文件,[pretrained_weight.pt] 是预训练权重文件,[model_config.yaml] 是模型配置文件,[batch_size] 是批次大小,[epochs] 是迭代次数。
在训练过程中,可以通过终端输出查看训练进度和结果。训练进度会显示当前的迭代次数、损失值、学习率等信息。训练结果会在训练结束后输出,包括模型的精度、召回率、F1 值等指标。此外,还可以通过保存的训练日志文件查看训练过程中的详细信息。
训练结束后,可以在指定的输出目录中找到保存的模型文件和训练结果文件。这些文件可以用于模型的推理和预测,以及进一步的分析和评估。

四、模型评估与预测

(一)图像检测

使用 detect.py 文件进行图像检测是评估模型性能的重要手段之一。首先,可以对 detect.py 文件中的参数进行修改以满足特定的检测需求。例如,可以调整 conf_thres(置信度阈值)和 iou_thres(做 NMS 的 IOU 阈值)。一般情况下,作者设置的默认值为 conf_thres=0.25 和 iou_thres=0.45。如果检测框出现重复的情况,可以考虑提高置信区间,降低 IOU,如将 conf_thres 从默认的 0.25 提高到 0.3,将 iou_thres 从默认的 0.45 降低到 0.2。
在主函数中,可以将传参过程改为默认的值,如需修改可在 detect() 函数中传入参数即可。比如想要修改 con_fthres=0.25 的值,可以这样修改:

def detect(source,save_img=False,conf_thres1):
    # 将命令行传参,改为了使用主函数将参数传入
    agnostic_nms=False
    augment=False
    classes=None
    conf_thres=conf_thres1

在主函数中调用时只需要把相应的参数值传入即可:

if __name__ == '__main__':
    source='inference/images/test5.jpg'
    detect(source,conf_thres1=0.20)

将自己所要检测的图片放入主目录 inference/images 目录下,并将其地址在 source 中进行修改,即可运行进行此照片的检测。运行结束后会在 runs/detect 中新产生的一个文件夹 exp 中保存识别的结果。

(二)模型效果评估

根据预测结果评估模型的性能可以通过多种指标来进行。例如,可以使用平均精度均值(mAP)来衡量模型的准确率。mAP@0.5 表示在 IOU 阈值为 0.5 的情况下,mAP 的值为多少。一般来说,mAP@0.5 即为评价 YOLO 模型的指标之一。此外,还可以通过查看混淆矩阵、精确率(Precision)、召回率(Recall)、F1-score 等指标来评估模型的性能。
混淆矩阵以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。其中矩阵的行表示真实值,矩阵的列表示预测值。通过计算 TP(将正类预测为正类数)、FN(将正类预测为负类)、FP(将负类预测为正类数)、TN(将负类预测为负类数)的值,可以进一步计算精确率和召回率。
精确率 Precision=TP / (TP+FP),在预测是 Positive 所有结果中,预测正确的比重。召回率 recall=TP / (TP+FN),在真实值为 Positive 的所有结果中,预测正确的比重。F1-score 被定义为查准率和召回率的调和平均数,最大为 1,最小为 0。
如果模型的性能不理想,可以通过调整参数来提高模型精度。例如,可以进行数据增强,增加更多的数据可以提高 YOLO 的准确性。这可以通过使用各种数据增强技术来实现,例如旋转、平移、翻转、缩放等。还可以调整超参数,如学习率、权重衰减和批次大小等。通过对这些超参数进行优化,可以提高算法的准确性。我们可以使用自动化工具如网格搜索、贝叶斯优化等来寻找最佳超参数组合。此外,还可以修改损失函数、进行模型集成、分类器融合、多尺度训练、网络架构优化以及使用后处理技术等方法来提高模型的准确性。

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

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

相关文章

Nature 正刊丨核糖体如何塑造蛋白质折叠

01摘要 涉及人工智能的方法彻底改变了从氨基酸序列预测蛋白质结构的能力。然而,这些结构通过在细胞内折叠形成的过程仍然大多难以捉摸——尽管正确折叠对蛋白质功能的重要性,以及折叠失败与许多毁灭性疾病之间的联系。大多数蛋白质只有在核糖体&#xf…

鸿蒙网络编程系列23-实现一个基于鸿蒙API的HTTP服务器

1. 鸿蒙HTTP服务器可行性分析 看到这个题目,可能有的小伙伴会有一些疑问: “鸿蒙API从9到12我都翻烂了,也没见提供HTTP服务器的接口啊” “我BUG写得少,你可不要骗我” 的确,目前的鸿蒙API没有提供HTTP服务端的实现…

【每日一题】【算法双周赛】【第 20 场 小白入门赛评价/分享】赛后另类AI写题分析分享

第 20 场 小白入门赛 1. 四个亲戚【算法赛】2. 黛玉泡茶【算法赛】AI分析具体实现代码解析复杂度分析示例运行 结果二 3. 宝玉请安【算法赛】AI分析问题分析路径计算代码实现代码解析示例运行复杂度分析 结果: 交上去 4. 贾母祝寿【算法赛】AI分析问题分析实现步骤代…

【日志】关于多益网申

2024.10.19 早先听闻多益的测试题非常抽象,凡是测过的人都说太抽象了,我还以为他考我各种算法或者编程语言呢。我今天也去做了一下,测试题里面大多都考些计算题,找规律题,判断推理题,还有一些图形转换&…

计算机毕业设计 基于java旅游攻略平台的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

【命令操作】Linux中多种关机和重启的命令介绍 _ 统信 _ 麒麟 _ 方德

往期好文:【系统配置】信创系统配置文件保护与防篡改 | 统信 | 麒麟 | 方德 Hello,大家好啊!今天给大家带来一篇关于在Linux系统中多种关机和重启命令介绍的文章。Linux作为一个广泛应用的开源操作系统,提供了多种关机和重启的方式…

jupyter notebook 笔记

nbclassic 经典版 新版的 jupyter notebook 太丑了。 最难受的是字体太小了。 我还是喜欢老版本的 jupyter notebook. 安装经典版: pip install nbclassic 启动经典版: jupyter server 或是 jupyter nbclassic 参考来源: https://github.com/jupyter/nbclassic jupyter note…

计算机网络——传输层服务

传输层会给段加上目标ip和目标端口号 应用层去识别报文的开始和结束

C++ —— 关于多态

目录 1. 多态的概念 2.多态的定义及实现 3. 虚函数 3.1 虚函数的重写/覆盖 3.2 关于多态的面试难题 3.3 虚函数重写的⼀些问题 3.4 override 和 final关键字 3.5 重载/重写/隐藏的对比 3.6 纯虚函数和抽象类 4.多态的原理 4.1虚函数表指针 4.2 多态是如何实现的 4…

go压缩的使用

基础:使用go创建一个zip func base(path string) {// 创建 zip 文件zipFile, err : os.Create("test.zip")if err ! nil {panic(err)}defer zipFile.Close()// 创建一个新的 *Writer 对象zipWriter : zip.NewWriter(zipFile)defer zipWriter.Close()// 创…

如何使用DockerSpy检测你的Docker镜像是否安全

关于DockerSpy DockerSpy是一款针对Docker镜像的敏感信息检测与安全审计工具,该工具可以帮助广大研究人员在Docker Hub上检测和搜索自己镜像的安全问题,并识别潜在的泄漏内容,例如身份验证密钥等敏感信息。 功能介绍 1、安全审计&#xff1a…

linux一二三章那些是重点呢

第一章 静态库动态库的区别 什么是库 库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接 拿来用的变量、函数或类。 如何制作 静态动态库 静态库: GCC 进行链接时,会把静态库中代码打…

2013 lost connection to MySQL server during query

1.问题 使用navicat连接doris,会有这个错误。 2.解决 换低版本的navicat比如navicat11。

linux运行openfoam并行会报错:attempt to run parallel on 1 processor

linux运行openfoam并行会报错:attempt to run parallel on 1 processor 步骤: 1.先在终端输入which mpirun,查看当前并行路径; 2.输入gedit ~/.bashrc,文本方式打开bashrc文件; 3.修改为export PATH/usr/bin:$PATH&am…

支持阅后即焚的笔记Enclosed

什么是 Enclosed ? Enclosed 是一个简约的网络应用程序,旨在发送私人和安全的笔记。所有笔记均经过端到端加密,确保服务器和存储对内容一无所知。用户可以设置密码、定义有效期 (TTL),并选择在阅读后让笔记自毁。 软件特点&#x…

第一年改考408的学校有炸过的吗?怎么应对突然改考408?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 专业课改考 408 后,分数线不一定会暴涨,其变化受到多种因素影响: 可能导致分数线不暴涨甚至下降的因素: 考试难度增加:408 统考涵盖数据结构、计算机组成原理…

P2-1与P2-2.【C语言基本数据类型、运算符和表达式】第一节与第二节

讲解视频: P2-1.【基本数据类型、运算符和表达式】第一节 P2-2.【基本数据类型、运算符和表达式】第二节 必备知识与理论 1.数据类型概述 所谓数据类型,是按被定义变量的性质,表示形式,占据存储空间的多少&#xff0…

【分布式事务-04】分布式事务seata的XA模式

redis系列整体栏目 内容链接地址【一】分布式事务之2pc两阶段提交https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】分布式事务seata的安装下载与环境搭建https://zhenghuisheng.blog.csdn.net/article/details/142893117【三】分布式事务seata的AT模式htt…

k8s ETCD数据备份与恢复

在 Kubernetes 集群中,etcd 是一个分布式键值存储,它保存着整个集群的状态,包括节点、Pod、ConfigMap、Secrets 等关键信息。因此,定期对 etcd 进行备份是非常重要的,特别是在集群发生故障或需要恢复数据的情况下。本文…

Axure科技感元件:打造可视化大屏设计的得力助手

Axure,作为一款专业的原型设计工具,凭借其强大的设计功能、丰富的组件库和灵活的交互能力,成为了许多设计师打造科技感设计的首选工具。其中,Axure科技感元件更是以其独特的魅力和实用性,在数据可视化大屏、登录界面、…