YOLOv8 训练自己的数据集(20240423)

环境搭建请参考:Win10 搭建 YOLOv8 运行环境(20240423)-CSDN博客

环境测试请参考:本地运行测试 YOLOv8(20240423)-CSDN博客

一、使用 YOLOv8 的 coco128 数据集熟悉一下如何训练和预测

        1.1、在项目根目录下创建文件夹 datasets。

。        1.2、在 datasets 目录下添加 yaml 配置文件 coco128.yaml,并复制以下内容。

#  数据集的根目录路径。
#  由于 YOLOv8 对目录做了默认的一些设置(第一次运行时的位置,而不是当前项目路径来查找),
#  虽然可以修改配置文件或者在代码中指定,但是我觉得在这边使用绝对路径更为方便一些。
path: E:/PyCharmProjects/yolov8_learn/datasets/coco128
# 训练图像位于 images/train2017,这是相对于 path 的相对路径
train: images/train2017
# 验证图像也位于 images/train2017,与训练图像使用相同的路径。
# 需要注意的是,通常训练集和验证集应该包含不同的图像,以确保模型验证的有效性。但在这里,它们使用了相同的图像,这在实际应用中可能不是最佳实践。
val: images/train2017
# 测试图像的路径,这是一个可选字段。
test:

# 类别
names:
  0: person
  1: bicycle
  2: car
  3: motorcycle
  4: airplane
  5: bus
  6: train
  7: truck
  8: boat
  9: traffic light
  10: fire hydrant
  11: stop sign
  12: parking meter
  13: bench
  14: bird
  15: cat
  16: dog
  17: horse
  18: sheep
  19: cow
  20: elephant
  21: bear
  22: zebra
  23: giraffe
  24: backpack
  25: umbrella
  26: handbag
  27: tie
  28: suitcase
  29: frisbee
  30: skis
  31: snowboard
  32: sports ball
  33: kite
  34: baseball bat
  35: baseball glove
  36: skateboard
  37: surfboard
  38: tennis racket
  39: bottle
  40: wine glass
  41: cup
  42: fork
  43: knife
  44: spoon
  45: bowl
  46: banana
  47: apple
  48: sandwich
  49: orange
  50: broccoli
  51: carrot
  52: hot dog
  53: pizza
  54: donut
  55: cake
  56: chair
  57: couch
  58: potted plant
  59: bed
  60: dining table
  61: toilet
  62: tv
  63: laptop
  64: mouse
  65: remote
  66: keyboard
  67: cell phone
  68: microwave
  69: oven
  70: toaster
  71: sink
  72: refrigerator
  73: book
  74: clock
  75: vase
  76: scissors
  77: teddy bear
  78: hair drier
  79: toothbrush

        1.3、下载 coco128(下载地址)训练集数据,解压后将 coco128 文件夹放在 datasets 目录下。数据集包含两个子文件夹 images(用于训练的图片) 和 labels(每张图片对应的标签),此处images 和 labels 文件夹下只有一个名为 train2017 的文件夹,实际上应该分别再创建 train(训练)、val(验证)、test(测试)等文件夹,例如  train2017、val2017、test2017。当然这不是必须的,训练、验证、测试都使用相同的图片也是没有问题的。

        1.4、编写代码,启动训练。

from ultralytics import YOLO

if __name__ == '__main__':
    # 训练数据集
    # YOLOv8 提供了 n、s、m、l、x 五种预训练模型,模型精度递增,相应的训练速度越慢
    # 加载一个预训练模型
    model = YOLO('./weights/yolov8m.pt')
    # 启动模型的训练
    #   1)、data = './datasets/coco128.yaml': 这个参数指定了用于训练的数据集配置文件
    #   2)、epochs=3: 这个参数指定了训练的轮数(或周期)
    #   3)、results = ...: 这行代码将训练过程的结果(如损失值、准确率、模型权重更新等)赋值给results变量。这些结果可以用于后续的分析和模型评估
    results = model.train(data='./datasets/coco128.yaml', epochs=3)

        1.5、训练后的结果将保存到 runs 目录下。

        1.6、编写代码,启动预测。不过这次我们不用 YOLOv8 的模型,使用之前训练后得到的最好的一次结果模型。

from ultralytics import YOLO

if __name__ == '__main__':
    # 预测数据集
    # 加载一个预训练模型
    model = YOLO('./runs/detect/train2/weights/best.pt')
    # 预测图片 ./assets/zidane.jpg,并保存预测结果
    results = model.predict("./assets/zidane.jpg", save=True)

        1.7、预测后的结果将保存到 runs 目录下。

