🚀

【超入門】「YOLO」って何がすごいの?物体検出モデルの仕組みから実践まで解説!

に公開

はじめに

本記事では、初心者の方に向けて YOLO(ヨロ) という物体検出モデルについて、基礎から実践までをわかりやすく解説していきます。

画像認識技術に興味があるけれど、「どこから手をつけていいか分からない」「YOLOって名前は聞くけど、何がすごいの?」という方の疑問を解消する内容になっています。

YOLOの概念イメージ

概要

YOLOとは何か?

YOLO(You Only Look Once) とは、一言で表すと、非常に高速で高精度な「リアルタイム物体検出・画像セグメンテーションモデル」のことです。

現在(特にUltralyticsが提供するYOLO)は、単なる特定の物体を枠で囲む機能にとどまらず、画像分類、セグメンテーション、姿勢推定、トラッキングなど幅広いタスクに対応できる包括的な技術へと成長しています。

導入も非常に簡単で、Pythonのライブラリ(パッケージ)を使って数行のコードを書くだけで、最先端のモデルを誰でも手軽に動かすことができます。

YOLOは何が優れているのか?(従来モデルとの違い)

まずは、YOLOが何をしていて、これまでの技術とどう違うのか、その「立ち位置」を明確にしましょう。

画像認識分野には、いくつかのお決まりのタスクがあります。

  • 画像分類(CNNなど): 「この画像には猫が写っている」と画像をまるごと判定する。
  • 物体検出(R-CNN, YOLOなど): 「画像のどこに何が写っているか」を四角い枠(バウンディングボックス)で囲んで判定する。

YOLOは、この「物体検出」を行うための機械学習モデルです。
YOLOが登場する前は、R-CNN(領域ベースのCNN)というモデルが主流でした。R-CNNは「ここに物体がありそう」という候補をいくつも探し出し、その一つ一つに対して「それは何か」を判定する2段階(Two-Stage)のアプローチをとっていました。精度は高いものの、処理に時間がかかる点が弱点でした。

そこに現れたのがYOLOです。
YOLOは「画像を1回見るだけで、どこに何があるか一気に予測する」という1段階(One-Stage)のアプローチを確立し、物体検出の常識を覆しました。

この革新的なアプローチにより、YOLOは主に以下の3点で世界中から圧倒的な支持を集めています。

  • 圧倒的なスピード(リアルタイム処理)
    動画やカメラのリアルタイム映像に対しても、遅延なく瞬時に物体を検出できます。

  • 🌍 背景の誤認識が少ない(全体把握)
    R-CNNのように画像の一部だけを切り取って判断するのではなく、画像全体を一度に見るため、「背景の一部を物体と勘違いする」というミスが少ないです。

  • 🛠️ シンプルで使いやすい
    一つのニューラルネットワークで完結しているため、システムへの組み込みや学習が比較的シンプルです。

YOLOの仕組みと「Darknet」

YOLOは、その名(You Only Look Once)の通り、「画像を一度に全体として処理する」という画期的な手法を採用しています。

1. 画像全体を一気に処理する仕組み

具体的な物体検出のプロセスは、以下のステップで驚異的なスピードを実現しています。

  1. 画像をマス目に分ける: まず、画像を細かい網目(例: 13 \times 13 のグリッド)に分割します。
  2. マス目ごとに並列で予測する: 各グリッドが、「自分の中心に物体があるか?」「それは何か?」「枠の大きさは?」という情報をすべて同時に計算します。
  3. 結果を統合して出力する: 全てのマス目の予測結果を集め、確率の低い枠や重複している枠を綺麗に整理し、最終的な結果を一気に出力します。

R-CNNが「虫眼鏡で画像のあちこちを少しずつ覗いて探す」やり方だとすれば、YOLOは「全体をパッと見て、直感的に『ここ!』と一斉に指をさす」やり方です。これが圧倒的なリアルタイム性の秘密です。

2. 軽量・爆速を支えた「Darknet」の思想

