今回はYOLOを使った物体検出をPythonで実践する方法を紹介します。
物体検出とは、画像認識に加えて物体の位置まで判定する技術のことを言います。
まずはどのような技術なのか下記動画をご覧ください。
動画に写っているものが「何であるか」「どこにあるか」というを箱で囲って表しているのがわかります。
画像認識と物体検出の違いを少し簡単に説明しますと、
中級編では画像が犬なのか、猫なのかといった画像に写っているものの画像認識をAIで行いましたが、画像認識では画像がどのクラスに当てはまるかをAIが判定していました。
次のような画像は画像認識AIは簡単に「犬」と判別することができます。
ではこちらの画像は「犬」と判定すべきか、「猫」と判定すべきでしょうか、、、
画像の中に犬も猫も含まれるので画像認識ではどちらとも言えないです。ある部分は犬であり、ある部分は猫といった回答が正解ではないでしょうか。
すなわち、分類と位置を同時に判定することができれば良いことになります。それは先ほど紹介した物体検出を使うことで解決することができます。
物体検出では物体検出ではバウンディングボックスという矩形の中がどのクラスに属するかという判定を行います。
実際にYOLOを使った結果がこちらになります。
犬と猫をそれぞれのバウンディングボックスが囲っており(位置を検出し)、クラス分類できています!
物体検出モデルの有名なものをまとめておきます。
詳しいアルゴリズムが気になる方は下記記事がわかりやすかったですので参考にして下さい。
それでは、YOLOを使った物体検出を実践してみましょう。
当サイトではプログラミングやブログに関する記事の情報投稿をしております。
他の記事もあわせて読んでいただけると嬉しいのでよろしくお願いします!
YOLOとは
YOLO(You Only Look Once)はバウンディングボックスとクラス識別を同時に行うことでリアルタイムに近い処理速度で物体検出を行うアーキテクチャーです。
R-CNNでは物体位置の候補を検出し、それを分類/回帰を行う2Stepで行っていたため処理に時間がかかっておりましたが、YOLOでは処理を1つのネットワークで完結させております。
詳しくは下記記事がわかりやすいです。
YOLO V5の実装
今回はGPUを使うためGoogle Colaboratory を使ってYOLO V5の実装を行います。
Google Colaboratoryの使い方は下記記事を参考ください。
動画等のデータ量の大きなデータは処理に時間がかかりますが、ローカルのPCでも実践することはできます。
今回は画像や動画を扱うのでGoolge Colabratoryでの実践ベースで紹介させていただきます。
初期設定
まずはGoogle Colaboratoryで新しいノートブックを作成し、ランタイムをGPUに設定します。
次にDriveをマウントします。
from google.colab import drive
drive.mount('/content/drive')
カレントディレクトリをマウントしたDriveに変更します。(任意のディレクトリで構いません。私はマウントしたDrive直下にしております。)
%cd /content/drive/MyDrive/
YOLO V5をインストールしましょう。
!git clone https://github.com/ultralytics/yolov5.git
カレントディレクトリにyolov5のフォルダが作成されていればインストール完了です。
最後にYOLOに必要なモジュールをインストールします。
%pip install -qr yolov5/requirements.txt
これでYOLOを実践するための初期設定は完了です。
推論
それでは、学習済みのYOLO V5モデルを使って推論を実践しましょう。
先ほどインストールしたyolov5のフォルダにカレントディレクトリを移動します。
%cd /content/drive/MyDrive/yolov5
推論はyolov5フォルダのdetect.pyを実行するだけで簡単にできます!
!python detect.py --source /content/drive/MyDrive/dogcat.png
Driveにある写真のPathを指定するだけで推論結果を出してくれます。こちらの画像は最初に紹介した犬と猫の画像です。
他にもwebカメラやYouTube動画なども簡単にYOLOを試すことができます。
!python detect.py --source 0 # webcam
file.jpg # image
file.mp4 # video
path/ # directory
path/*.jpg # glob
'https://youtu.be/NUsoVlDFqZg' # YouTube
'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream
実際にYouTubeにあるAppleのAirTagのCM動画にYOLO V5を試してみます。
!python detect.py --source 'https://www.youtube.com/watch?v=ckqvG0Rj35I'
>>> Results saved to runs/detect/exp
Done. (82.119s)
動画時間が長いと処理に時間はかかるので気をつけて下さい。今回は1分ほどの動画なのですぐにできました。
結果
実行結果はカレントディレクトリにruns/detect/expというフォルダが作成され、その中にあります。
YOLOの実行結果になります。
ところどころミス判定はありますが、比較的精度良く物体検出できていることがわかります。
まとめ
今回は学習済みYOLOモデルを使った物体検出の方法を紹介しました。
YOLO以外にも物体検出モデルはいくつかあるので他のモデルも試してみたいと思います。
以前、紹介した転移学習のようにYOLOモデルも再度学習させることで任意の問題設定にあったモデルに進化させることができます。
例えばですが、工業部品の分類や製品/商品の異常検出といった技術に活用が期待されております。
個人的にも何か面白そうなデータセットを見つけたときにチャレンジしたいと思います!
コメント