二、安装 LabelImg 

        2.1、下载安装 LabelImg,LabelImg 是一款开源的图片标注工具,使用 Python 编写并基于 PyQt5 框架。它提供了一个直观的图形用户界面,方便用户对图片进行标注,并生成标注结果。LabelImg 支持多种常见的标注格式,如 PASCAL VOC、YOLO等,适用于各种计算机视觉任务。我们之前安装了 Anaconda,这里就直接使用 Anaconda 进行 LabelImg  的安装。

        2.2、在开始菜单中找到并打开 Anaconda 的命令行工具,Anaconda Powershell Prompt 或者 Anaconda Prompt 均可。

        2.3、输入命令使用 python 3.9.16 创建 LabelImg 虚拟机环境。

conda create -n labelimg python=3.9.16

        2.4、输入命令 conda activate labelimg 激活 LabelImg 虚拟机环境 

        2.5、输入命令 conda install labelimg 安装 LabelImg

conda install labelimg

        2.6、如果没有安装成功,提示 PackagesNotFoundError: The following packages are not available from current channels时,通常意味着Anaconda的默认仓库中并没有包含LabelImg这个包,或者该包尚未被加入到你的当前通道中。可以尝试添加一些常用的社区维护的通道,比如conda-forge,这个通道包含了大量额外的包。使用以下命令添加conda-forge通道。

conda config --add channels conda-forge

        2.7、输入命令 labelimg 启动软件。

labelimg

        2.7、将软件切换为标注 YOLO 数据,并设置自动保存(需要注意的是软件使用期间不要关闭 Anaconda 的命令行工具) 。

三、使用 LabelImg 标注数据 

        3.1、创建文件夹 mydata,在mydata 文件夹下分别创建 images 和 labels 两个文件夹。

        3.2、分别在 images 和 labels 下创建 train 文件夹用于存放用于训练的图片文件和图片文件对应的标签。

        3.3、将用于训练的图片放入 mydata/images/train 文件夹后,在 LabelImg 中点击 Open Dir 导入。

        3.4、点击 Change Save Dir,修改存储路径为 mydata/images/train。

         3.5、点击 Create RectBox,对图片进行标注。

        3.6、将标注好数据后的 mydata 文件夹移动至项目根目录下创建文件夹 datasets。 

         

四、编写代码进行训练预测 

        4.1、参考 coco128.yaml 编写 mydata.yaml,类别在 datasets/mydata/labels/classes.txt 中。

#  数据集的根目录路径。
#  由于 YOLOv8 对目录做了默认的一些设置(第一次运行时的位置,而不是当前项目路径来查找),
#  虽然可以修改配置文件或者在代码中指定,但是我觉得在这边使用绝对路径更为方便一些。
path: E:/PyCharmProjects/yolov8_learn/datasets/mydata
# 训练图像位于 images/train,这是相对于 path 的相对路径
train: images/train
# 验证图像也位于 images/train,与训练图像使用相同的路径。
# 需要注意的是,通常训练集和验证集应该包含不同的图像,以确保模型验证的有效性。但在这里,它们使用了相同的图像,这在实际应用中可能不是最佳实践。
val: images/train
# 测试图像的路径,这是一个可选字段。
test:

# 类别
names:
  0: face
  1: leg

         4.2、参考 yolov8.yaml 文件修改出自己的模型配置文件 myyolo.yaml。

# 模型参数
nc: 2 # 类别数(nc),它指定了模型可以检测的不同对象的数量
scales: # 模型缩放常数(scales),用于调整模型的规模,实现不同复杂度的模型设计
  # 深度(depth)、宽度(width)和最大通道数(max_channels)
  # 这些缩放常数会应用到模型的骨架(backbone)和头部(head)结构中,从而得到不同复杂度和性能的模型。
  # 这里定义了五个缩放级别:'n'(小型)、's'(标准型)、'm'(中型)、'l'(大型)和 'x'(特大型)
  n: [0.33, 0.25, 1024] # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs
  s: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs
  m: [0.67, 0.75, 768] # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPs
  l: [1.00, 1.00, 512] # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
  x: [1.00, 1.25, 512] # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs
# YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs 解释如下
# 225 layers: 这表示YOLOv8n模型由225个层组成。这些层包括卷积层、池化层、激活函数层、特征融合层等,它们共同构成了模型的网络结构。
# 3157200 parameters: 这表示模型中总共有3157200个参数。参数是模型在训练过程中需要学习的变量,它们决定了模型从输入图像中提取特征和进行预测的方式。
#  参数的数量通常与模型的复杂度和性能相关,但并非绝对。更多的参数可能会使模型更强大,但也更容易导致过拟合。
# 3157184 gradients: 梯度是在训练过程中用于更新模型参数的值。这里提到的梯度数量与参数数量非常接近,这是因为在反向传播过程中,
#  通常会对每个参数计算一个梯度。这些梯度指示了如何调整参数以最小化训练损失。
# 8.9 GFLOPs: GFLOPs(Giga Floating Point Operations)是浮点运算次数的度量单位,用于衡量模型的计算复杂度。
#  8.9 GFLOPs表示模型进行一次前向传播(从输入到输出)大约需要执行8.9×10^9次浮点运算。这个数值可以帮助评估模型在推理(即预测新数据)时的计算需求,
#  以及在不同硬件上的运行效率。


# 模型的主干网络结构,它负责从输入图像中提取特征。
# 通常,骨架由一系列的卷积层、池化层和其他可能的模块组成,这些层通过下采样来逐渐提取不同尺度的特征。
# 这里使用了 Conv 和 C2f 模块,并指定了它们的参数。
# 每个条目都包含了一个列表,表示了模块的类型、参数以及该模块应用于的层。
# 例如,[-1, 1, Conv, [64, 3, 2]] 表示在上一层(由 -1 指示)之后添加一个卷积层,该卷积层有 64 个输出通道,卷积核大小为 3,步长为 2
backbone:
  # [from, repeats, module, args]
  # from 指示该层或模块是从哪个先前的层或模块获取的输入。这通常是一个索引值,其中 -1 表示前一个层,-2 表示前两个层,依此类推。这允许模型配置中的层引用前面的层作为输入。
  # repeats 表示该层或模块应该重复的次数。这允许你定义重复的层结构,这对于创建深度网络结构特别有用。
  # module 定义了要使用的层或模块的类型。这可以是一个预定义的层类型(如 Conv 表示卷积层),或者是一个自定义的模块(如 C2f,它可能是某种特定的卷积和特征融合模块的组合)。
  # args 是一个列表,包含了传递给 module 的参数。这些参数具体取决于所使用的层或模块类型。例如,对于卷积层,参数可能包括输出通道数、卷积核大小和步长等。
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]] # 9

# 从主干网络提取的特征中检测对象。它可能包括上采样层、特征融合模块以及最终的检测层。多尺度检测是 YOLO 系列模型的一个特点,通过在多个尺度上检测对象,模型可以更好地处理不同大小的对象。
# 这里定义了多个上采样层、连接层(Concat)和检测层(Detect)。上采样层用于增加特征图的尺寸,连接层用于将不同尺度的特征图合并在一起,而检测层则负责在合并后的特征图上检测对象。
# Detect 层接受多个输入(在这里是 P3、P4 和 P5 三个尺度的特征图),并输出每个尺度的检测结果。每个检测结果都包含了边界框的坐标、置信度和类别得分。
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  - [-1, 3, C2f, [512]] # 12

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  - [-1, 3, C2f, [256]] # 15 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]] # cat head P4
  - [-1, 3, C2f, [512]] # 18 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]] # cat head P5
  - [-1, 3, C2f, [1024]] # 21 (P5/32-large)

  - [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5)

        4.3、编写代码,启动训练。我们通过参考 yolov8.yaml 文件修改出自己的模型配置文件 myyolo.yaml,可以调整模型的配置以适应特定的任务和数据集。然而,对于大多数用户来说,直接使用预定义的配置文件(如 yolov8n.yaml、yolov8s.yaml 等)作为起点,并根据需要进行微调可能更为简单和有效。

from ultralytics import YOLO

if __name__ == '__main__':
    # 创建一个新的 YOLO 模型
    # model = YOLO('yolov8n.yaml')
    model = YOLO('myyolo.yaml')
    # 启动模型的训练
    #   1)、data = './datasets/coco128.yaml': 这个参数指定了用于训练的数据集配置文件
    #   2)、epochs=3: 这个参数指定了训练的轮数(或周期)
    #   3)、results = ...: 这行代码将训练过程的结果(如损失值、准确率、模型权重更新等)赋值给results变量。这些结果可以用于后续的分析和模型评估
    results = model.train(data='./datasets/mydata.yaml', epochs=3)

        4.4、训练后的结果将保存到 runs 目录下。

        4.5、编写代码,启动预测。不过这次我们不用 YOLOv8 的模型,使用之前训练后得到的最好的一次结果模型。

