画像認識で注目のYOLOとは?物体検出の仕組みやメリット・デメリット、実装方法まで徹底解説

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

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

スマートデバイスの普及やデジタル技術の進歩により、画像認識技術も向上しています。

画像認識アルゴリズムである「YOLO」は、リアルタイムで画像の位置と名前が推定できるディープラーニング技術として注目され続けています。画像分析の分野にパラダイムシフトを起こした革新的な技術で、すでに私たちの身近なところでも使われているのをご存じでしょうか。

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

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

目次

「YOLO」とは?何の略?

YOLOは、画像や動画に映っている物体を高速で検出できる高性能の画像認識アルゴリズムです。YOLOという名称は「You Only Live Once (人生一度きり)」という英文を「You Only Look Once(一度だけ見る)」に変えて頭文字を並べたものです。

人間のように入力画像から一度の処理で物体認識できることを端的に表した言葉であり、2015年にワシントン大学のJoseph Redmon氏らによってYOLOに関する最初の論文が発表されました。※1

このYOLOは現役の手法で「物体検出の代表格」といっても過言ではありません。その主な理由は以下の特徴にあります。

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

その活用の場は小売店から農業、医療現場まで多岐に渡ります。

YOLOの開発はJoseph Redmon氏らオリジナル開発者だけでなく、複数の組織によって独自に改良が進められてきました。

アルゴリズムの基本的な概念や構造を基に、使いやすさを追求したバージョンや特定の領域の性能を高めたバージョンなど、さまざまな派生版が生まれています。

YOLOの仕組みと他の手法との違い

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

まず、YOLO以前の物体検出では以下の手法が主に用いられていました。

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

これらの手法を用いる物体検出アルゴリズムでは、まず物体を検出した後、別のAIモデルで物体を識別するという2つのステップを踏む必要がありました。

YOLOでは物体の検出から識別までを1つの畳み込みニューラルネットワーク(Convolutional Neural Network:CNN)が担います。YOLOでの物体検出の流れは以下の通りです。

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

以上の流れをすべて1つのモデルで完結させてしまうため、処理速度が高速になります。この特徴により、YOLOによる高精度なリアルタイム物体検出が可能になっています。。

なお、画像認識全般について詳しく知りたい方は、下記の記事を合わせてご確認ください。

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は、物体の特徴まで捉えます。そのため、学習範囲外の物体に対しても検出・識別(一般化)も可能です。具体的には次のようなことができます。

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

なお、画像認識が可能なAIについて詳しく知りたい方は、下記の記事を合わせてご確認ください。

YOLOのデメリット

高精度で高速な物体検出が可能なYOLOですが、デメリットも存在します。

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

現状ではYOLOも万能なアルゴリズムではないため、苦手な要素を十分に理解した上で利用することが大切です。それぞれ詳しくみていきましょう!

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

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

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

YOLOで密集した物体を識別するには、縮尺を変えたり、物体同士の密度を下げたりなどの工夫が必要です。

小さい物体の検出が苦手

YOLOは小さい物体の検出精度も低いと言われています。こちらは高解像度の画像を用意したり、画像を拡大したりすると精度向上が期待できるでしょう。

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

YOLOの事態を理解するには、自分で操作して体験することが重要です。

今回は無料で利用可能なGoogle Colaboratoryを用いて、YOLOによる物体検出の具体的なやり方を分かりやすく解説します。それでは早速、物体検出のための準備から始めましょう!

下準備:Google ColaboratoryとYOLOの実行環境構築

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

まず、YOLOの実行に必要な環境・ライブラリを準備します。

自分のGoogleアカウントにログインした後、Google Colaboratoryにアクセスします。

「ノートブックを開く」から「ノートブックを新規作成」を選択します。

今回はトレーニング済みのYOLOモデルが使えるオールインワンのPythonライブラリ「Ultralytics」を利用してみましょう。以下のコマンドを入力して実行してください。!pip install ultralytics

実行後、以下のような画面になれば、インストール成功です。メッセージの下部に「Successfully Installed ultralytics-(version名)」が表示されています。

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: 640x480 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: 480x640 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: 480x640 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は、2015年の発表以来、画像認識分野で多くの注目を集めてきました。

物体の検出から識別までを1つのAIモデルでこなすYOLOの特徴は、以下の通りです。

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

この特徴を活かし、製造業や小売業、農業など幅広い分野での活躍が見込まれています。

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

サービス紹介資料

生成系AIの業務活用なら!

・生成系AIを活用したPoC開発

・生成系AIのコンサルティング

・システム間API連携

最後に

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

「YOLO」の可能性を理解し、生成AI活用の道を広げることで、高速かつ高精度な物体検出がもたらすビジネスチャンスを掴めるかもしれません。

株式会社WEELは、自社・業務特化の効果が出るAIプロダクト開発が強みです!

開発実績として、

・新規事業室での「リサーチ」「分析」「事業計画検討」を70%自動化するAIエージェント
・社内お問い合わせの1次回答を自動化するRAG型のチャットボット
・過去事例や最新情報を加味して、10秒で記事のたたき台を作成できるAIプロダクト
・お客様からのメール対応の工数を80%削減したAIメール
・サーバーやAI PCを活用したオンプレでの生成AI活用
・生徒の感情や学習状況を踏まえ、勉強をアシストするAIアシスタント

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

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

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

生成AIを社内で活用していきたい方へ
無料相談

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

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

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

投稿者

  • 2sc

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

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