一、下载安装YOLO框架

1、先保证你已经有了python环境、anaconda或miniconda、pytorh、pycharm......这些基础的都懒得讲的一些基本环境和工具

2、然后说明一下现在YOLO的名字也叫ultralytics,因为YOLO是ultralytics库提供的命令行工具,就像node和npm,有了node.js你才可以用"npm install xxx"、"npm run serve"......来安装、运行npm操作

所以yolo的官网就是ultralytics,不要觉得奇怪或者以为进错了网站

官网:https://docs.ultralytics.com/#where-to-start

进去之后找到这个点击

3、然后命令行直接pip下载

我个人是比较推荐的,直接输入他给的命令

二、大概知识点

1、先知道yolo三大要素

【模式:mode】

其实就是所有模型通用的一整个训练过程,YOLO也是一样的

        我们以前在学习机器学习基础的时候,可能这几个模式步骤是需要我们拆分自己写的,但是现在YOLO有了现成的完整模型,你只需要单独用其中一个模式,来检验你的数据通过这个模式的YOLO跑完是个什么结果就行

【任务: Task】

各种模型有各自的任务,那么YOLO主要是针对图像处理,细分的任务如下

2、yolo模型【预测predict】的代码

1)命令行检测一张图片

我们打开终端黑窗口,输入下面类似的命令就可以体验yolo模型的检测效果了

具体含义如下:

2)py代码检测一个视频

现在我们用py代码来,不能老是用终端了

创建一个.py文件,然后输入以下代码(文件名记得换成你自己的MP4文件)

from ultralytics import YOLO

# 先实例化一个运用yolo11n模型、并任务是目标检测的YOLO对象
yolo = YOLO(model='yolo11n.pt', task='detect')
# 然后告诉这个对象要检测的目标文件是哪一个,并且确认检测后的视频结果保存
result = yolo(source='VID20220927214524.mp4', save=True)

就可以得到一个视频预测结果了

3)不止可以检测图片视频、还可以屏幕、摄像头

注意,检测屏幕需要用到mss库,要另外下载

3、认识参数

1)用什么模型

        yolo分了4、5、6、7....12这么多版本,而每个版本其实还进一步细分了:【n、s、m、l、x】这几个类型,这就是为什么我们在predict预测的时候,会看到这样的代码

        这些配置对应的是YOLO每个版本的 “模型规模变体”—— 比如YOLO11中,虽然他们都属于 YOLO11 系列,但通过调整depth(深度)、width(宽度)、max_channels(最大通道数)这 3 个参数,衍生出了不同大小、速度、精度的模型

        我们可以到ultralytics安装路径下找到这些配置文件,终端输入如下命令找到ultralytics安装路径

        这个相对路径下【ultralytics \ cfg \ models \ 11】就能看到yolo11系列模型的配置文件了,点开就能看到YOLO这个版本的 “模型规模变体”分类

        具体来说是各个类型模型的区别如下,总结来说我们的电脑一般就用【yolo11n~yolo11m】就够了,n最快、s中等、m计算精度更高但更慢,后面的l、x我们没有这个需求,企业的大型服务器才用得到

另外解释一下,对应不同的【任务】这几个配置文件各不同

        还有我想吐槽一下网上一些博主是不是傻杯,连yolov5、yolov8....这些模型还要单独下载,更有甚者说yolo11n、yolo11s这些模型也要分别提前下载,浪费学员时间是吧,你pip直接一键下载安装好ultralytics后,yolov3~yolov12全都有了,然后你直接写代码,你要用yolo11n的话,代码执行那一刻就会自动去下载安装yolo11n.pt这个模型文件,然后用它运行,怎么还有傻呗这个都不知道

2)置信度

2)原理、以及别的参数

         机器原始的预测(推理)这个阶段是出于整个模型学习的第2阶段,那么我们调的参数就属于第3阶段,叫做【后处理】

其实那么多参数,在【预测predict阶段】我们只需要关注最重要的3个后处理参数:

  • 1、上面讲的【conf置信度】
  • 2、【iou阈值】:越接近1,说明对预测框贴近真实框的准确性越高
  • 3、【max_det预测最大限数】:其实影响没有前两者大,有兴趣自己了解吧~

        然后【训练train阶段】、【预测predict】....这些阶段还有其他的很多参数,但是不需要都去学,一般用到某个功能的时候再学就行

4、【预测predict】后返回的对象的一些有用的属性

这里我用的是notebook来写,记得要有这些操作

还是一样创建yolo对象然后检测

