欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

轻松入门计算机视觉!从 YOLOv5 开始,无需任何基础就能学会物体识别、图像分类、轨迹追踪和姿势识别。

最编程 2024-08-09 11:32:51
...

目录

  • 安装 Ultralytics
  • 训练
  • 模型验证
  • 预测 & 识别
  • 导出
  • 追踪
  • 图像分割提取
  • 分类
  • 姿势识别
  • 轨迹生成


Ultralytics YOLOv8 是备受好评的实时目标检测和图像分割模型,主要功能是物体识别、分割图片物体、分类、姿态识别和跟踪等。Ultralytics 支持使用 CPU、GPU 进行训练,支持 x64、arm64 等 CPU 架构,支持苹果的 M1/M2 芯片,支持在边缘设备中训练和使用。

Ultralytics 对于个人免费,使用 【AGPL-3.0 许可】 开源协议,对于企业则需要付费。

Ultralytics 是框架的名称,YOLOv8 是该框架默认携带的模型的版本号,框架默认会自带多种用途模型,我们一般会选择在官方的模型上做训练。

零基础 从 yolo8 入门计算机视觉超简单:物体识别、图像分类、轨迹追踪、姿势识别_v8

Ultralytics YOLOv8 的物体识别功能很强大,如下图所示,能够准确识别图片中化了妆的妹子为 person(人类),甚至把床也识别出来了。

零基础 从 yolo8 入门计算机视觉超简单:物体识别、图像分类、轨迹追踪、姿势识别_加载_02

使用 Ultralytics,一般会经历以下过程:

  • 训练(Train)模式:在自定义或预加载的数据集上微调您的模型。
  • 验证(Val)模式:训练后进行校验,以验证模型性能。
  • 预测(Predict)模式:在真实世界数据上释放模型的预测能力。
  • 导出(Export)模式:以各种格式使模型准备就绪,部署至生产环境。
  • 跟踪(Track)模式:将您的目标检测模型扩展到实时跟踪应用中。
  • 基准(Benchmark)模式:在不同部署环境中分析模型的速度和准确性。

所以,本文也会按照该顺序,逐步讲解。

安装 Ultralytics

一般来说,直接使用 pip 安装即可。

# 从PyPI安装ultralytics包
pip install ultralytics

官方文档的安装方式是最详细的,其它安装方式直接参考官方文档即可。

官方安装文档:https://docs.ultralytics.com/zh/quickstart/#ultralytics

安装 ultralytics 之后,在项目中使用 YOLO 名称引入 ultralytics:

from ultralytics import YOLO

ultralytics 默认是从运行目录中读写数据集、训练模型的,这样可能会比较乱。

零基础 从 yolo8 入门计算机视觉超简单:物体识别、图像分类、轨迹追踪、姿势识别_v8_03

可以在程序启动时,修改配置运行配置:

# 模型和训练模块,核心
from ultralytics import YOLO
# 设置模块
from ultralytics import settings

# 更新设置
settings.update({'runs_dir': './' , 'tensorboard': False})

settings 也可以导出配置,或者从文件中加载配置:

def load(self):
        """Loads settings from the YAML file."""
        super().update(yaml_load(self.file))

    def save(self):
        """Saves the current settings to the YAML file."""
        yaml_save(self.file, dict(self))

    def update(self, *args, **kwargs):
        """Updates a setting value in the current settings."""
        super().update(*args, **kwargs)
        self.save()

    def reset(self):
        """Resets the settings to default and saves them."""
        self.clear()
        self.update(self.defaults)
        self.save()

settings 可以设置的全部配置如下:

名称

示例值

数据类型

描述

settings_version

'0.0.4'

str

Ultralytics settings 版本

datasets_dir

'/path/to/datasets'

str

存储数据集的目录

weights_dir

'/path/to/weights'

str

存储模型权重的目录

runs_dir

'/path/to/runs'

str

存储实验运行的目录

uuid

'a1b2c3d4'

str

当前设置的唯一标识符

sync

True

bool

是否将分析和崩溃同步到HUB

api_key

''

str

Ultralytics HUB API Key

clearml

True

bool

是否使用ClearML记录

comet

True

bool

是否使用Comet ML进行实验跟踪和可视化

dvc

True

bool

是否使用DVC进行实验跟踪和版本控制

hub

True

bool

是否使用Ultralytics HUB集成

mlflow

True

bool

是否使用MLFlow进行实验跟踪

neptune

True

bool

是否使用Neptune进行实验跟踪

raytune

True

bool

是否使用Ray Tune进行超参数调整

tensorboard

True

bool

是否使用TensorBoard进行可视化

wandb

True

bool

是否使用Weights & Biases记录

训练

ultralytics 中常见的文件格式有两种,模型以 .pt 结尾,模型或数据集以 .yaml 结尾。

可以基于官方模型进行训练,或者从已有模型进行训练,甚至在没有模型的情况下训练出自己的模型。

如果已经有模型,则无需再次训练。

官方文档的 demo 如下:

