物体検出でお馴染みのYOLOシリーズの最新版「YOLOv8」について、動かしながら試していきます。
YOLOv8は2023年1月に公開された最新バージョンであり、速度と精度の面で限界を押し広げています。
Google colabを使用して簡単に最新の物体検出モデルを実装することができますので、ぜひ最後までご覧ください。
今回の内容
・YOLOv8の概要
・推論時の入力データ形式
・各引数
YOLOv8とは
YOLOv8は2023年1月に公開された最新バージョンであり、既存のオブジェクト検出器を上回り、速度と精度の面で限界を押し広げています。
物体検出だけでなく、セグメンテーションタスクや画像分類タスクでも利用することができます。
YOLOv8のベンチマーク結果は以下となっています。
物体検出モデル
セグメンテーションモデル
なお、YOLOv8のライセンスは「GNU General Public License v3.0」となっています。
YOLOv8の導入
早速YOLOv8を使って動かしていきましょう。
ここからはGoogle colabを使用して実装していきます。
まずはGPUを使用できるように設定をします。
「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更
GPUの設定が終わったら、Googleドライブをマウントします。
導入
from google.colab import drive
drive.mount('/content/drive')
%cd ./drive/MyDrive
公式よりcloneしてきます。
!git clone https://github.com/ultralytics/ultralytics
%cd ultralytics
次に必要なライブラリをインポートします。
ここではpipでインストールすることにします。
!pip install -r requirements.txt
学習済みモデル
次にモデルを指定します。
from ultralytics import YOLO
model = YOLO("yolov8x.pt")
以上、推論の準備が出来ました。
推論時の入力データ形式
YOLOv8で使用できる入力データは以下の通りです。
種類 | 注意事項 |
---|---|
画像ファイル、動画ファイル | |
フォルダ | |
URL | |
Webカメラ | Google colabでは使用不可 |
スクリーンショット | Google colabでは使用不可 |
画像ファイル、動画ファイル
推論したい画像ファイルまたは動画ファイルを直接指定します。
以下の例では、「’image.jpg’」に対して推論を実行します。
results = model('image.jpg')
動画の場合も同様です。
results = model('sample.mp4')
フォルダ
フォルダごと指定することもできます。
results = model('./data')
スクリーンショット
results = model(screen , show=True)
Webカメラ
カメラ番号を入力することで、Webカメラも推論ができます。
results = model(0 , show=True)
各引数
推論時のそれぞれの引数について、主要な項目を紹介します。
詳しくは以下のリンクを参照してください。
引数 | デフォルト | 内容 |
save | False | 推論画像を保存 |
show | False | 推論画像を表示 |
save_txt | False | 結果をテキストファイルに保存 |
save_conf | False | スコアをテキストファイルに保存 |
save_crop | False | 検出された画像をクロップ |
hide_labels | False | ラベルを非表示にする |
hide_conf | False | スコアを非表示にする |
vid_stride | False | 動画のフレームレートのストライド |
line_thickness | 3 | バウンディングボックスの太さ |
visualize | False | モデルの特徴を視覚化 |
augment | False | 拡張推論 |
agnostic_nms | False | クラスに依存しないNMS |
retina_masks | False | 高解像度マスク(セグメンテーション時) |
save
推論結果を画像ファイルまたは動画ファイルとして保存します。
実行すると「ultralytics/runs/detect/predict」のフォルダ内に結果が保存されます。
results = model('bus.jpg',save=True)
save_txt
推論結果をテキストファイルとして保存します。
実行すると「ultralytics/runs/detect/predict」のフォルダ内に結果が保存されます。
さらに、ラベルと検出された座標が記述されたファイルを出力することができます。
results = model('bus.jpg',save=True,save_txt=True)
# ラベル、検出された座標
1 0.87284 0.0486111 0.101235 0.0694444
0 0.0487654 0.747222 0.0975309 0.475926
0 0.0481481 0.658796 0.0962963 0.297222
0 0.349383 0.586111 0.150617 0.42037
0 0.184568 0.601389 0.24321 0.465741
0 0.912963 0.588889 0.174074 0.451852
5 0.497531 0.45 0.992593 0.474074
save_conf
推論結果をテキストファイルとして保存します。
実行すると「ultralytics/runs/detect/predict」のフォルダ内に結果が保存されます。
ラベル、検出された座標に加えて、スコアが記述されたファイルを出力することができます。
「save_txt=True」と合わせて使用します。
results = model('bus.jpg',save=True,save_txt=True,save_conf=True)
# ラベル、検出された座標、スコア
1 0.87284 0.0486111 0.101235 0.0694444 0.435791
0 0.0487654 0.747222 0.0975309 0.475926 0.539062
0 0.0481481 0.658796 0.0962963 0.297222 0.696777
0 0.349383 0.586111 0.150617 0.42037 0.901855
0 0.184568 0.601389 0.24321 0.465741 0.918457
0 0.912963 0.588889 0.174074 0.451852 0.931152
5 0.497531 0.45 0.992593 0.474074 0.967773
save_conf
検出した物体をそれぞれ切り抜いた画像を保存することができます。
results = model('bus.jpg',save=True,save_crop=True)
上の検出結果に対して、下のように切り抜いた画像を出力することができます。
hide_labels
バウンディングボックスのラベルとスコアを非表示にします。
results = model('bus.jpg',save=True,hide_labels=True)
hide_conf
バウンディングボックスのスコアを非表示にします。
results = model('bus.jpg',save=True,hide_conf=True)
まとめ
最後までご覧いただきありがとうございました。
2023年1月に公開された物体検出でお馴染みのYOLOシリーズの最新バージョンである「YOLOv8」について、動かしながら試してみました。
精度・推論速度ともに向上しており、非常に使いやすいものになっています。
物体検出の活用の幅がさらに広がりそうですね。