yolo 学习
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的很小的意思意思

模型:
模型是什么任务类型?
模型可以预测哪些类型?
模型有多大?
有哪些现成的模型?

预测选项就是对 预测过程中提出一些额外的要求
就在项目的mypredict.py中添加一行对应的选项
选项的顺序不重要,
大部分预测选项都需要深入了推理过程后才能理解
现在只需要知道什么叫预测选项就好了,怎样找到说明书,以及怎样添加选项就行。
训练就是准备好数据集和模型 然后不断把数据集投喂给模型 模型慢慢的就掌握了预测的能力
训练这个过程有三块内容值得关注:
第一块内容是数据集 :必须搞清楚我们需要预测什么,搞清楚后我们就可以开始准备对应的数据集,比如想要预测路上的车辆,恰好已经有人做过这种数据集,我们就可以直接拿过来用。如果想要预测一些比较特殊的目标,比如坤坤手办,那就只能亲自动手制作一个数据集。
第二块内容是模型:需要搞清楚打算用数据集训练哪个模型,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 得到的不同预测结果和真实结果对比一下 得到三种曲线三个值


更多推荐

所有评论(0)