YOLOとは?仕組みやメリット・デメリット、実装方法まで徹底解説

YOLO 仕組み メリット デメリット Python 実装方法

WEELメディア事業部AIライターの2scです。

みなさん、「YOLO」はご存知ですか?

YOLOはリアルタイムで画像の位置と名前が推定できるディープラーニング技術。画像分析の分野にパラダイムシフトを起こした超すごい技術で、すでに私たちの身近なところでも使われ始めています。

当記事では、そんなYOLOを徹底解説。そのしくみ・メリット・デメリットから、Pythonでの使い方まで余すところなくお伝えしていきます。

完読いただくと、YOLOとストリーミングカメラで、いろいろ作ってみたくなるかも……
ぜひぜひ、最後までお読みください!

目次

「YOLO」とは?

「YOLO」は、AIモデルを使った画像分析(映像分析)の手法の一つ。厳密には、画像分析のなかでも、ある物体について画像中での位置を探し出すタスク「物体検出」へのアプローチです。(※1)

このYOLOは現役の手法で「物体検出の代表格」といっても過言ではありません。その理由にあたる特徴・すごいところはというと……

● YOLO以前の手法に比べて、しくみがシンプルで処理も高速
● 入力した画像について、一瞬で複数の物体を検出可能
● 検出した物体について、バウンディングボックス・クラス(物体の名前)・信頼度を出力
● 2016年登場の初代v1から現行版までバージョンアップを続けている
 (2024年9月時点の最新版はv10)

以上のとおり。その活躍の場は小売店から生産ライン、医療現場まで多岐に渡ります。

ちなみに、YOLOの名前自体は「You Only Look Once(見るのは一度だけ)」の略称。後述するしくみを表していて、英語のスラング「You Only live Once(人生一度きり)」のもじりにもなっています。

YOLOの仕組み

YOLOの処理速度は、それまでの物体検出の手法と比べてはるかに高速です。その秘訣は、YOLOに採用された革新的なしくみにあります。

まず、YOLO以前の物体検出では……

YOLO以前の物体検出の手法
  • スライディングウィンドウ法:フレームを画像の端から端まで徐々にスライドさせて物体のある場所を探し出す。その後、別のAIモデルで物体を識別する。(※2)
  • 領域提案法:画像を格子状に分割して物体のある場所だけを切り抜く。その後、別のAIモデルで物体を識別する。(※1)

以上のとおり1.物体を検出して、2.別のAIモデルで物体を識別するという2ステップを踏む必要がありました。

対して、YOLOでは物体の検出から識別までを1つのディープラーニングモデル(CNN)が担います。具体的にはは……

YOLOでの物体検出の流れ
  1. 画像を格子状(グリッドセル)に分割
  2. 物体の場所・名前を予測
    • バウンディングボックスの候補を列挙&物体が存在する確率を算出
    • 同時にクラス(物体の名前)が合っている確率も算出
  3. 物体が存在する確率とクラスが合っている確率を掛け合わせた「信頼度」を含めて出力

以上の流れをすべて、1つのAIモデルで完結させてしまうというわけです。

結果として、YOLOでは高速処理が実現。なんと、リアルタイムでの物体検出が実現しています。

なお、AIモデルの学習データの集め方について詳しく知りたい方は、下記の記事を合わせてご確認ください。

YOLOのメリット

1つのAIモデルで物体の検出から識別までをこなすYOLOには、下記4点のメリットがあります。

  • リアルタイムでの物体検出が可能
  • 高精度
  • 導入が容易
  • 一般化が可能

以下、それぞれについて詳しくみていきましょう!

リアルタイムでの物体検出が可能

画像を小分けにして1つのAIモデルで素早く処理を行うYOLOなら、リアルタイムでの物体検出が行えます。

そのため、従来の手法では難しかったストリーミングカメラとの連携が実現。各種監視カメラや自動車のADAS(先進運転支援システム)への組み込みが可能となっています。

高精度

従来の手法と異なり、YOLOでは背景も含めて包括的に画像を分析します。そのため物体検出・識別の精度が大幅UP。あらゆる用途での使い勝手が向上しています。

導入が容易

個人から企業まで、誰でも簡単に導入・利用できるのもYOLOの強みです。

というのも、YOLOはオープンソースソフトウェアのため、完全無料で使用可能。さらに全バージョンで「AGPL-3.0ライセンス」を採用しているため、下表のとおり商用利用まで自由にできてしまうんです。

利用用途可否
商用利用
改変
配布
特許使用
私的利用
参考:https://github.com/THU-MIG/yolov10