下面的代码不能直接启动。

from ultralytics import YOLO

# 加载一个模型
model = YOLO('yolov8n.yaml')  # 从YAML建立一个新模型
model = YOLO('yolov8n.pt')  # 加载预训练模型(推荐用于训练)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # 从YAML建立并转移权重

# 训练模型
results = model.train(data='coco128.yaml', epochs=100, imgsz=640)

官方的 yolov8n.pt 模型和 coco128.yaml 数据集,主要是人、动物、常见物体,可用于物体识别。

如果选择使用官方模型,则第一次使用时,会自动下载 yolov8n.pt 到代码所在目录。

我们先来看看 .train() 训练模型时的参数。epochs 表示训练多少轮,一般 10 轮即可,100轮需要非常久的!imgsz 表示图片大小,当数据集的图片大小太大时,可以适当降低像素,官方的数据集图片大小是 640*480 ,已经提前处理好大小了。

coco128.yaml 是官方提供的数据集合,有 128 张图片,在程序首次运行时,会自动从官方仓库中拉取数据集存储到 datasets/coco128 下面,其中里面包含了一些图片和标注。当然,我们也可以从开源社区中获取更多的数据集,以及自己制作数据集,用来训练模型。

零基础 从 yolo8 入门计算机视觉超简单:物体识别、图像分类、轨迹追踪、姿势识别_数据集_04

然后再回到加载模型这里。

我们通过官方配置文件,从零训练出一个模型:

from ultralytics import YOLO

# 加载一个模型
model = YOLO('yolov8n.yaml')  # 从YAML建立一个新模型

# 训练模型
results = model.train(data='coco128.yaml', epochs=10, imgsz=640)

零基础 从 yolo8 入门计算机视觉超简单:物体识别、图像分类、轨迹追踪、姿势识别_v8_05

由于笔者只有 AMD 5600G,是集成显卡,因此跑起来特别慢。

如果你有指定的多个,可以在训练时指定:

results = model.train(data='coco128.yaml', epochs=10, imgsz=640, device=0)

如果不指定,框架会自动选择 GPU。

可能笔者是 AMD 的 CPU,也有可能是因为不支持集成显卡,所以笔者是使用 CPU 训练的,超级慢。

零基础 从 yolo8 入门计算机视觉超简单:物体识别、图像分类、轨迹追踪、姿势识别_加载_06

训练出的模型会存储在 detect 目录下。其它两种方式训练的模型也是如此,都会在 detect 目录下。

零基础 从 yolo8 入门计算机视觉超简单:物体识别、图像分类、轨迹追踪、姿势识别_数据集_07

我们也可以导入已有的模型:

# 加载官方预训练模型
# model = YOLO('yolov8n.pt')
# 训练过的模型
model = YOLO('detect/train/weights/best.pt')

在使用 .train() 训练模型时,可以传递很多参数,全部参数说明如下:



描述

model

None

模型文件路径,例如 yolov8n.pt, yolov8n.yaml

data

None

数据文件路径,例如 coco128.yaml

epochs

100

训练的轮次数量

patience

50

早停训练的等待轮次

batch

16

每批图像数量(-1为自动批大小)

imgsz

640

输入图像的大小,以整数表示

save

True

保存训练检查点和预测结果

save_period

-1

每x轮次保存检查点(如果<1则禁用)

cache

False

True/ram, disk 或 False。使用缓存加载数据

device

None

运行设备,例如 cuda device=0 或 device=0,1,2,3 或 device=cpu

workers

8

数据加载的工作线程数(如果DDP则为每个RANK)

project

None

项目名称

name

None

实验名称

exist_ok

False

是否覆盖现有实验

pretrained

True

(bool 或 str) 是否使用预训练模型(bool)或从中加载权重的模型(str)

optimizer

'auto'

使用的优化器,选择范围=[SGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp, auto]

verbose

False

是否打印详细输出

seed

0

随机种子,用于可重复性

deterministic

True

是否启用确定性模式

single_cls

False

将多类数据作为单类训练

rect

False

矩形训练,每批为最小填充整合

cos_lr

False

使用余弦学习率调度器

close_mosaic

10

(int) 最后轮次禁用马赛克增强(0为禁用)

resume

False

从最后检查点恢复训练

amp

True

自动混合精度(AMP)训练,选择范围=[True, False]

fraction

1.0

训练的数据集比例(默认为1.0,即训练集中的所有图像)

profile

False

在训练期间为记录器分析ONNX和TensorRT速度

freeze

None

(int 或 list, 可选) 在训练期间冻结前n层,或冻结层索引列表

lr0

0.01

初始学习率(例如 SGD=1E-2, Adam=1E-3)

lrf

0.01

最终学习率 (lr0 * lrf)

momentum

0.937

SGD动量/Adam beta1

上一篇: 简易教程:用卡尔曼滤波预测物体运动轨迹(附带源代码)

下一篇: 用Java实现车辆轨迹预测:为什么它很重要?宋浩然博士的分享