このシリーズでは物体検出でお馴染みのYOLOシリーズの2022年最新版「YOLOv7」について、環境構築から学習の方法までまとめます。

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

第2回目は、前回作成したモデルのテストと評価方法、テスト結果を元にした座標の考え方を紹介します。

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

YOLOv7まとめシリーズはこちらからご覧いただけます。

今回の内容

・モデルのテストと評価方法

・座標の考え方

YOLOv7とは

YOLOv7は2022年7月に公開された最新バージョンであり、速度と精度の面で限界を押し広げています。詳細は前回の記事で紹介しておりますのでよかったらご覧ください。

引用:https://arxiv.org/pdf/2207.02696.pdf

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

引用:https://github.com/WongKinYiu/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

各値は以下のようになっています。

00.55250.2382740.14750.243902
oject-classx_centery_centerwidthheight
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

各値は以下のようになっています。

00.55250.2382740.14750.2439020.917969
oject-classx_centery_centerwidthheightscore
oject-class:クラスの番号x_center:中心のx座標y_center:中心のy座標width:x方向長さheight:y方向長さ検出スコア

まとめ

最後までご覧いただきありがとうございました。

2022年7月に公開された物体検出でお馴染みのYOLOシリーズの最新バージョンである「YOLOv7」について、モデルのテストと評価方法、テスト結果を元にした座標の考え方を紹介しました。

次回はYOLOv7によるオリジナルデータセットの作成と学習の方法をまとめますので、ぜひ合わせてご覧ください。

【物体検出2022】YOLOv7まとめ第3回 物体検出のためのデータ収集

このシリーズでは物体検出でお馴染みのYOLOシリーズの2022年最新版「YOLOv7」について、環境構築から学習の方法までまとめます。 YOLOv7は2022年7月に公開された最新バー…