from ultralytics import YOLO

if __name__ == '__main__':
    # 预测数据
    # 加载一个预训练模型
    model = YOLO('./runs/detect/train/weights/best.pt')
    # 预测图片 ./assets/zidane.jpg,并保存预测结果
    results = model.predict("./assets/mydata_test.png", save=True)

        4.6、预测后的结果将保存到 runs 目录下。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工厂提高OEE面临哪些挑战?

在工业生产中,提高设备的综合效率(OEE)是企业追求的目标之一。然而,实现高水平的OEE并非易事,工厂在这一过程中可能面临诸多挑战。本文将探讨工厂提高OEE所面临的挑战,并介绍PreMaint提供的解决方案。 提高…

【软件基础】反编译工具dnSpy反编译程序步骤

文章目录 一、dnSpy介绍二、使用版本三、使用步骤 一、dnSpy介绍 dnSpy是一款开源的.NET程序集反编译工具,它允许用户查看和编辑.NET程序集的源代码。dnSpy支持反编译.NET程序集、查看IL代码、编辑IL代码、调试.NET程序集等功能。用户可以使用dnSpy来分析和理解.NE…

【C语言__指针01__复习篇11】

目录 前言 一、什么是指针 二、计算机中常见的单位 三、CPU是怎样找到一块内存空间的 四、如何得到变量的地址 五、指针变量 六、解引用指针变量的作用 七、指针变量的大小 八、指针变量类型的意义 8.1 指针的解引用 8.2 指针-整数 九、void*指针 十、const修饰变…

国外问卷调查如何提高做题成功率?方法来了!

“为什么我做的题总是提交失败?” “做题太慢,收益太少,有什么做题技巧吗?” 以上这些问题,想必是新老玩家在问卷调查这条路上必定会遇到的,特别是新手遇到这类问题不知如何去处理,所以今天IPd…

el-popover放在el-table中点击无反应问题

我们想在table中给btn加弹框但是 el-popover点击按钮没有任何反应思考:通过插槽去添加这个组件el-popover的id是否绑定了一个值解决思路&#xff1a;给每个el-popover都加上单独的id 效果 &#xff1a; 代码 给每个组件都绑定ref <template slot-scope"scope"&g…

七星创客新零售系统:颠覆性商业模式的崛起

大家好&#xff0c;我是微三云周丽&#xff0c;今天给大家分析当下市场比较火爆的商业模式&#xff01; 小编今天跟大伙们分享什么是七星创客新零售系统&#xff1f; 随着经济的快速发展和科技的不断进步&#xff0c;商业模式的革新成为了企业发展的关键。在这个新旧动能转换、…

使用表格法插入公式和编号

如何将公式和编号优雅地插入到论文当中呢&#xff1f; 首先插入一个1行2列的表格 调整一下 输入公式方法一&#xff1a;感觉墨迹公式挺好用的&#xff0c;word自带的 输入公式方法二&#xff1a;图片转LATEX代码 这个方法更快 分享一个公式识别网站 图片识别得到LATEX代码&…

2024 初级信息处理技术员历史真题整理分享

2024 初级信息处理技术员历史真题整理分享 最近软考报名结束了&#xff0c;马上五月份就要考试&#xff0c;想必很多人都在迎战软考吧。 在此我分享一下我整理的一些软考&#xff08;初级信息处理技术员&#xff09;历史真题&#xff0c;供大家学习 历年真题 说明&#xff1a…

Windows本地部署Ollama+qwen本地大语言模型Web交互界面并实现公网访问

文章目录 前言1. 运行Ollama2. 安装Open WebUI2.1 在Windows系统安装Docker2.2 使用Docker部署Open WebUI 3. 安装内网穿透工具4. 创建固定公网地址 前言 本文主要介绍如何在Windows系统快速部署Ollama开源大语言模型运行工具&#xff0c;并安装Open WebUI结合cpolar内网穿透软…

汽车纵染压制专用液压机比例阀放大器