また「pip install」で使えるPython用のライブラリも出ていて、こちらなら……

  • トレーニング済みのYOLOモデルの利用
  • YOLOモデルのカスタマイズ
  • YOLOモデルを使った物体検出システムの構築

が簡単に始められます。

一般化が可能

ディープラーニングモデルを採用したYOLOは、物体の特徴まで捉えます。そのため、学習範囲外の物体に対しても検出・識別(一般化)も可能。具体的には……

  • 本物の花の画像を学習させた状態で、花のイラストを識別させる
  • 学習範囲外のニホンアナグマを識別させる(後述)

といったことができてしまいます。

なお、YOLOの学習データの下処理について詳しく知りたい方は、下記の記事を合わせてご確認ください。

YOLOのデメリット

革新的なYOLOですが、デメリットも存在します。それは……

  • 密集した物体の同時識別が苦手
  • 小さい物体の検出も苦手

こちらの2点です。以下、順を追って詳しくみていきましょう!

密集した物体の同時識別が苦手

YOLOは密集した複数の物体を同時に検出・識別することが苦手。その原因は、画像を細かい区画(グリッドセル)に分けてから分析する、というしくみにあります。実はこのしくみには……

● 分割した1区画内で、検出できる物体の数は2つまで
● 分割した1区画内で、名前を識別できる物体の数は1つまで

という制約があるんです。

そのためYOLOで密集した物体を識別する際には、縮尺を変えたり、物体同士の密度を下げたりといった工夫が必要になるでしょう。

小さい物体の検出も苦手

YOLOは小さい物体に対しても、検出精度が落ちてしまいます。こちらは高解像度の画像を用意したり、画像を拡大したりすることで克服が可能です。

YOLOによる物体検出をPythonで実践!

ここからは、Google ColaboratoryのPython環境上でYOLOを使ってみて、その使い方から性能までを実演していきます。それでは早速、物体検出の前の下準備から、始めていきましょう!

下準備

今回はGoogle ColaboratoryのPython環境上で、YOLOの最新版「YOLOv10」を動かしてみます。

初めに、YOLOを使うにあたって必要な環境・ライブラリは……

YOLOを動かすのに必要な環境
  • Python 3.8以降
  • PyTorch 1.8以降をインストール済み

以上のとおり。こちらは適宜ご用意ください。

続いて、肝心のYOLOですが、今回はトレーニング済みのYOLOモデルが使えるオールインワンのPythonライブラリ「Ultralytics」から用意します。こちらは……

!pip install ultralytics

以上のソースコードを実行するだけでインストールが可能!実行後、以下のような画面になれば、インストール成功です。

Ultralyticsライブラリのインストール後はお待ちかね、YOLOモデルのロードになります。今回はすぐに使えるトレーニング済み(pretrained)の最新版「YOLOv10」を使いますので……

#YOLOv10-Nをロード
from ultralytics import YOLO
model = YOLO("yolov10n.pt")

以上を実行しましょう。実行してみると……

ロードが完了して、いつでもYOLOが使えるようになります。

最後に、物体検出させたい画像をGoogle Colabにアップロードします。こちらは「content」ディレクトリ内に新しくファイルを作って画像を格納しておくと、後のコーディングが楽です。今回は……

このように「images」という名前でフォルダを作ってみました!

それでは次項から、YOLOでの物体検出を試していきましょう。

物体検出

ここからは、実際にYOLOを使って物体検出を試していきます。手始めに、物体検出用のソースコードを下記の関数にまとめて、使いやすくしましょう!

#画像フォルダをカレントディレクトリに指定
%cd images
#YOLOの一連コードを関数化
def detect_objects_in_image(model, image_path):
    results = model(image_path)
    return results

あとは、下記のソースコードを実行するだけで結果が得られます。

#画像の読み込み
image_path = '画像ファイル名.jpg'
results = detect_objects_in_image(model, image_path)

ここからさらに、バウンディングボックス・クラス(物体の名前)・信頼度を画像上に表示させたい場合は……

#バウンディングボックスの表示
import cv2
import numpy as np
from google.colab.patches import cv2_imshow

