物体検出でお馴染みのYOLOシリーズの最新版「YOLOv8」について、動かしながら試していきます。

YOLOv8は2023年1月に公開された最新バージョンであり、速度と精度の面で限界を押し広げています。

Google colabを使用して簡単に最新の物体検出モデルを実装することができますので、ぜひ最後までご覧ください。

これまでの投稿はこちら
第1回:YOLOv8を試してみる 〜導入からデモまで〜
第2回:推論の引数と座標とスコアの出力
第3回:YOLOv8でセグメンテーションを試してみる
第4回:YOLOv8における推論結果と座標について
第5回:マスク着用をリアルタイムに判定 〜オープンソースデータセットの学習と評価〜
第6回:物体検出のためのデータ収集
第7回:物体検出のためのアノテーション

今回の内容

・YOLOv8の概要

・推論時の入力データ形式

・各引数

YOLOv8とは

YOLOv8は2023年1月に公開された最新バージョンであり、既存のオブジェクト検出器を上回り、速度と精度の面で限界を押し広げています。

物体検出だけでなく、セグメンテーションタスクや画像分類タスクでも利用することができます。

引用:https://github.com/ultralytics/ultralytics

YOLOv8のベンチマーク結果は以下となっています。

物体検出モデル

引用:https://github.com/ultralytics/ultralytics

セグメンテーションモデル

引用:https://github.com/ultralytics/ultralytics

なお、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) 

各引数

推論時のそれぞれの引数について、主要な項目を紹介します。

詳しくは以下のリンクを参照してください。

引数デフォルト内容
saveFalse推論画像を保存
showFalse推論画像を表示
save_txtFalse結果をテキストファイルに保存
save_confFalseスコアをテキストファイルに保存
save_cropFalse検出された画像をクロップ
hide_labelsFalseラベルを非表示にする
hide_confFalseスコアを非表示にする
vid_strideFalse動画のフレームレートのストライド
line_thickness3バウンディングボックスの太さ
visualizeFalseモデルの特徴を視覚化
augmentFalse拡張推論
agnostic_nmsFalseクラスに依存しないNMS
retina_masksFalse高解像度マスク(セグメンテーション時)

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」について、動かしながら試してみました。

精度・推論速度ともに向上しており、非常に使いやすいものになっています。

物体検出の活用の幅がさらに広がりそうですね。

コメントを残す