«

YOLO 学习笔记

myluzh 发布于 阅读:100 AI


0x01 什么是YOLO

模型大小对比

这边拿YOLO8来对比,通过这组数据可以看出典型的深度学习模型缩放定律(Scaling Laws)

  1. 边际效用递减:从 Nano 升级到 Small,参数量增加了约 3.5 倍,mAP 提升了 7.6 点;但从 Medium 升级到 Large,参数量增加了 1.7 倍,mAP 仅提升了 2.7 点。
  2. 计算量激增:Large 版本的精度仅比 Medium 高出不到 3 点,但计算量(FLOPs)却翻了一倍多(78.9G -> 165.2G),这意味着在实际部署时,Large 版本对显存和推理延迟的要求会高得多。
模型规格 参数量 模型文件体积 FLOPs 精度 (mAP)
Nano (n) 3.2M ~6 MB 8.7G 37.3
Small (s) 11.2M ~22 MB 28.6G 44.9
Medium (m) 25.9M ~52 MB 78.9G 50.2
Large (l) 43.7M ~87 MB 165.2G 52.9

标注工具对比与推荐

工具 (推荐度) 安装/运行 核心特点与适用场景 自动标注
Label Studio (⭐首选) pip 安装 开源免费,支持多任务及 YOLO 导出,适合通用/批量标注
Roboflow 浏览器在线 自带数据增强与格式转换,导出灵活,适合小项目快速出活
CVAT Docker/在线 Intel 开源专业级,支持视频/团队协作,适合大项目/企业级
LabelImg pip/brew 经典极简,原生保存 YOLO 格式,上手快但已停更
Makesense.ai 浏览器在线 免注册、即开即用,轻量极速,适合临时/少量快速标注
# 安装
  # 激活你的虚拟环境
  source /Users/myluzh/Desktop/yolo/.venv/bin/activate
  # 安装 Label Studio
  pip install label-studio
# 启动
(.venv) myluzh@myluzhMacBookPro yolo %   label-studio start
Starting development server at http://0.0.0.0:8080/

如何下载数据集

https://www.kaggle.com/

0x02 安装yolo环境