この驚異的なスピードの根本を長年支えてきたのが、「Darknet(ダークネット)」と呼ばれるシステムです。
これはYOLOの生みの親であるJoseph Redmon氏が独自にC言語から作り上げたディープラーニング・フレームワークです。

Darknet型バックボーンの技術的な特徴

  • 当時の巨大になりがちなフレームワーク(TensorFlowなど)に対し、「誰でも読めるシンプルなソースコードで、とにかく計算を身軽に速くする」というハッカー的な思想を持って設計されました。
  • 初期のYOLOに積まれていた「Darknet-19」や「Darknet-53」といったバックボーンモデルは、複雑な分岐を持たず、小さなフィルター(3 \times 31 \times 1)を素直に重ねていく**「無駄のない一直線の畳み込み構造」**をとっています。
  • これにより、非常に軽量でありながら、CPU上でもそこそこ動き、GPUを使えば爆速で推論できるシステムが実現しました。

💡「バックボーン(Backbone)」とは?
物体検出モデルにおいて、入力された画像から「この辺に丸い形がある」「ここに赤い色がある」といった特徴を抽出する根幹のネットワーク部分を「バックボーン」と呼びます。人間に例えると、視覚情報を集める「目」と「視神経」にあたる非常に重要な土台です(その後ろに続く部分が、集めた特徴をもとに「これはリンゴだ」と最終判断する「脳」の役割を果たします)。

3. PyTorchへの移行

軽量かつ高速なDarknetでしたが、独自のC言語フレームワークゆえに、他のPythonベースのシステムに組み込む際のハードルが高いという課題がありました。

そこで、YOLOv5以降(現在のv8や最新のYOLO11, YOLO26など)は、開発元のUltralytics社によって機械学習の世界的標準である「PyTorch(パイトーチ)」ベースへと完全に移行されました。

Pythonエンジニアなら誰でも数行のコードで簡単にYOLOを組み込めるようになり、「高速でシンプル」というDarknet時代からの根幹の思想はそのままに、事実上の標準(デファクトスタンダード)として世界中で一気にシェアを広げることになりました。

主なバージョン

YOLOは現在進行形でバージョンアップが続いています。

  • YOLOv1 〜 v3(黎明期・発展期):
    生みの親であるJoseph Redmon氏が開発。v3で精度と速度のバランスが大きく向上し、世界中で大ブレイクしました。
  • YOLOv4(コミュニティによる飛躍):
    Alexey Bochkovskiy氏らが引き継ぎ、さらに最適化。
  • YOLOv5 〜 YOLOv8(使いやすさの革命):
    Ultralytics社が開発。ここで従来のC言語ベース(Darknet)のバックボーンから完全にPyTorchベースへと移行し、導入のハードルが劇的に下がりました。Pythonで数行のコードを書くだけで動かせるようになり、エンジニアにとっての「デファクトスタンダード(事実上の標準)」へと一気に普及しました。v8は現在でも非常に人気が高い安定版です。
  • YOLOv9(新しいアーキテクチャの導入):
    Programmable Gradient Information (PGI) や GELAN といった革新的な手法を導入し、さらに効率と精度を向上させました。
  • YOLOv10(NMSフリーの実現):
    2024年に清華大学の研究チームが発表。従来必要だった「重複した枠を消す処理(NMS)」を不要にする画期的な仕組みを導入し、リアルタイム物体検出をさらに進化させました。
  • YOLO11(マルチタスクへの最適化):
    2024年9月にリリース。物体検出だけでなく、セグメンテーション、姿勢推定、トラッキング、画像分類など複数のタスクで優れたパフォーマンスを発揮します。
  • YOLO26(次世代・エッジ最適化):
    エンドツーエンドのNMSフリー推論を取り入れ、エッジデバイス(スマホ等)へのデプロイメントを高度に最適化した、Ultralyticsの最新世代のもっとも評価の高いモデルです。

https://docs.ultralytics.com/ja/#the-evolution-of-object-detection

メリットとデメリット