汽车纵染压制专用液压机比例阀放大器是一种专门用于汽车纵梁拉伸工艺的设备&#xff0c;它也可以用于其他金属薄板的压制成型及校正工艺。该类型的液压机通常具备独立的动力机构和电气系统&#xff0c;采用PLC技术进行控制&#xff0c;以确保操作的准确性和稳定性。除了纵梁拉伸…

什么是云专线

云专线是一种企业连接公共云服务提供商&#xff08;如亚马逊AWS、微软Azure、谷歌云等&#xff09;的专用网络连接服务。它是一种私有网络连接&#xff0c;主要目的是提供更可靠、更安全、更高性能的连接&#xff0c;以满足企业对云服务的需求&#xff0c;特别是需要大量数据传…

981: 统计利用二叉树存储的森林中树的棵数

解法&#xff1a; 在数据结构中&#xff0c;森林&#xff08;Forest&#xff09;是一组互不相交的树的集合&#xff0c;而二叉树&#xff08;Binary Tree&#xff09;是每个节点最多只有两个子节点的树。下面介绍如何在森林和二叉树之间进行转换。 森林转换为二叉树&#xff1…

页面分页打印,echarts图解决办法;生成PDF

1&#xff1a;echarts图片前端打印不是很完美&#xff0c;对于VUE2.0版本不是很有好 2&#xff1a;360浏览器不支持vue的最新版本的插件vue3-print-nb 3&#xff1a;vue-print-nb 可以打印带有echarts 一页内容&#xff0c;并且还存在bug&#xff0c;第一次点击打印没有&…

用于车载T-BOX汽车级的RA8900CE

用于车载T-BOX等高精度计时的汽车级时钟模块RTC:RA8900CE.车载实时时钟芯片RA8900CE内置32.768Khz的晶体&#xff0c;实现年、月、日、星期、小时、分钟和秒精准计时。RA8900CE满足AEC-Q200认证&#xff0c;内置温补功能&#xff0c;保证实时时钟的稳定可靠&#xff0c;功耗低至…

X86与FPGA相结合,基于PIB的AI开发——人体姿态识别

人体姿态估计是计算机视觉领域中用于理解和分析人类行为的一个关键技术。它主要涉及到检测和识别图像或视频中人体的各个关键点&#xff0c;并预测这些关键点之间的空间关系&#xff0c;从而构建出人体的骨架模型。 本文将介绍基于PIB板的人体姿态估计案例。这是一个交互式的实…

CentOS-7部署mysql、clickhouse并通过普罗米修斯、grafna监控告警

一、准备工作 1、系统环境 所用镜像&#xff1a;CentOS-7-x86_64-DVD-2009.iso 2、涉及安装包 3、克隆4台虚拟机 用途IP主机名Prometneus服务器192.168.15.129master被监控服务器1192.168.15.133node1mysql、clickhouse、grafana服务器192.168.15.134node2被监控服务器219…

19 Debian如何配置DNS服务(1)缓存服务器

作者&#xff1a;网络傅老师 特别提示&#xff1a;未经作者允许&#xff0c;不得转载任何内容。违者必究&#xff01; Debian如何配置DNS服务&#xff08;1&#xff09;缓存服务器 《傅老师Debian小知识库系列之19》——原创 前言 傅老师Debian小知识库特点&#xff1a; 1、…

MySQL无法打开情况下读取frm文件的表结构

一、背景&#xff1a; 开发人员通过MySQL客户端工具&#xff0c;可以访问MySQL5.7.6&#xff0c;可以访问具体的DB&#xff0c;可以查看小写表的数据&#xff0c;但是无法查看大写表的数据&#xff0c;报错信息为“table does not exist”。 二、检查与分析&#xff1a; ssh登录…

网络安全主题纪录片

网络安全主题纪录片 文章目录 网络安全主题纪录片第四公民黑客帝国系列龙纹身女孩碟中谍系列虎胆龙威4匿名者终结者2&#xff1a;审判日东方快车谋杀案黑客国家公敌我是谁&#xff1a;没有绝对安全的系统黑客军团速度与激情系列十亿美元大劫案勒索软件的背后黑客的恐惧为什么网…

贪心算法-活动安排问题和背包问题

实验6贪心算法-活动安排问题和背包问题 实验目的&#xff1a; 理解贪心算法的基本思想运用贪心算法解决实际问题 实验内容&#xff1a; 采用贪心方法编程实现以下问题的算法 1.如何安排下列活动使得使用的活动场所最少&#xff0c;并给出具体的安排方法。 活动 a b c …