YOLOシリーズの2022年最新版「YOLOv7」について、環境構築から学習の方法までまとめます。
YOLOv7は2022年7月に公開された最新バージョンであり、速度と精度の面で限界を押し広げています。
第1回目は、オープンソースのデータセットを活用したマスク着用判定モデルの作成を通じて学習と評価の方法を紹介します。
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を使えるようになりました。
「Mask Wearing Dataset」データセット
データセットのダウンロード
今回はオープンデータセットを提供しているMask Wearing Datasetからデータをダウンロードします。
登録は必要ですが、料金はかかりませんのでご安心ください。
早速、リンク先からアノテーション済みのマスク着用の画像データを取得しましょう。
まずは「YOLO v7 PyTorch」を選択します。
「Continue」を押してダウンロードします。
ダウンロードが終わったら、フォルダ名は「mask_wearing」としておきましょう。
このフォルダごとGoogleドライブの「yolov7/data」にアップします。
yolov7
┗ data
┗ mask_wearing ←ここにダウンロードデータを格納(フォルダ名をmaskに変更)
yamlファイルの作成
学習するにあたり必要な情報を記述したyamlファイルを作成します。
以下にある「data.yaml」を書き換えます。
yolor
┗ data
┗ mask_wearing
┗ data.yaml ←このファイルをダウンロードして書き換える
ダウンロードしたら、以下の通りに書き換えて「mask_wearing.yaml」として保存します。
# 学習データのパスを指定する
train: .data/mask_wearing/train/images
val: .data/mask_wearing/valid/images
# 検出のクラス数
nc: 2
# クラス名
names: ['mask', 'no-mask']
このファイルをyolov7の直下にアップします。
yolov7
┠ data
┃ ┗ mask_wearing
┃ ┗ data.yaml
┗ mask_wearing.yaml
以上で学習に必要なデータの準備が終わりました。
学習
はじめから学習する
早速、学習を実行しましょう。
batch-sizeを小さくしすぎると学習が途中で止まってしまいますので、注意してください。
Google colabで学習する場合にはinput sizeを640、batch-sizeを16とすれば問題なく学習ができます。
!python train.py --workers 8 --batch-size 16 --data mask_wearing.yaml --cfg cfg/training/yolov7x.yaml --weights 'yolov7x.pt' --name yolov7x --hyp data/hyp.scratch.p5.yaml --epochs 300 --device 0
学習結果は「yolor/runs/train/yolov7x/」に保存されます。
評価指標も同じフォルダに保存されますので保存されますので確認してみましょう。
途中から学習する
Google colabで学習をすると、途中で接続が切れてしまうことがあるかと思います。
引数に「–resume」を追加することで、前回の途中から学習をすることができます。
!python train.py --workers 8 --batch-size 16 --data mask_wearing.yaml --cfg cfg/training/yolov7x.yaml --weights 'yolov7x.pt' --name yolov7x --hyp data/hyp.scratch.p5.yaml --epochs 300 --device 0 --resume
結果は先ほどと同様に保存されます。
テスト
テスト結果を出力する(画像)
学習した結果を用いてテストをしてみましょう。
先ほど学習したファイルを「–weights runs/train/yolov7x/weights/best.pt」、使用したい画像を「–source mask.jpg」としてテストをします。
!python detect.py --weights runs/train/yolov7x/weights/best.pt --conf 0.25 --img-size 640 --source mask.jpg
「runs/detect/exp/」に画像が保存されました。
高い精度で検出できていることがわかりました。
テスト結果を出力する(動画)
画像だけでなく動画でもテストすることができます。
先ほど学習したファイルを「–weights runs/train/yolov7x/weights/best.pt」、使用したい画像を「–source mask.mp4」としてテストをします。
!python detect.py --weights runs/train/yolov7x/weights/best.pt --conf 0.25 --img-size 640 --source mask.mp4
任意の動画で推論デモを簡単に実行することができました。
まとめ
最後までご覧いただきありがとうございました。
2022年7月に公開されたのYOLOシリーズの最新バージョンである「YOLOv7」について、オープンソースのデータセットを活用したマスク着用判定モデルの作成を通じて学習と評価の方法を紹介しました。
簡単にモデルを作成することができ、物体検出の活用の幅がさらに広がりそうですね。
次回は今回作成した作成したモデルのテストと評価方法、テスト結果を元にした座標の考え方を紹介しますので、ぜひ合わせてご覧ください。