Skip to main content

YOLO Family

YOLO (You Only Look Once) は、画像全体を一度の forward で見て detection を行う real-time object detector の系譜です。Real-time / edge deployment で広く使われ、industrial / robotics / autonomous vehicle / production system において de facto standard の一つです。

設計思想

  • Backbone (CSPDarknet、ELAN、ConvNeXt 系)
  • Neck (FPN / PAN による multi-scale feature)
  • Head (anchor-based / anchor-free / DFL)

を grid 上で同時推論するため、real-time inference が可能になります。

主要バージョン

Version主な貢献
YOLOv1Real-time grid detection
YOLOv2 / v3Anchor、multi-scale、Darknet-53
YOLOv4 / v5Bag of freebies / specials、簡単な PyTorch 実装
YOLOXAnchor-free、SimOTA
YOLOv6 / v7Industrial 向け軽量化、E-ELAN
YOLOv8Anchor-free、segmentation / pose 統合
YOLO-WorldOpen-vocabulary real-time detection
YOLOv9 / v10 / v11+NMS-free、DFL、最新 backbone

YOLO-World

YOLO-World は、CLIP の text encoder を YOLOv8 系に組み込み、real-time open-vocabulary detection を実現します。Grounding DINO のような heavy DETR と異なり、edge / streaming で使いやすい点が特徴です。

強みと弱み

観点YOLO 系
速度非常に速い
Deploymentエッジ・mobile に強い
精度 (closed set)DETR 系と競合
Open-vocabularyYOLO-World で対応
Long-tailTwo-stage / DETR 系が有利な場合あり
Set predictionNMS が必要 (v10 以降で NMS-free に)

数式で見る one-stage detection

YOLO 系は、画像を一回の forward pass で dense に予測します。各位置または anchor が objectness oio_i、class probability pi(c)p_i(c)、bbox bi\mathbf{b}_i を出します。概念的な loss は次のように分けられます。

L=λboxLbox+λobjLobj+λclsLcls\mathcal{L}=\lambda_{box}\mathcal{L}_{box} +\lambda_{obj}\mathcal{L}_{obj} +\lambda_{cls}\mathcal{L}_{cls}

Objectness は「この予測が object を含んでいるか」を表し、bbox loss は localization を合わせます。近年の YOLO では、bbox loss に CIoU / DIoU / GIoU 系の loss が使われることがあります。

Lbox=1IoU(b^,b)+center / aspect penalties\mathcal{L}_{box}=1-\mathrm{IoU}(\hat{\mathbf{b}},\mathbf{b})+\text{center / aspect penalties}

この式の気持ちは、「box が重なるだけでなく、中心位置や縦横比も自然に合わせたい」ということです。One-stage detector は候補生成と分類を分けないため高速ですが、positive / negative の割り当てや class imbalance の扱いが性能に大きく影響します。

関連ページ

主なソース