classify

model=YOLO(r“yolo11n-cls.pt”)

print(model,task)

print(model.names)

分类预测可以预测足足1000种类型

旋转目标检测的类型也是不太一样的

一共15种类型,都是俯瞰视角常用的类型

from ultralytics import YOLO

model =YOLO(r"yolo11n-pose.pt")

姿态估计模型只能预测person一种类型

,因为它只针对人体的姿态

from ultralytics import YOLO

model =YOLO(r"yolo11n-pose.pt")

print(model.task)

print(model.name)

实例分割模型比较特殊

支持同样的80种类型

from ultralytics import YOLO

model=YOLO(r“yolo11n.pt”)

print(model.task)

print(model.names)

在训练的时候就先要弄清楚,想要用YOLO预测哪些类型,最后训练得到的模型就只能预测哪些类型

yolo11n.pt 这个模型的大小

yolo11n 中 的n是nano的很小的意思意思

模型:

        模型是什么任务类型?

        模型可以预测哪些类型?

        模型有多大?        

        有哪些现成的模型?

Releases · ultralytics/assets

预测选项就是对 预测过程中提出一些额外的要求

就在项目的mypredict.py中添加一行对应的选项

选项的顺序不重要,

大部分预测选项都需要深入了推理过程后才能理解

现在只需要知道什么叫预测选项就好了,怎样找到说明书,以及怎样添加选项就行。

yolo 模型官网

训练就是准备好数据集和模型 然后不断把数据集投喂给模型 模型慢慢的就掌握了预测的能力

训练这个过程有三块内容值得关注:

                第一块内容是数据集 :必须搞清楚我们需要预测什么,搞清楚后我们就可以开始准备对应的数据集,比如想要预测路上的车辆,恰好已经有人做过这种数据集,我们就可以直接拿过来用。如果想要预测一些比较特殊的目标,比如坤坤手办,那就只能亲自动手制作一个数据集。

                第二块内容是模型:需要搞清楚打算用数据集训练哪个模型,Ultralytics为我们准备好了各种版本,各种大小的模型。我们只需要进行一个选择就可。

                第三块内容是训练选项:启动训练对我们来说就是,点击一下运行的事情。但是在训练前有一堆的训练选项可以调整,这个训练选项可以影响训练的速度和最终效果。

                需要提前确定的投喂细节:

                一共要喂多烧轮 ——> epochs=?

                图片缩放到多少?  ——>imgsz=?

                每个批次打包多少张图片?——>batch=?

                要不要缓存加速一下训练? ——>cache=?

                要不要多来几个进程加载数据集?——>workers=?

下面重点关注:数据集和部分训练选项

        具体包含五个章节:

                1、跑通最简单的YOLO训练

                2、理解什么是数据集

                3、按章Labellmg        

                4、逛一逛一些现有的数据集

                5、如何让训练跑到更快一些?

                

%appdata%  里面的Ultralytics里面只用保留persistent_cache.json

什么是数据集?

YOLO需要什么样的数据集?

训练就是把一堆图片和对应的标签 喂给 模型 训练几轮就喂几次。

实际上比这稍微复杂一些。

通常会把图片和标签随机划分一下,

比如7:3 或者8:2 多的部分叫做训练集,少的部分叫做验证集,每一轮训练就分为两个步骤。

先使用训练集更新模型的参数。这是真正意义上的训练,再使用验证集测试看看模型效果好不好。

学术上叫验证,所以一轮一轮的训练实际上是 训练验证=> 训练验证 不断重复这两步的过程。

每一轮训练都可以看到两个进度条:

第一个进度条就是在用训练集训练

第二个进度条是用验证集验证。

为什么要验证呢? 我可不可以不验证? 单纯训练,当然可以。

只需要加一个参数 val=False;  去除验证步骤

from ultralytics import YOLO
if __name__ == '__main__':
    model=YOLO(r"yolo11n.pt")
    model.train(
        data=r"coco8.yaml",  #我们打算训练coco8这个数据集
        epochs=30,   #我们打算训练10轮
        imgsz=640,
        batch=2,
        cache=False,
        workers=0,
        val=False,
    )

此时只有一行,

验证集训练有助于我们训练出更好的模型。刚入门知道验证很重要就好了。

除了验证集,一些数据集还会再分一小部分出来,作为测试集,比如搞个7:2:1或者8:1:1

训练集和验证集的作用和之前的一样。每一轮都会用到。

测试集不用到,它的作用是等到整体训练结束后,可以用来评估一下模型的效果。

评价不同模型的好坏,一般就是看谁能在测试集上,取得更好的效果。

YOLO的数据集通常包括三个部分,训练集、验证集、测试集。每一部分都有一堆对应的图片和标签。测试集可有可无,训练过程中用不到,如果有的话可以在训练结束后给模型打个分。

