私的AI研究会 > YOLOv7_Colab

YOLO V7 on Google Colaboratory

 Google Colaboratory 上に「YOLO V7」を実装しカスタムデータによる学習をおこなう

※ 最終更新:2023/12/21 

Google Colaboratory に「YOLO V7」を実装

物体検出 AI「YOLO V7」をインストール

  1. GoogleColab でノートブックを新規作成
    ・左上のタイトルを「物体検出_yolov7.ipynb」に変更する

  2. GoogleColabのランタイムをGPUへ変更 → GPU を設定する

  3. Googleドライブをマウント
    ①「ファイル」を選択する
    ②「ドライブをマウント」を押す ③ マウントが完了すると「drive」フォルダが表示される
    参考手順 → GoogleColabでGoogleドライブをマウント
  4. カレントディレクトリを Googleドライブへ移動する
    「+コード」メニューを押し、表示されたセルに下記のコマンドを入力して、「Shift」+「Enter」を押す(以下 同様に操作する)
    cd /content/drive/MyDrive
    ・結果表示
    /content/drive/MyDrive
    ※ カレントディレクトリを確認するコマンド
    !pwd

  5. YOLO v7 オフィシャルサイト から下記コマンドでプロジェクトをクローン
    !git clone https://github.com/WongKinYiu/yolov7
    ・成功するとGoogleドライブに「yolov7」というディレクトリが作成される
    ▼ - log -

  6. カレントディレクトリを「yolov7」へ移動する
    cd yolov7

  7. 必要なライブラリをインストール
    !pip install -r requirements.txt
    ▼ - log -

  8. 学習済みモデルをダウンロード
    ・YOLOv7 には学習済みモデルがいくつも用意されているが今回は「yolov7-e6e.pt」を使用する
    !wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-e6e.pt
    ▼ - log -

  9. あらかじめローカルマシンにサンプル画像をダウンロードしておく
    update_20230519.zip (235MB) <サンプル画像>

サンプル画像の物体検出

  1. サンプル画像の物体検出を実行する
    !python detect.py --source inference/images/ --weights yolov7-e6e.pt --conf 0.25 --img-size 1280 --device 0
    ▼ - log -

    ・サンプル画像は「yolov7/inference/images」を「–source」オプションで指定
    ・推論結果の保存先は「yolov7/runs/detect/exp*」( * は自動的に振られる番号)
    ・結果の画像は「Google Colab」のファイル、または「Google Drive」で参照(ダウンロード)できる
    ・出力画像(6枚)

動画の物体検出

  1. サンプル動画「car1_m.mp4」を「yolov7/inference/images」へアップロードする

  2. 動画の物体検出を実行する
    !python detect.py --source inference/images/car1_m.mp4 --weights yolov7-e6e.pt --conf 0.25 --img-size 1280 --device 0
    ▼ - log -

    ・推論結果の保存先は「yolov7/runs/detect/exp*」( * は自動的に振られる番号)
    ・結果の画像は「Google Colab」のファイル、または「Google Drive」でダウンロードできる
    ・「Google Colab」のファイルでは「Google Drive」で出来た動画を見ることができる

カスタムデータによる学習1「マスク着用の判定」

事前準備

  1. カレントディレクトリを Googleドライブ「yolov7」へ移動する
    ・「+コード」メニューを押し、表示されたセルに下記のコマンドを入力して、「Shift」+「Enter」
    cd /content/drive/MyDrive/yolov7
    ・結果表示
    /content/drive/MyDrive/yolov7
  2. 使用する学習済みモデルを取得する
    !wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7x.pt
    ▼ - log -

  3. オープンデータセットを提供している Mask Wearing Dataset からデータをダウンロード
    ・「YOLO v7 PyTorch」を選択し「Mask Wearing.v4-raw.yolov7pytorch.zip」ファイルをダウンロード
    ・解凍してできる「Mask Wearing.v4-raw.yolov7pytorch」フォルダ名を「mask_wearing」にする
    ・「mask_wearing」内にある「data.yaml」ファイルをフォルダの外にコピーし名前を「mask_wearing.yaml」と変更する
    ・「mask_wearing.yaml」を下記のように変更する
    # 学習データのパスを指定する
    train: ./data/mask_wearing/train/images
    val: ./data/mask_wearing/valid/images
    
    # 検出のクラス数
    nc: 2
    
    # クラス名
    names: ['mask', 'no-mask']

  4. データ・セット「mask_wearing」をフォルダごとGoogleドライブの「yolov7/data」にアップする
    yolov7 
      ┗ data
         ┗ mask_wearing

  5. 学習するのに必要な情報を記述したyamlファイル「mask_wearing.yaml」を「yolov7」の直下にアップする
    yolov7 
      ┠ data
      ┃  ┗ mask_wearing
      ┗ mask_wearing.yaml