def visualize_results(image_path, results):
    img = cv2.imread(image_path)
    for r in results:
        boxes = r.boxes
        for box in boxes:
            x1, y1, x2, y2 = box.xyxy[0]
            cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
            cv2.putText(img, f"{r.names[int(box.cls.item())]}", (int(x1), int(y1)-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0,255,0), 2)
            cv2.putText(img, f"{box.conf}", (int(x1)+300, int(y1)-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0,255,0), 2)

    cv2_imshow(img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

# 使用例
visualize_results(image_path, results)

以上を付け加えることで準備完了です。それでは早速、下記の画像3枚でYOLOの実力をみていきましょう!

1枚目の画像
2枚目の画像
3枚目の画像

まずは、1枚目「猫がお腹を見せて寝そべっている写真」をYOLOに読み込ませてみます。その結果は……

YOLOの結果

image 1/1 /content/images/S__58638343_0.jpg: 640×480 1 cat, 1 dog, 1 frisbee, 188.1ms
Speed: 3.2ms preprocess, 188.1ms inference, 0.4ms postprocess per image at shape (1, 3, 640, 480)

以上のとおりで、猫の検出・識別に成功しました。ただ、猫を「犬」としてもカウントしていたり、落ち葉を「フリスビー」と誤認していたりと細かな粗も目立ちます。このあたりは、さらなるトレーニングが必要そうですね。

さて、気を取り直して2枚目「ニホンアナグマの写真」もYOLOに読み込んでもらいましょう!YOLOv10はニホンアナグマを知らないはずですが、その結果はいかに……

YOLOの結果

image 1/1 /content/images/S__58638340_0.jpg: 480×640 1 bear, 186.9ms
Speed: 3.4ms preprocess, 186.9ms inference, 0.3ms postprocess per image at shape (1, 3, 480, 640)

見事、YOLOはニホンアナグマに対して、アドリブで「クマ」と識別してくれました。ディープラーニングならではの汎用性・余裕が生きていますね。

最後に、3枚目「ソファーの上で猫が寝そべっている写真」でも、YOLOの実力を試してみます。気になる結果は……

YOLOの結果

image 1/1 /content/images/S__58638346_0.jpg: 480×640 1 cat, 1 couch, 183.9ms
Speed: 4.2ms preprocess, 183.9ms inference, 0.3ms postprocess per image at shape (1, 3, 480, 640)

お見事です!「猫」に加え、なんと「ソファー(couch)」まで検出・識別してくれています。専用のトレーニングをしていない状態でここまで識別できるとは……YOLO、恐るべしですね。

YOLOの活用・応用事例

リアルタイムで高精度な物体検出ができるYOLOは、幅広い分野での活躍が見込まれています。代表的な活用・応用事例を挙げると……

  • 自動車の運転支援・自動運転
    • 信号機の検出・色の識別(※3)
    • 道路標識(停止線・ダイヤマーク)の検出・識別(※4)
  • 製造ラインの異常検知
    • 積層信号灯(パトランプ)の光色の検出・識別(※5)
    • 牛の柄による個体識別(※6)
    • 鶏の行動パターン識別(※6)
  • 医療での画像診断
    • エコー画像の異常所見の検出(※7)
  • 人流計測
    • 観光地での人流の分析(※8)
    • 災害対策への応用(※8)
  • 商品管理
    • 商品棚の欠品の検出(※9、10)
  • セキュリティ・防犯対策
    • 不審人物の検出(※11)

以上のとおり。その他、合成データを活用したトレーニングの効率化にも注目が集まっています。(※10)

工夫次第でいろいろできちゃう……かもしれませんね。

なお、合成データについて詳しく知りたい方は、下記の記事を合わせてご確認ください。

「YOLO」ならリアルタイム&高精度の物体検出が実現!

当記事では、ディープラーニングを応用した物体検出の手法「YOLO」について解説しました。

ここまで述べてきたとおり、物体の検出から識別までを1つのAIモデルでこなすYOLOには……

● リアルタイムでの物体検出が可能
● 高精度
● 導入が容易
● 一般化が可能

以上のメリットが存在。製造業/ 小売業 / 観光業…etc.幅広い分野で、活躍が見込まれています。

比較的簡単に使えますのでぜひぜひ、一度その実力を体感してみてくださいね。

最後に

いかがだったでしょうか?

弊社では

・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
ハルシネーション対策AIツールの開発
自社専用のAIチャットボットの開発

などの開発実績がございます。

まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。

➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。

生成AIを社内で活用していきたい方へ
商用利用可能な画像生成AIレポート

「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。

セミナー内容や料金については、ご相談ください。

また、弊社紹介資料もご用意しておりますので、併せてご確認ください。

投稿者

  • 2sc

    テクニカルライター 大学時代はアリの生態を研究。 ラボで唯一、Pythonを使ってデータ分析を効率化していた。 現在はライターとして、オウンドメディアや学術記事の執筆に当たっている。

  • URLをコピーしました!
  • URLをコピーしました!
目次