このシリーズでは物体検出でお馴染みのYOLOシリーズの2022年最新版「YOLOv7」について、環境構築から学習の方法までまとめます。
YOLOv7は2022年7月に公開された最新バージョンであり、速度と精度の面で限界を押し広げています。
第2回目は、前回作成したモデルのテストと評価方法、テスト結果を元にした座標の考え方を紹介します。
Google colabを使用して簡単に最新の物体検出モデルを実装することができますので、ぜひ最後までご覧ください。
YOLOv7まとめシリーズはこちらからご覧いただけます。
今回の内容
・モデルのテストと評価方法
・座標の考え方
YOLOv7とは
YOLOv7は2022年7月に公開された最新バージョンであり、速度と精度の面で限界を押し広げています。詳細は前回の記事で紹介しておりますのでよかったらご覧ください。
YOLOv7のベンチマーク結果は以下となっています。
なお、YOLOv7のライセンスは「GNU General Public License v3.0」となっています。
YOLOv7の導入
早速YOLOv7を使って動かしていきましょう。
ここからはGoogle colabを使用して実装していきます。
まずはGPUを使用できるように設定をします。
「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更
GPUの設定が終わったら、Googleドライブをマウントします。
from google.colab import drive
drive.mount('/content/drive')
%cd ./drive/MyDrive
公式よりcloneしてきます。
!git clone https://github.com/WongKinYiu/yolov7
次に必要なライブラリをインポートします。
公式ではDockerを推奨していますが、ここではpipでインストールすることにします。
%cd yolov7
!pip install -r requirements.txt
最後に今回使用する学習済みモデルを取得します。
!wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7x.pt
以上で準備完了です。
YOLOv7を使えるようになりました。
YOLOv7のテスト結果と座標
前回作成したモデルの結果
まずは前回作成したモデルのテスト結果を出力してみましょう。
!python detect.py --weights runs/train/yolov7x/weights/best.pt --conf 0.25 --img-size 640 --source mask.jpg
この結果に対して、座標の考え方を整理していきます。
テスト結果の座標を出力する
テスト結果の座標を出力してみましょう。
先ほど実行したコードに「–save-txt」の引数を追加することで、テスト結果の座標を出力することができます。
!python detect.py --weights runs/train/yolov7x/weights/best.pt --conf 0.25 --img-size 640 --source mask.jpg --save-txt
実行すると「runs/detect/exp2/labels」にテキストファイルとして保存されます。
0 0.5525 0.238274 0.1475 0.243902
各値は以下のようになっています。
0 | 0.5525 | 0.238274 | 0.1475 | 0.243902 |
oject-class | x_center | y_center | width | height |
oject-class:クラスの番号 | x_center:中心のx座標 | y_center:中心のy座標 | width:x方向長さ | height:y方向長さ |
画像と各値を見比べてみましょう。
各小数値は各座標に対して画像の長さで除した比になっています。
まずは座標を算出するために各小数値×画像の長さを計算します。
x_center = 0.5525 * 800 = 442
y_center = 0.2382 * 533 = 127
width = 0.1475* 800 = 118
height = 0.2382 * 533 = 130
これにより各座標を得ることができました。
この座標から左上の座標と右下の座標を算出してみましょう。
x_min = 442 – 118/2 = 383
y_min = 127 – 130/2 = 62
x_max = 442 + 118/2 = 501
y_max = 127 + 130/2 = 192
算出した左上の座標と右下の座標と画像を見比べてみるとイメージが湧きやすいですね。
これらの座標の考え方はアノテーションをする際に必要となりますので、整理しておきましょう。
テスト結果の座標とスコアを出力する
最後にテスト結果の座標とスコアを出力してみましょう。
先ほど実行したコードに「–save-txt」、「–save-conf」の引数を追加することで、テスト結果の座標とスコアを同時に出力することができます。
!python detect.py --weights runs/train/yolov7x/weights/best.pt --conf 0.25 --img-size 640 --source mask.jpg --save-txt --save-conf
実行すると「runs/detect/exp3/labels」にテキストファイルとして保存されます。
0 0.5525 0.238274 0.1475 0.243902 0.917969
各値は以下のようになっています。
0 | 0.5525 | 0.238274 | 0.1475 | 0.243902 | 0.917969 |
oject-class | x_center | y_center | width | height | score |
oject-class:クラスの番号 | x_center:中心のx座標 | y_center:中心のy座標 | width:x方向長さ | height:y方向長さ | 検出スコア |
まとめ
最後までご覧いただきありがとうございました。
2022年7月に公開された物体検出でお馴染みのYOLOシリーズの最新バージョンである「YOLOv7」について、モデルのテストと評価方法、テスト結果を元にした座標の考え方を紹介しました。
次回はYOLOv7によるオリジナルデータセットの作成と学習の方法をまとめますので、ぜひ合わせてご覧ください。