学習を実行する

  1. 下記のコマンドで学習を実行する
    !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
    ▼ - log -

  2. 「Google colab」の接続が切れる
    ・90分ルールというのがあり何も操作せずに90分経つとリセットされる(この学習はおよそ120分かかる)

    ・接続が切れた場合、再度接続しカレントディレクトリを再設定する
    cd /content/drive/MyDrive/yolov7
    ・引数に「–resume」を追加することで、前回の途中から学習をする
    cd /content/drive/MyDrive/yolov7
    !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
    ▼ - log -

  3. 学習結果は「yolor/runs/train/yolov7x/」に保存される
    ・学習結果モデルは「yolov7x/weights」評価指標は「yolov7x」
    F1 curveP curvePR curveR curve

学習結果で推論を実行する(画像)

  1. 学習結果モデル「runs/train/yolov7x/weights/best.pt」を使用する
    ・テスト画像「mask.jpg」を「yolov7/」直下にアップしておく

  2. 検出コマンドを実行する
    !python detect.py --weights runs/train/yolov7x/weights/best.pt --conf 0.25 --img-size 640 --source mask.jpg
    ▼ - log -

    ・推論結果の保存先は「yolov7/runs/detect/exp*」( * は自動的に振られる番号)

学習結果で推論を実行する(動画)

  1. 学習結果モデル「runs/train/yolov7x/weights/best.pt」を使用する
    ・テスト画像「mask.mov」を「yolov7/」直下にアップしておく

  2. 検出コマンドを実行する
    !python detect.py --weights runs/train/yolov7x/weights/best.pt --conf 0.25 --img-size 640 --source mask.mov
    ▼ - log -

    ・推論結果の保存先は「yolov7/runs/detect/exp*」( * は自動的に振られる番号)

学習済みモデルを ONNX 形式にコンバートする~

  1. onnx パッケージをインストールする
    !pip install onnx
    ▼ - log -

  2. 学習結果モデル「runs/train/yolov7x/weights/best.pt」を onnx 形式に変換する
    !python export.py --weights runs/train/yolov7x/weights/best.pt
    ▼ - log -

  3. 変換結果「runs/train/yolov7x/weights/best.onnx」をローカルマシンにダウンロードする

OpenVINO™ で実行する(ローカルマシン)

  1. 学習済みモデル「best.onnx」を「/work/yolov7/」ディレクトリに「mask_best.onnx」の名前でコピーする
  2. ラベルファイルを「/work/yolov7/」ディレクトリに用意する
    ・mask.nams
    mask
    no-mask
    ・mask.nams_jp
    マスク着用
    マスク未装着
  3. ローカルマシンのターミナルで実行する
    (py38a) PS cd /anaconda_win/work/yolov7
    (py38a) PS > python object_detect_yolo7.py -m mask_best.onnx -l mask.names_jp -i ../../Images/mask.jpg -o out_mask.jpg
    Starting..
     - Program title  : Object detection YOLO V7
     - OpenCV version : 4.5.5
     - OpenVINO engine: 2022.1.0-7019-cdb9bec7210-releases/2022/1
     - Input image    : ../../Images/mask.jpg
     - Model          : mask_best.onnx
     - Device         : CPU
     - Label          : mask.names_jp
     - Log level      : 3
     - Title flag     : y
     - Speed flag     : y
     - Processed out  : out_mask.jpg
     - Preprocessing  : False
     - Batch size     : 1
     - number of inf  : 1
     - With grid      : False
    FPS average:       1.20
    Finished.
 

更新履歴

 

参考資料

 

Last-modified: 2023-12-21 (木) 04:31:52