然后我们要看检测完的对象有什么属性信息,就是执行这个代码

display(result)

(放大看)

然后result是个list列表,你要看具体一张图某一个属性比如boxes,就要用result[i].boxes

  • 因为我们这里只检测了一张图,所以就用result[0].boxes

三、yolo模型【训练train】的代码

我上一篇讲过怎么准备数据集的,请各位先准备一下自己的数据集再来进行接下来的步骤

上一篇:

1、yaml文件准备

现在我们还需要准备一个yaml文件,就相当于前端要手动配置一个.env文件似的,就是指名:你项目的路径、训练集路径、测试集路径、验证集路径、以及要检测的目标对象都有哪些类别......

ultralytics本身就提供了一些模板,我们可以学习一下大致的模板,来怎么写我们自己的yaml文件,你可以执行这个命令找到ultralytics的目录路径:

import ultralytics
print(ultralytics.__file__)

然后复制路径跳转到这里,打开cfg文件夹的dataset文件夹,就会看到各种检测项目对应的yaml文件

那么可以点开几个分析一下,大致就是这样写,有脑子的现在应该指定怎么写自己的yaml了

那么这里我准备了一些库里和其他球星的照片,并先按最简单的初学者的文件结构整理了

数据标注这块我用的是label-tudio,前面也介绍过了

对于多人合照中框选人脸,我觉得用矩形框框住每个人的脸就行,也就是【目标检测(用矩形框标注特定对象)】,那么可以对应label-studio官网的模板【Object Detection with Bounding Boxes

        注意这里我翻了个致命错误,就是先把图片数据集分类成train和val了,然后在label-studio的一个项目里给train和val两个文件夹图片打标签,然后分别到导出,结果就是标注文件里出现了很多上一格文件夹里重复打过的标注文件

        一定要先在整个数据文件夹先打完标签导出,然后再批量修改文件名,然后再分类!!!现在我随即选前12个图片和标签作为训练集,后面的是验证集

现在我们的网站还会给我们这两个文件,根据这两个文件我们就可以写自己的yaml文件

可以照我这样写,实在不会就把这两文件发给AI让它帮你写

2、开始训练模型(先看完再操作)

去到官网,复制他的示例代码:https://docs.ultralytics.com/modes/train/#usage-examples

【关于参数】:

from ultralytics import YOLO

# 采用最新的yolo11n模型
model = YOLO("yolo11n.pt")  # load a pretrained model (recommended for training)

# 开始训练
results = model.train(data="curry.yaml", epochs=10, imgsz=640, device="cpu", workers=0)
# data="xxx.yaml" → 「yaml文件的所在路径」
# epochs=10 → 「训练多少轮」,训练次数越多机器学习得更好,但是要避免过拟合化,比如机器只记住了这几张图片,别的图像有一点区别就识别不了
# device=? → 「用CPU还是GPU训练训练」,用CPU训练是device='cpu',用GPU训练是device=0(0号GPU)或device=1(1号GPU),一般我们电脑也就一块显卡
# imgsz=640 → 「训练图片的大小」,训练时,所有输入的图片都会被自动缩放成「640×640 像素的正方形」,必须接收固定大小的图片才能批量训练
# batch=16 → 「每次喂给模型多少张图」,比如batch=16,就是每次拿 16 张球星合照一起训练模型,这里我们用默认的,不去设置这个参数
# workers=0 → 「用多少线程加载数据」,比如workers=2,就是同时开 2 个线程一起读数据。
#       Windows 系统对多线程的兼容性很差,workers>0经常会出现 “文件读不到、权限错误” 的 bug,
#       所以这里设workers=0(只用 “主线程” 加载数据)—— 虽然加载慢一点,但百分百稳定,不会出奇怪的报错。

在执行训练代码之前,还有几点要留意:

注意!注意!注意!注意!

【致命司马pytorch不适配GPU世界难题(不想用GPU只用CPU的可以不看这里)】

        CPU可以训练,但是会很久;GPU训练才是最快的,但是不只是你电脑有NVIDIA显卡就可以跑GPU了,pytorch还需要安装可以适配GPU的版本才可以跑GPU

1、先去你的控制台输入这段代码看看你的pytorch能不能跑GPU

import torch
print("✅ PyTorch版本:", torch.__version__)
print("✅ 显卡是否可用:", torch.cuda.is_available())

