跳转到内容

YOLO

YOLO 全称为 You Only Look Once,是一类流行的物体检测和图像分割模型

YOLO 本身是指一类模型,但有时也会把官方推出的 Python 库 Ultralytics 称为 YOLO。在这种语境下,YOLO 完全可以算是一个深度学习框架。它本身是基于 PyTorch 实现的,提供了很多模型和功能,接口非常简单

请先完成 Miniforge 的安装

然后创建一个 python 3.12 的环境(3.12 是目前 ultralytics 已验证兼容性的最高版本,不过我用 3.13 还没遇到过问题)并激活

Terminal window
# pytorch 可以换成别的名字
mamba create -n pytorch python=3.12
mamba activate pytorch

后续所有命令都在该环境中运行,请确保你激活了正确的环境。

在刚激活的环境里完成 PyTorch 的安装

官方快速入门手册 推荐使用 pip 安装

Terminal window
pip install ultralytics

下载完成后,可通过如下方式测试是否可用

Terminal window
# 如果没有报错,那就是导入成功了
python -c "import ultralytics"

还可以通过如下方式测试是否可用

Terminal window
yolo checks

该命令会打印出非常详细的安装信息。可以简单检查下有没有问题(其中 CUDA:0 意思是第 0 号显卡有可用的 CUDA,并不意味着有问题)。

最后你还可以实际运行个示例来测试功能是否正常

Terminal window
yolo predict model=yolo11n.pt source='https://ultralytics.com/images/bus.jpg'

该命令会使用官方预训练的模型 yolo11n.pthttps://ultralytics.com/images/bus.jpg 这张图片进行预测。模型和图片会下载到当前工作目录,而运行的结果默认保存在当前工作目录的 runs 里。你可以检查下图片是否被正确预测。

目前我没用到这个库,因此暂时作为可选项。事实上这并不是加速必需的,因为 PyTorch 已经自带了 CUDA 运行时。这个库的作用是让你自己写深度学习框架的时候可以加速。

进入 官网 后会看到 NVIDIA 提供了多种安装方式。

鉴于前面的库都使用 pip 安装,此处也使用 pip。不过英伟达在 PyPI 上注册了多个假包来告诉你没有安装正确的版本,且官网的 pip 命令下载的就是假包。

目前 PyPI 上这么多的版本中,只有 nvidia-cudnn-cu11nvidia-cudnn-cu12nvidia-cudnn-cu13 这几个不是假包。请根据显卡的 CUDA 版本下载正确的包。查看 CUDA 版本的方式可参考 PyTorch 的安装 这部分。

Terminal window
# 将 nvidia-cudnn-cu1x 替换为与 CUDA 对应的版本
pip install nvidia-cudnn-cu1x

同样地,下载完成后,可通过如下方式测试是否可用

Terminal window
# 如果没有报错,那就是导入成功了
python -c "import cudnn"

推荐使用 VSCode 来编写 Python 代码,因为 我喜欢 官方力荐且制作了 相关扩展

可以在 VSCode 中安装 Ultralytics Snippets 这个扩展。顾名思义,此扩展就是提供了一些代码片段,不安装并不影响正常使用。

YOLO 有两种用法,分别是 PythonCLI

通过 from ultralytics import YOLO 来导入 YOLO 库。

该库的接口很多,建议阅读 官方文档

YOLO CLI 的基本语法如下

Terminal window
yolo TASK MODE ARGS

其中

  • TASK (可选)是以下之一 detect/segment/classify/pose/obb。如果未明确传递,YOLO 将尝试推断 TASK。detect 是目标检测,segment 是语义分割,其余的我没用过。
  • MODE (必需)是以下之一 train/val/predict/export/track/benchmarktrain 是训练,val 是验证,predict 是预测,export 是导出,benchmark 是基准测试,剩下的那个我没用过。
  • ARGS (可选)是任意数量的自定义 arg=value 键值对,例如 imgsz=320,用于覆盖默认值。这部分较为复杂,不同的 TASK 配置差别极大,建议参考 官方配置说明

更详细的参考请阅读 官方文档

建议新建一个文件夹,并以如下方式命名和使用子文件夹

  • 文件夹YOLO
    • 文件夹bin/ 二进制文件
    • 文件夹data/ 原始数据
    • 文件夹datasets/ 标注后的数据集
    • 文件夹docs/ 文档
    • 文件夹runs/ 运行结果
    • 文件夹scripts/ 脚本代码
    • 文件夹weights/ 权重模型

然后在 VSCode 中按 ctrl + k, ctrl + o,并选择此文件夹打开。

打开文件夹后在 VSCode 中按 ctrl + shift + ~ 新建终端,激活正确的环境并运行

Terminal window
yolo settings datasets_dir="datasets"

之后 YOLO CLI 就会从 datasets 中去寻找数据集,从网上下载的示例数据集也会保存在这个目录里。

YOLO 的训练数据集建议按如下方式组织结构

  • 文件夹example
    • 文件夹images
      • 文件夹train/
      • 文件夹val/
    • 文件夹labels
      • 文件夹train/
      • 文件夹val/

分别把训练集的图片和标签放入 images/trainlabels/train 里,验证集则是 images/vallabels/val。注意图片和标签的文件名必须相同。

然后把 example 这个文件夹放入 datasets 目录下,并在项目根目录新建一个 example.yaml 文件,填写上如下内容

path: example
train: images/train
val: images/val
names:
0: low
1: medium
# 省略剩余的标签

接着运行如下命令

Terminal window
yolo detect train data='example.yaml' model=yolo11n.pt epochs=10 imgsz=640

这会运行目标检测的模型训练,其中数据集是 datasets/example,在 yolo11n.pt 模型的基础上训练,并以 epochs=10 imgsz=640 覆盖默认参数值。更详细的说明请参考 官方文档 - 训练

训练的结果保存在 runs/detect 目录下。

将你要预测的图片放入 data 文件夹里,并运行如下命令

Terminal window
yolo segment predict model=yolo11n-seg.pt source='data' imgsz=320

这会运行语义分割的图片预测,其中数据来源是 data,而模型权重使用 yolo11n-seg.pt,并以 imgsz=320 覆盖默认参数值。更详细的说明请参考 官方文档 - 预测

训练的结果保存在 runs/segment 目录下。