YOLOとは?仕組みやメリット・デメリット、実装方法まで徹底解説
WEELメディア事業部AIライターの2scです。
みなさん、「YOLO」はご存知ですか?
YOLOはリアルタイムで画像の位置と名前が推定できるディープラーニング技術。画像分析の分野にパラダイムシフトを起こした超すごい技術で、すでに私たちの身近なところでも使われ始めています。
当記事では、そんなYOLOを徹底解説。そのしくみ・メリット・デメリットから、Pythonでの使い方まで余すところなくお伝えしていきます。
完読いただくと、YOLOとストリーミングカメラで、いろいろ作ってみたくなるかも……
ぜひぜひ、最後までお読みください!
「YOLO」とは?
「YOLO」は、AIモデルを使った画像分析(映像分析)の手法の一つ。厳密には、画像分析のなかでも、ある物体について画像中での位置を探し出すタスク「物体検出」へのアプローチです。(※1)
このYOLOは現役の手法で「物体検出の代表格」といっても過言ではありません。その理由にあたる特徴・すごいところはというと……
● YOLO以前の手法に比べて、しくみがシンプルで処理も高速
● 入力した画像について、一瞬で複数の物体を検出可能
● 検出した物体について、バウンディングボックス・クラス(物体の名前)・信頼度を出力
● 2016年登場の初代v1から現行版までバージョンアップを続けている
(2024年9月時点の最新版はv10)
以上のとおり。その活躍の場は小売店から生産ライン、医療現場まで多岐に渡ります。
YOLOの仕組み
YOLOの処理速度は、それまでの物体検出の手法と比べてはるかに高速です。その秘訣は、YOLOに採用された革新的なしくみにあります。
まず、YOLO以前の物体検出では……
- スライディングウィンドウ法:フレームを画像の端から端まで徐々にスライドさせて物体のある場所を探し出す。その後、別のAIモデルで物体を識別する。(※2)
- 領域提案法:画像を格子状に分割して物体のある場所だけを切り抜く。その後、別のAIモデルで物体を識別する。(※1)
以上のとおり1.物体を検出して、2.別のAIモデルで物体を識別するという2ステップを踏む必要がありました。
対して、YOLOでは物体の検出から識別までを1つのディープラーニングモデル(CNN)が担います。具体的にはは……
- 画像を格子状(グリッドセル)に分割
- 物体の場所・名前を予測
- バウンディングボックスの候補を列挙&物体が存在する確率を算出
- 同時にクラス(物体の名前)が合っている確率も算出
- 物体が存在する確率とクラスが合っている確率を掛け合わせた「信頼度」を含めて出力
以上の流れをすべて、1つのAIモデルで完結させてしまうというわけです。
結果として、YOLOでは高速処理が実現。なんと、リアルタイムでの物体検出が実現しています。
なお、AIモデルの学習データの集め方について詳しく知りたい方は、下記の記事を合わせてご確認ください。
YOLOのメリット
1つのAIモデルで物体の検出から識別までをこなすYOLOには、下記4点のメリットがあります。
- リアルタイムでの物体検出が可能
- 高精度
- 導入が容易
- 一般化が可能
以下、それぞれについて詳しくみていきましょう!
リアルタイムでの物体検出が可能
画像を小分けにして1つのAIモデルで素早く処理を行うYOLOなら、リアルタイムでの物体検出が行えます。
そのため、従来の手法では難しかったストリーミングカメラとの連携が実現。各種監視カメラや自動車のADAS(先進運転支援システム)への組み込みが可能となっています。
高精度
従来の手法と異なり、YOLOでは背景も含めて包括的に画像を分析します。そのため物体検出・識別の精度が大幅UP。あらゆる用途での使い勝手が向上しています。
導入が容易
個人から企業まで、誰でも簡単に導入・利用できるのもYOLOの強みです。
というのも、YOLOはオープンソースソフトウェアのため、完全無料で使用可能。さらに全バージョンで「AGPL-3.0ライセンス」を採用しているため、下表のとおり商用利用まで自由にできてしまうんです。
利用用途 | 可否 |
---|---|
商用利用 | ⭕ |
改変 | ⭕ |
配布 | ⭕ |
特許使用 | ⭕ |
私的利用 | ⭕ |
また「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を使うにあたって必要な環境・ライブラリは……
- 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枚目「猫がお腹を見せて寝そべっている写真」を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はニホンアナグマを知らないはずですが、その結果はいかに……
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の実力を試してみます。気になる結果は……
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.幅広い分野で、活躍が見込まれています。
比較的簡単に使えますのでぜひぜひ、一度その実力を体感してみてくださいね。
- ※1:ディジタル画像処理 [改訂第二版] – CG-ARTS|公益財団法人 画像情報教育振興協会
- ※2:2章 機械学習による画像理解
- ※3:【自動運転】信号機認識に挑む / 走行画像15,000枚のアノテーションとYOLOXモデルによる深層学習実践
- ※4:自動運転における深層学習を用いた道路標識の認識
- ※5:ディープラーニングの産業利用の事例紹介
- ※6:YOLOの畜産分野における利用事例 修士課程1年 渠 一村
- ※7:画像診断における人工知能の応用と超音波 AI の開発
- ※8:画像認識 AI を用いた人流実測および車流実測技術
- ※9:棚から売上へ:Ultralytics チームによるYOLOv8 「在庫管理への影響」の探求
- ※10:疑似的に生成した商品棚画像を用いた商品物体検出
- ※11:セキュリティアラームシステム・プロジェクトUltralytics YOLOv8
最後に
いかがだったでしょうか?
弊社では
・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
・ハルシネーション対策AIツールの開発
・自社専用のAIチャットボットの開発
などの開発実績がございます。
まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。
➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。
「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。
セミナー内容や料金については、ご相談ください。
また、弊社紹介資料もご用意しておりますので、併せてご確認ください。