- はじめに
- なぜGoogle Colabか
- Google ColabにYOLOv5をコピー
- Google Colabの実行環境をGPUに変更しておく
- Google DriveにYOLOv5用のフォルダを作成
- YOLOv5のclone
- Google Driveのマウント
- Wandbの設定
- Google Driveにデータセット(Zip)を入れる
- Zipデータセットを解凍する
- カスタムymlの追加
- 学習させるコマンドの追加
- 実際に学習させてみる
- 学習状況をリアルタイムで確認
- 学習結果の確認
- 学習結果の比較
- 学習結果の出力
- 学習結果のファイル・重みデータの取得
- うまく行かなかった時(コメント欄の対処法もこちらに追記していきます)
- まとめ
- 最後に
- 一言コメント
はじめに
今回は、Google ColabでYOLOv5の開発環境を構築していきたいと思います。
なぜGoogle Colabか
基本的にYOLOv5の学習には高い演算能力が必要とされるので、GPUを無料で扱えるGogle Colabで開発環境を作っていきます。
なぜGPUがディープラーニングなどに使われているかについては、下記の記事が参考になると思います。
Google ColabにYOLOv5をコピー
YOLOv5のソースコードが公開されているGitHubに行き、「open colab」を押します。
するとこのような画面になると思うので、アカウントを変更したい方、まだログインしていない方は右上から変更してください。
左上にある「ドライブにコピー」を押します。
コピーが作成されるので、これからはこちらで作業をしていきます。
Google Colabの実行環境をGPUに変更しておく
こちらを参考にし、ランタイム(実行環境)をGPUに変更しておきます。
Google DriveにYOLOv5用のフォルダを作成
Google DriveにYOLOv5用のフォルダを新規作成します。今回は「YOLOv5用フォルダ」と名付けました。
「YOLOv5用フォルダ」の中にもフォルダを追加しておきます。
YOLOv5用フォルダ
├── custom_yml //学習の設定
├── zip_data //zip化されたデータセットが入る
└── 学習結果出力 //学習結果が入る
全体の構造はこんな感じです。
YOLOv5のclone
上にセルがあるので、これを実行しましょう。
Google Driveのマウント
先ほどCloneしたコードの下にGoogle Driveをマウントするコードを追加しておきます。
from google.colab import drive
drive.mount('/content/drive')
一応下の方にコードはあるのですが、そこまで移動するのがめんどくさいので、Setupのところに処理をまとめておきます。
実行してみましょう。
このような表示が出てきたら接続を押しましょう。
アカウントを選択。
許可します。
これでOKです。
Wandbの設定
また下にコードを追加します。
# Weights & Biases (optional)
%pip install -q wandb
import wandb
wandb.login()
アカウントを作っていなかったりするとこうなります。
にアクセスして、アカウントを登録し、
にアクセスすると、そこに認証コードがあるのでコピーします。
Google Colabの赤枠の部分に貼り付けてEnterします。
Trueと表示されればOKです。
Google Driveにデータセット(Zip)を入れる
zip_dataフォルダにYOLOv5用のZip形式のファイルを入れておきます。
Zipデータセットを解凍する
先ほどのGoogle Colabのwandbのセルの下に追加します。
!unzip -q /content/drive/MyDrive/YOLOv5用フォルダ/zip_data/new_c_dataset.zip -d /content/drive/MyDrive/YOLOv5用フォルダ/
Google Driveの「zip_data」フォルダに入っているファイルをコマンドで解凍します。
実行しておきます。
Driveを確認してみると、新しくフォルダが追加され、Zipファイルが解凍されているのが確認できると思います。
YOLOv5用フォルダ
├── custom_yml
├── zip_data
├── dataset //zip解凍されたフォルダが追加される
└── 学習結果出力
カスタムymlの追加
train: /content/drive/MyDrive/YOLOv5用フォルダ/dataset/images/train
val: /content/drive/MyDrive/YOLOv5用フォルダ/dataset/images/val
# Classes
nc: 2 # number of classes
names: ['creeper','creeper_head'] # class names
custom_model.ymlという名前の学習設定ファイルを作ります。
今回は2つのクラス、trainとvalのパスはこのようになっています。データセットによって変わると思うので、そこは独自でカスタマイズしてください。
作成したら、そのファイルをGoogle Driveの「custom_yml」に追加します。
学習させるコマンドの追加
Google Colabの、Zip解凍するコマンドの下に、YOLOv5を学習させるコードを追加しておきます。
# Train YOLOv5s
!python train.py --img 640 --batch 64 --epochs 300 --data /content/drive/MyDrive/YOLOv5用フォルダ/custom_yml/custom_model.yml --weights yolov5s.pt --cache --project /content/drive/MyDrive/YOLOv5用フォルダ/学習結果出力
今回はこのようなコマンドにしました。
下のコマンドは解説用です。
# Train YOLOv5s
!python train.py --img (画像サイズ) --batch (batchサイズ) --epochs (epochs数) --data (自分が作成したymlファイルがある場所) --weights yolov5s.pt --cache --project (学習した結果が出力される場所)
- --img お好みで
- --batch お好みで
- --cpochs お好みで
- --data 自分が作成したymlファイルがあるパス
- --project 学習結果を出力したいパス
実際に学習させてみる
学習状況をリアルタイムで確認
下記のリンクからwandbにアクセスします。
Runsの部分に新しくプロジェクトが作成されているはずなので、クリックします。
緑色のベルマークがついているものをクリックします。
少し時間が経つとMediaが表示され始めます。リアルタイムでグラフも描画されるので、眺めているだけでも面白いです。
Google Colabの方では今何回目の学習かなどのログが出力されています。wandbに何も反映されていない時はGoogle Colabのログを見てみましょう。
正常にログが出力されていれば、wandbの接続設定、みているプロジェクトに問題があるとわかります。
学習結果の確認
このようなログが出力されたら学習が終了した合図です。wandbで見てみます。
学習結果の比較
step29回目の結果です。明らかに物体検出の精度が低いです。
step269回目の結果です。step29回に比べるとだいぶ精度が上がっていますね。
学習結果の出力
Results saved to /content/drive/MyDrive/YOLOv5用フォルダ/学習結果出力/exp5
学習結果のファイルは自分が指定したパスに保存されます。保存された場所は学習が終わった直後にログとして記録されます。
今回の場合だと、自分が指定した「/content/drive/MyDrive/YOLOv5用フォルダ/学習結果出力/」の下の「exp5」というフォルダにあるようです。
学習結果のファイル・重みデータの取得
実際に学習結果のファイルを取得しましょう。先ほど出力先に指定していたGoogle Driveのパスに行きます。先ほどログに出力されていた保存ディレクトリを開きます。
exp5にはこのように、学習結果のファイル・重みデータが入っています。プログラムで実際に使う重みデータは「weights」の中です。
weightsの中には二つのファイルがありました。それぞれ、
- best.pt
- 一番精度が高いもの
- last.pt
- 一番最後のもの
このようになっています。私は一番成績が良かった重みを使っています。
うまく行かなかった時(コメント欄の対処法もこちらに追記していきます)
学習開始時のエラー
train.py: error: unrecognized arguments: .yml
custom_model.ymlをcustom_model .ymlにしていた。
まとめ
- Google Colabを使ってYOLOv5を動かす環境を作れた
- その環境で学習させることができた
- 学習結果を出力し、リアルタイムで学習状況を閲覧できるようになった
今回でYOLOv5を学習&動かす環境を作れました。とても面白く、手軽にできるので今後もどんどんやっていきたいと思います。
今度はOpenCV、Pythonなどを使ってローカルPC上でリアルタイム検出をする方法についての記事も書こうかなと思っています。
最後に
ここまで読んでいただきありがとうございます。
何か分からないこと、エラーなどが出ましたらコメントしてもらえると対処できます。ぜひコメントしてください。
記事のSNSシェア、拡散ぜひよろしくお願いします。
一言コメント
YOLOv5、M1MacでPython+OpenCVで動かしてみましたが、fpsが平均10ぐらい。
M1MacはPytorchがまだGPUに対応してないらしいので、それが原因なのかも。
TensorFlowは対応してる?っぽいですが、TensorFlowはまだ一回も触ったことないので試してないです汗
480fpsぐらい出ると嬉しいんだけどなぁ(◞‸◟)
コメント