2、然后有一个致命问题:

  • 有的人是安装了一个完美匹配的全局低版本的python,应该不会有这个问题
  • 而我安装的是anaconda的python,我当前conda的python环境是3.12,不适配可以跑GPU的pytorch版本,所以必须要有一个低一点版本的python环境
    • 所以必须先创建一个这么个低版本的虚拟环境,全局是最新版本的还得删除了整个python重新下载安装,具体要下载什么版本的python环境、pytorch?先看你的CUDA版本

    • 然后去问一下AI,这是我问到的结果,我就照着这个区间去安装了

  • 现在,创建一个3.7 ~ 3.10版本的python虚拟环境

  • 还有,有些人不知道,就算你终端激活了虚拟环境,如果你pycharm编译器的解释器没有选择这个新的虚拟环境,那么pycharm运行的时候依旧是别的python环境!!!!直到你打开pycharm解释器时,前面()里是你创建的虚拟环境时,才算激活成功

创建激活虚拟环境的命令:

conda create -n 你自定义虚拟环境的名字 python=3.9
conda activate 你自定义虚拟环境的名字

下载的操作:

  • 1)我发现国内镜像源里不知道为什么清华、阿里的库里愣是没有适配CUDA的pytorch,我一天下载了20次,没有一次能下载成功,全部爆红说:“库里没有这个安装包”,我真TM服了。
    • 所以我的做法是安装超级超级超级超级超级超级超级超级超级超级慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢的官网下载路径,保证不会错,但是下载时间需要10小时以上(我无奈了,我是晚上开始下载然后开着电脑到第二天上午10点打开看才下载完的)
      • # 先卸载conda安装的残留包
        pip uninstall torch torchvision torchaudio -y
        
        # 用pip安装适配CUDA 12.5的版本(官方源,肯定能下载,但是至少10小时以上)
        pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 --index-url https://download.pytorch.org/whl/cu124

1)一次性训练完

        前面我讲的是怎么用GPU跑模型,那其实不用GPU也行,就是慢一点点,我们现在用cpu跑,device='cpu'这样,然后运行,会得到如下图所示

2)中断训练后接着训练

假如我们在训练的时候突然中断了,比如电脑关机、死机了,我们下次不用重新从第一轮训练,找到last.pt,我们直接以这个文件接着训练就行

例子:

然后代码成这样

from ultralytics import YOLO

# 这次就不是用官方yolo11n模型了,而是用我们刚刚训练了一半的模型
# 这个路径前价格r,表示这个路径里的“\”是普通字符,不需要转义
model = YOLO(r"F:\我自己的毕设\YOLO_study\runs\detect\train\weights\last.pt")
# 或者\\双斜杠也可以
# model = YOLO("F:\\我自己的毕设\\YOLO_study\\runs\\detect\\train\\weights\\last.pt")

# 继续训练,不用再写之前那些参数,只用写resume
results = model.train(resume=True)

3、测试模型是否成功(先看完再操作)

        我们刚刚用yolo11n模型训练我们自己的数据集,生成得到了符合我们自己要求的新模型,这个模型就在最新的【train4文件及】里的【best.pt】

可以取出来给他换个名字,然后基于它的基础来检验【验证集】的数据,看这个模型预测得准不准

from ultralytics import YOLO

# 先实例化一个运用yolo11n模型、并任务是目标检测的YOLO对象
yolo = YOLO(model='你自己刚刚训练完的模型.pt')

result = yolo(source='一张数据集里没有的新图片', save=True)

结果发现没有识别出任何东西是吧?这是因为首先人脸识别要求就很高,训练次数和数据集都要很多,第二。。。。。。我们本身数据集就少得可怜

所以我决定换一个项目,换成区别类型明显、而且数据集更多的项目,这里省略前面的数据集前置步骤,就简单说一下我准备了50张手机、电脑的训练图片和20张验证图片,然后训练100轮,看看结果。。。。结果很让人崩不住

于是我烦了,不再手动找数据集,直接拿现成的

然后还是一样把下载下来的数据集整理成规范化的文件结构

然后train训练、训练完取出best.pt换个名字放根目录,然后拿个新的图predict预测一下

结果发现效果还是很差。。。于是我去问了一个b站资深老哥

        他的回答就是:如果数据集没有上千上万上亿个,就别指望模型能够准确识别出新的图像,一个好的模型98%是靠海量数据喂出来的,所以哪怕网上的几百张图像的数据集依旧不够,那么对于我们本科期间只需要让机器跑完模型后,能把原来的图片识别出来就够了,就相当于把它当成个傻子,只要它做过的题还记得答案就已经不错了

所以这样就足够了,不必纠结这个问题重点在于优化算法和展示,下一篇讲这些

更多推荐