万能に見えるYOLOにも、得意・不得意があります。

応用事例

YOLOの「リアルタイムに検出できる」という強みは、様々な分野で重宝されています。
学習済みのモデルを使用するだけでなく、独自のデータセットを用意することで、さらに幅広い応用が可能です。

  • 🚗 自動運転・運転支援システム:
    走行中の車載カメラから、歩行者、他の車両、信号機、標識などを瞬時に検出し、ブレーキやハンドルの制御に活かします。
  • 📷 防犯カメラ・セキュリティ:
    立ち入り禁止エリアへの不審者の侵入検知や、置き去りにされた不審物の検知をリアルタイムに行います。
  • 🏭 工場での外観検査(検品):
    ベルトコンベアを流れる製品から、傷やへこみなどの不良品を一瞬で探し出します。
  • スポーツ分析:
    サッカーやバスケットボールの試合映像から、選手やボールの動きを追跡(トラッキング)し、戦術分析に役立てます。

準備

実際にPythonを使って、YOLOを動かしてみましょう!
今回は最も普及していて使いやすい YOLOv8 を使います。

環境

YOLO(ultralyticsライブラリ)を動かすための前提となる環境は以下の通りです。
基本的には最近のPython環境があれば問題なく動作します。

  • Python: バージョン >=3.8 が推奨されています。(インストールされていない場合は公式サイト等からインストールしてください)
  • PyTorch: バージョン >=1.8 が必要ですが、基本的にはライブラリをインストールした際に自動で良い感じにセットアップされます。
  • カメラ: リアルタイムで遊んでみる場合には、PCのWebカメラなどが必要です。※ノートPC付属のカメラで十分です。

インストール

まずはターミナル(コマンドプロンプト)で、必要なライブラリ ultralytics をインストールします。

pip install ultralytics

https://github.com/ultralytics/ultralytics

これだけでYOLOを動かす準備は完了です。

実践

Pythonスクリプトで、以下のコードを実行します。
たったこれだけのコードで、PCのWebカメラや動画ファイルに写っているものをシステムがリアルタイムに検出してくれます。

from ultralytics import YOLO

# 学習済みのYOLOv8モデルを読み込む(初回は自動でダウンロードされます)
model = YOLO('yolov8n.pt')

# PCのWebカメラ(0番)を指定して推論を実行
# ※ 動画ファイルを使いたい場合は '0' の部分を 'sample.mp4' などに変更してください
# show=True にすることで、検出結果がリアルタイムで画面に表示されます
results = model(source=0, show=True)

プログラムを実行すると、カメラの映像の中から「人(person)」「スマートフォン(cell phone)」などを見つけ出し、四角い枠と確率を重ねてリアルタイムで表示してくれます。

実行結果イメージ
YOLOによる物体検出の実行結果

💡 表示されている「数値」について
枠の上部には bottle 0.92 のように、物体の名前(クラス名)と「数値」が表示されます。
この数値は「信頼度スコア(Confidence Score)」と呼ばれ、モデルが「この枠の中身がその物体であると、どれくらい確信しているか」を 0.0 ~ 1.0 の確率で表したものです。
例えば 0.92 であれば、「92%の確率でこの物体(bottle)に間違いない」とモデルが判断しているという意味になります。

物体検出技術に興味を持った方は、ぜひご自身のWebカメラや身近な動画を読み込ませて、YOLOの圧倒的なスピードと賢さを体感してみてください!

最後に

このアカウントでは、「テクノロジー駆動開発」をコアなテーマにしつつも、機械学習に限らずWeb技術・インフラ・便利ツールなど、個人的に「面白そう!役立ちそう!」と思った技術を幅広く試して発信していきます!
単なる紹介に留まらず、実際の開発にどう活かせるか、手を動かして得た実践的なノウハウを共有していく予定です。

技術のわくわくを一緒に楽しんでいける方は、ぜひZennのフォローをお願いします!次の記事もお楽しみに!

GitHubで編集を提案
EMP Tech Blog

Discussion