myluzh@myluzhMacBookPro Desktop % mkdir yolo
myluzh@myluzhMacBookPro Desktop % cd yolo
# 创建一个虚拟环境
myluzh@myluzhMacBookPro yolo % python3 -m venv .venv
myluzh@myluzhMacBookPro yolo % source .venv/bin/activate
(.venv) myluzh@myluzhMacBookPro yolo % pip install --upgrade pip
# 安装YOLO 的核心库 ultralytics
(.venv) myluzh@myluzhMacBookPro yolo % pip install ultralytics
Installing collected packages: mpmath, urllib3, typing-extensions, sympy, six, setuptools, pyyaml, pyparsing, psutil, polars-runtime-32, pillow, packaging, numpy, networkx, MarkupSafe, kiwisolver, idna, fsspec, fonttools, filelock, cycler, charset_normalizer, certifi, scipy, requests, python-dateutil, polars, opencv-python, jinja2, contourpy, torch, matplotlib, ultralytics-thop, torchvision, ultralytics
Successfully installed MarkupSafe-3.0.3 certifi-2026.2.25 charset_normalizer-3.4.7 contourpy-1.3.3 cycler-0.12.1 filelock-3.25.2 fonttools-4.62.1 fsspec-2026.3.0 idna-3.11 jinja2-3.1.6 kiwisolver-1.5.0 matplotlib-3.10.8 mpmath-1.3.0 networkx-3.6.1 numpy-2.4.4 opencv-python-4.13.0.92 packaging-26.0 pillow-12.2.0 polars-1.39.3 polars-runtime-32-1.39.3 psutil-7.2.2 pyparsing-3.3.2 python-dateutil-2.9.0.post0 pyyaml-6.0.3 requests-2.33.1 scipy-1.17.1 setuptools-81.0.0 six-1.17.0 sympy-1.14.0 torch-2.11.0 torchvision-0.26.0 typing-extensions-4.15.0 ultralytics-8.4.36 ultralytics-thop-2.0.18 urllib3-2.6.3
# 测试 如果True就是可以了
(.venv) myluzh@myluzhMacBookPro yolo % python3
Python 3.13.3 (main, Apr  8 2025, 13:54:08) [Clang 17.0.0 (clang-1700.0.13.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
... print(torch.backends.mps.is_available())
True

训练

猫检测模型训练

(.venv) myluzh@myluzhMacBookPro yolo % /Users/myluzh/Desktop/yolo/.venv/bin/python /Users/myluzh/Desktop/yolo/train_cat_yolo26.py
============================================================
YOLOv26 猫检测模型训练
============================================================

训练配置:
  model: yolo26s.pt
  data: cat-dataset/data.yaml
  epochs: 100
  imgsz: 640
  batch: 16
  device: mps
  workers: 8
  patience: 20
  save: True
  project: runs
  name: cat_detect_yolo26
  exist_ok: True
  pretrained: True
  optimizer: AdamW
  lr0: 0.01
  verbose: True
  split: auto

正在加载模型: yolo26s.pt
模型任务类型: detect
模型类别数: 80

开始训练...
------------------------------------------------------------
Ultralytics 8.4.36 🚀 Python-3.13.3 torch-2.11.0 MPS (Apple M1 Pro)
engine/trainer: agnostic_nms=False, amp=True, angle=1.0, augment=False, auto_augment=randaugment, batch=16, bgr=0.0, box=7.5, cache=False, cfg=None, classes=None, close_mosaic=10, cls=0.5, compile=False, conf=None, copy_paste=0.0, copy_paste_mode=flip, cos_lr=False, cutmix=0.0, data=cat-dataset/data.yaml, degrees=0.0, deterministic=True, device=mps, dfl=1.5, dnn=False, dropout=0.0, dynamic=False, embed=None, end2end=None, epochs=100, erasing=0.4, exist_ok=True, fliplr=0.5, flipud=0.0, format=torchscript, fraction=1.0, freeze=None, half=False, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, imgsz=640, int8=False, iou=0.7, keras=False, kobj=1.0, line_width=None, lr0=0.01, lrf=0.01, mask_ratio=4, max_det=300, mixup=0.0, mode=train, model=yolo26s.pt, momentum=0.937, mosaic=1.0, multi_scale=0.0, name=cat_detect_yolo26, nbs=64, nms=False, opset=None, optimize=False, optimizer=AdamW, overlap_mask=True, patience=20, perspective=0.0, plots=True, pose=12.0, pretrained=True, profile=False, project=runs, rect=False, resume=False, retina_masks=False, rle=1.0, save=True, save_conf=False, save_crop=False, save_dir=/Users/myluzh/Desktop/yolo/runs/detect/runs/cat_detect_yolo26, save_frames=False, save_json=False, save_period=-1, save_txt=False, scale=0.5, seed=0, shear=0.0, show=False, show_boxes=True, show_conf=True, show_labels=True, simplify=True, single_cls=False, source=None, split=val, stream_buffer=False, task=detect, time=None, tracker=botsort.yaml, translate=0.1, val=True, verbose=True, vid_stride=1, visualize=False, warmup_bias_lr=0.1, warmup_epochs=3.0, warmup_momentum=0.8, weight_decay=0.0005, workers=8, workspace=None
Overriding model.yaml nc=80 with nc=1

                   from  n    params  module                                       arguments                     
  0                  -1  1       928  ultralytics.nn.modules.conv.Conv             [3, 32, 3, 2]                 
  1                  -1  1     18560  ultralytics.nn.modules.conv.Conv             [32, 64, 3, 2]                
  2                  -1  1     26080  ultralytics.nn.modules.block.C3k2            [64, 128, 1, False, 0.25]     
  3                  -1  1    147712  ultralytics.nn.modules.conv.Conv             [128, 128, 3, 2]              
  4                  -1  1    103360  ultralytics.nn.modules.block.C3k2            [128, 256, 1, False, 0.25]    
  5                  -1  1    590336  ultralytics.nn.modules.conv.Conv             [256, 256, 3, 2]              
  6                  -1  1    346112  ultralytics.nn.modules.block.C3k2            [256, 256, 1, True]           
  7                  -1  1   1180672  ultralytics.nn.modules.conv.Conv             [256, 512, 3, 2]              
  8                  -1  1   1380352  ultralytics.nn.modules.block.C3k2            [512, 512, 1, True]           
  9                  -1  1    656896  ultralytics.nn.modules.block.SPPF            [512, 512, 5, 3, True]        
 10                  -1  1    990976  ultralytics.nn.modules.block.C2PSA           [512, 512, 1]                 
 11                  -1  1         0  torch.nn.modules.upsampling.Upsample         [None, 2, 'nearest']          
 12             [-1, 6]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           
 13                  -1  1    477184  ultralytics.nn.modules.block.C3k2            [768, 256, 1, True]           
 14                  -1  1         0  torch.nn.modules.upsampling.Upsample         [None, 2, 'nearest']          
 15             [-1, 4]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           
 16                  -1  1    136192  ultralytics.nn.modules.block.C3k2            [512, 128, 1, True]           
 17                  -1  1    147712  ultralytics.nn.modules.conv.Conv             [128, 128, 3, 2]              
 18            [-1, 13]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           
 19                  -1  1    378880  ultralytics.nn.modules.block.C3k2            [384, 256, 1, True]           
 20                  -1  1    590336  ultralytics.nn.modules.conv.Conv             [256, 256, 3, 2]              
 21            [-1, 10]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           
 22                  -1  1   1843712  ultralytics.nn.modules.block.C3k2            [768, 512, 1, True, 0.5, True]
 23        [16, 19, 22]  1    932638  ultralytics.nn.modules.head.Detect           [1, 1, True, [128, 256, 512]] 
YOLO26s summary: 260 layers, 9,948,638 parameters, 9,948,638 gradients, 22.5 GFLOPs

Transferred 696/708 items from pretrained weights
train: Fast image access ✅ (ping: 0.0±0.0 ms, read: 68.2±35.1 MB/s, size: 22.2 KB)
train: Scanning /Users/myluzh/Desktop/yolo/cat-dataset/labels... 100 images, 3 backgrounds, 0 corrupt: 100% ━━━━━━━━━━━━ 100/100 3.2Kit/s 0.0s
train: New cache created: /Users/myluzh/Desktop/yolo/cat-dataset/labels.cache
val: Fast image access ✅ (ping: 0.0±0.0 ms, read: 961.4±475.6 MB/s, size: 22.5 KB)
val: Scanning /Users/myluzh/Desktop/yolo/cat-dataset/labels.cache... 100 images, 3 backgrounds, 0 corrupt: 100% ━━━━━━━━━━━━ 100/100 104.9Mit/s 0.0s
optimizer: AdamW(lr=0.01, momentum=0.937) with parameter groups 114 weight(decay=0.0), 126 weight(decay=0.0005), 126 bias(decay=0.0)
Plotting labels to /Users/myluzh/Desktop/yolo/runs/detect/runs/cat_detect_yolo26/labels.jpg... 
Image sizes 640 train, 640 val
Using 0 dataloader workers
Logging results to /Users/myluzh/Desktop/yolo/runs/detect/runs/cat_detect_yolo26
Starting training for 100 epochs...

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
      1/100      9.46G      1.453      3.394    0.02397          8        640: 100% ━━━━━━━━━━━━ 7/7 4.7s/it 33.0s
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 4/4 2.6s/it 10.5s
                   all        100        107     0.0314     0.0841    0.00818    0.00189

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
      5/100      9.52G      2.042      2.469    0.03278         11        640: 100% ━━━━━━━━━━━━ 7/7 1.6s/it 11.3s
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 4/4 1.0s/it 4.1s
                   all        100        107    0.00164    0.00935   0.000188    3.5e-05

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
     35/100      9.46G      1.872      1.949    0.02874         22        640: 100% ━━━━━━━━━━━━ 7/7 1.5s/it 10.8s
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 4/4 1.0s/it 4.1s
                   all        100        107      0.623      0.542      0.597      0.297

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
     60/100      9.52G      1.476      1.231    0.02238          7        640: 100% ━━━━━━━━━━━━ 7/7 1.8s/it 12.8s
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 4/4 1.0s/it 4.2s
                   all        100        107      0.812      0.804      0.905      0.591

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
     80/100      9.52G      1.203     0.8899    0.01873          7        640: 100% ━━━━━━━━━━━━ 7/7 1.6s/it 11.2s
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 4/4 1.1s/it 4.4s
                   all        100        107      0.932        0.9      0.975      0.718

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
     95/100       9.5G      1.009     0.6364    0.02076          4        640: 100% ━━━━━━━━━━━━ 7/7 1.6s/it 11.4s
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 4/4 1.1s/it 4.3s
                   all        100        107       0.91      0.907      0.975      0.737

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
    100/100      9.52G      1.009     0.5043    0.02291          4        640: 100% ━━━━━━━━━━━━ 7/7 1.6s/it 11.1s
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 4/4 1.0s/it 4.2s
                   all        100        107      0.875      0.915      0.971       0.75

100 epochs completed in 0.503 hours.
Optimizer stripped from /Users/myluzh/Desktop/yolo/runs/detect/runs/cat_detect_yolo26/weights/last.pt, 20.3MB
Optimizer stripped from /Users/myluzh/Desktop/yolo/runs/detect/runs/cat_detect_yolo26/weights/best.pt, 20.3MB

Validating /Users/myluzh/Desktop/yolo/runs/detect/runs/cat_detect_yolo26/weights/best.pt...
Ultralytics 8.4.36 🚀 Python-3.13.3 torch-2.11.0 MPS (Apple M1 Pro)
YOLO26s summary (fused): 122 layers, 9,465,567 parameters, 0 gradients, 20.5 GFLOPs
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 4/4 2.8s/it 11.3s
                   all        100        107      0.969      0.887      0.979      0.749
Speed: 0.8ms preprocess, 65.5ms inference, 0.0ms loss, 1.5ms postprocess per image
Results saved to /Users/myluzh/Desktop/yolo/runs/detect/runs/cat_detect_yolo26

训练完成!
最佳模型保存在: runs/cat_detect_yolo26/weights/best.pt
(.venv) myluzh@myluzhMacBookPro yolo % 

yolo yolov8


正文到此结束
版权声明:若无特殊注明,本文皆为 Myluzh Blog 原创,转载请保留文章出处。
文章内容:https://itho.cn/ai/590.html
文章标题:《YOLO 学习笔记