如何为YOLO提供训练集和验证集?

需要准备两样东西

训练开始的时候,就会自动根据配置文件的内容,找到训练集和验证集的图片和标签。

image train 和label train

下载labelimg操作。

conda env list

conda -n labelimg python=3.8

conda activate labelimg

打开labelimg操作

为了可视化标签,需要给labelimg提供三个路径

        1、图片文件夹路径

        2、classes.txt 路径

        3、标签文件夹路径

、

classes.txt 必须放到标签文件夹下

如何让训练跑得更快!

训练效率

无法从这个数据里获取更多有用的信息。

我们需要透过现象看本质:

训练效率的背后是这四种硬件资源的利用率

CUDA

简单来说,在 YOLO(以及整个深度学习领域)中,CUDA 就是让你的模型跑得“飞起”的核心加速引擎。

为了让你更好地理解底层逻辑,我们可以借用一张图来看看它是如何工作的:

1. CUDA 到底是什么?

CUDA(Compute Unified Device Architecture,统一计算架构)是 NVIDIA(英伟达) 公司推出的一种并行计算平台和编程模型。

它的核心作用是:让你能够绕过图形API,直接利用显卡(GPU)强大的并行计算能力,来处理复杂的通用计算任务。 在 YOLO 中,这个任务就是处理海量的图像数据和神经网络的矩阵乘法。

两个高效率训练的典型特征:

一是:cuda的利用率又高又稳

二是:所有资源利用率都不到100%

训练过程中大部分计算都是由cuda承担的,所以只要cuda能达到很高的利用率,自然就是全力训练的状态了。

那为什么有要求所有的资源利用率都不能到达100%呢,因为一旦有资源利用率到达100%,那就那么会报错,要么就会触发一些系统的“挽救”措施机制,这些机制就会导致训练速度变慢。

训练就是把一堆图片加标签喂给模型,每一轮都会喂一次,实际情况会比这个稍微复杂一点,在把图像喂给模型会有一个缩放的操作,比如imgsz=640,我们希望把图片缩放成640的大小

imgsz的大小什么时候可以更改?

数据集里的图片尺寸普遍比640高很多,并且目标普遍比较小

batch设置为-1,yolo会自动帮你计算batch的合理数字

将batch设置为-1 正式训练开始前会多出一个AutoBatch环节,就是在帮我们就是帮我们计算一下batch用多少比较合适。

有没有现成的数据集?

先问老板,导师,好朋友们,看他们手头有没有现成的数据集?

 怎样获取图片?

怎样获取标签?

怎么划分数据集?

怎样训练自己的模型?

训练好了,然后呢?

不管用什么模型。什么数据集训练,训练过程中每一轮是不是会打印出一堆数字。训练结束的时候是不是也会看到一堆曲线。

验证的过程究竟在干什么,训练过程中的一堆数字,训练结束后的一堆曲线都是什么意思?如何手动验证?通过验证可以更精确的理解模型的预测能力。为评价模型,改进模型提供最核心的依据。

学习过程中,也将了解YOLO推理和训练过程中的更多细节。

验证理解:

验证就是选一组图片和对应的标签,用模型预测一下图片,接着拿预测结果和真实结果对比一下,然后得出一个相似度,相似度越高,代表模型的预测能力越强。

实际上事情比这个复杂,因为相似度是一个非常模糊的概念。

当我们开始仔细分析预测结果和真实结果的差异,就会发现一堆问题。

判断 预测对错

如何判断一个结果是否是正确的?

我们需要一个具体的标准来评价对错。

目标检测领域通常使用IoU算法 来评价两个框的接近程度。

IOU解释:

计算交集面积/并集面积就是IoU了

IoU全称Intersection over Union

知道如何判断IoU了接着就是做一些统计的工作

具体就是关注TP FP FN这三个指标

TP  True Positive 真正例   =精准命中

FP False Positive 假正例  =“虚惊一场/误报”

FN False Negative 假反例 =“致命漏网/漏报”

推理后处理

推理过程中的细节

预测的过程分为三个过程:

     

后处理

第一步使用conf阈值筛选掉低概率的框

conf全称confidence,也就是置信度的意思。简单理解就是概率。

比如把conf设置为0.25,意思就是把概率低于0.25的框全部去掉。

第二部是用NMS过滤掉重复的预测结果

同一个真实目标,多个检测结果,只保留概率最高的那个。

限制一下预测结果的总数。

比如max_det设置成300

去弱,去重,限量

再次梳理一下整个过程:        

现在要评价一个模型的表现

我们把模型根据不同conf 得到的不同预测结果和真实结果对比一下 得到三种曲线三个值

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