【物体検出】(GPU版)YOLO独自モデル簡単作成方法

【物体検出】YOLO独自モデル簡単作成方法

こんばんはエンジニアの眠れない夜です。

前回はkeras−yolo3の独自モデルの学習方法を紹介しました。

【物体検出】keras−yolo3の学習方法

手順が多くてハマりそうなポイントもちょいちょいあって、手間はかかりますが物体検出の独自モデルの作成ができるようになりましたね。

今回はGoogleColabを使ってGPU環境でYOLOの独自モデルを作ってみようと思います。

keras-yolo3で手作業で設定が必要な部分をどんどん置き換えていったらアノテーションファイルを作成してアップロードするだけで独自モデルの学習ができるようになりました\(^o^)/

もはやハマるところなし!!

ノンプログラマーでも物体検出の独自モデルが作れそうな勢いです。Python初心者でも十分できます。

それでは一緒に手順を確認していきましょう。

【YOLO v3】独自モデルを学習させるまでの流れ

  1. 教師画像をダウンロード
  2. 教師画像をリサイズ
  3. VOTTでアノテーションを作成
  4. GoogleColabにアノテーションファイルをアップロード
  5. GoogleColabで学習

アノテーションファイルを作るところまではだいたい前回と同じ手順です。

後半がローカル環境でいろいろやっていたのをGoogleColabでサクッと終わらせます。

設定済みのGoogleColabのファイルを用意しているのでそれを使ってもらえばあっという間です。

ここからは前回の繰り返しになるので細かい説明は省きつつ進めます。

ちょっとわからないなと思ったら前回の記事を見てください。

【物体検出】keras−yolo3の学習方法

iCrawlerで教師画像をダウンロード

機械学習の画像収集ならiCrawlerを使うと1回の実行で100枚の画像を集められます。

GoogleColabを使うので画像の枚数は1000枚とか用意しても大丈夫ですが、それは2回目以降にして今回も20枚程度でいいと思います。

まずは動作確認を!

教師画像をリサイズ

iCrawlerで一通り画像のダウンロードができたらkeras-yolo3のimage直下に画像を全て移動させます。

物体検出用教師データ(画像)

keras-yolo3ディレクトリで下記のコードを実行します。

python resize_images.py

このコードを実行するとimageに保存されている画像ファイルのアスペクト比を維持しながら 320px × 320px の画像にリサイズします。画像が正方形ではない場合は背景が白で塗り足されます。

教師画像のサイズは32pxの倍数である必要があるので320pxに設定しています。32の倍数であれば128pxや352pxなどでも大丈夫です。

リサイズしたい大きさは引数で指定できます。

python resize_images.py 352

※ 正方形なので引数は1つだけです。

あまり画像が大きすぎると学習時にメモリに乗り切らずクラッシュするため小さめのサイズが無難です。

ここの例では320pxで進めていきます。

アノテーションツールVOTT

画像のここに対象物がありますよ。と教えてあげるアノテーションツール。

ここではVoTTというアプリケーションを使います。

VoTTの使い方は別の記事にまとめたのでこちらをご覧ください。

GoogleColabにアノテーションファイルをアップロード

アノテーションファイルを書き出すとresize_imageの中にxxx-PascalVOC-exportというフォルダが作成されています。

その中のファイルを全て選択して、圧縮します。

VoTT物体検出教師データ

この圧縮ファイルをGoogleColabにアプロードします。この後の作業をスムーズにするためにファイル名は「Archive.zip」に変更してください。

物体検出教師データ圧縮

YOLOの独自モデルの学習が簡単にできるようにしたGoogleColabです。

読み込み専用なので「ファイル→Google Driveにコピーを作成」をして実行できるようにしてください。

上から順番に実行Shift+Enterしていきます。

ColabでYOLO学習4

Upload VoTT export file and directory (.zip) を実行するとファイルのアップロードを求められるのでArchive.zipをアップロードします。

ColabでYOLO学習 アップロード

次のセルはZipファイルを解凍して学習用のファイルを作成しています。実行するだけ大丈夫です。

ColabでYOLO学習 学習ファイル作成

Convert annotations for YOLOはクラス名を「半角スペース区切り」で入力していきます。

今回は1クラスなのでitemとだけ入力しています。
アノテーションファイル変換

GoogleColabで学習

ここまでで独自モデルの学習をする準備ができました。

後はこの3つのセルを実行するとYOLOのモデルをKeras用に変換して、学習が始まります。

ColabでYOLO学習 Train

学習が終わったらtrained_weights_final.h5voc_classes.txtをダウンロードし始めます。

約200MBくらいのファイルになります。ネット回線が遅いとダウンロードの途中でエラーが出る事があります。

画面左側からファイルマネージャーを開けます。ここからダウンロードすれば大きなファイルでもダウンロードエラーになりません。

logs/000の一番下の方にtrained_weights_final.h5があるので右クリックでメニューが開きます。

学習済みモデルダウンロード

画像のサイズを変更したい場合

標準で画像のサイズは320pxの正方形ですが、他のサイズに変更している場合は第1引数で 指定できるようにしました。

 !python train.py 160

バッチサイズを変更したい場合

標準でバッチサイズは32です。バッチサイズを小さくしたい場合は第2引数で指定してください。

 !python train.py 320 8

メモリーが足りないと言われたら…

メモリーが足りないよって言われる可能性が90%くらいであります。

あくまで警告なので IGNORE(無視)してもなんとか学習できなくはないですが途中で落ちるかもしれません。

Colabメモリー不足

MANAGE SESSIONS(セッション管理)を開くと実行中のColabファイルが確認できます。下の画像のように1つしか無い場合はどうしようもありません。

複数ファイル開いている場合はTERMINATE(終了)します。

Colabファイル管理

それでもだめな場合はバッチサイズを下げてください。

 !python train.py 320 8

学習済みの独自モデルを動かす

GoogleColabで独自の学習モデルを動かす場合

このセルを実行します。

run Predict by new model

Input image filename: と表示されたら画面左のファイルマネージャーから画像のファイルパスをコピーして入力します。

Colabで画像のパスをコピー

コピーされるパスはルートからの”相対パス”が取得されるので、先頭に/(スラッシュ)を入れてパスをペーストします。

実行すると予測結果が確認できます。

ただし、残念がら動作確認はできてもColabで画像は表示されないのでどんな範囲が指定されているかを確認するにはローカル環境での確認が必要です。

ローカル環境で独自の学習モデルを動かす方法

sleepless-se/keras-yolo3をクローンします。

git clone git@github.com:sleepless-se/keras-yolo3.git

 

Colabからダウンロードしてきたtrained_weights_final.h5keras-yolo3/logs/000に保存します。

Colabからダウンロードしてきたvoc_classes.txt<code>keras-yolo3/model_data</code>に保存します。

準備ができたのでYOLOを動かしてみます。

画像の場合は

python yolo_video.py --image

の後に画像のファイル名、もしくは絶対パスを入力。

動画の場合は

python yolo_video.py --input ファイル名.mp4

もしくは動画の絶対パスを入力します。

独自モデルの予測

前回より精度が落ちているような気がしますが…

そこはアノテーションとラベルの問題なのかなと思います。

アクセサリや雑貨、人物を全部含めて、十把一絡げにitemにしてしまっているので学習し辛いのだと思います(^_^;)

もう少し狭い意味でそれぞれラベル付けしたほうが精度が良くなりそうです。

まとめ

前回の記事で紹介したときよりファイルを操作する回数が減ってハマりづらくなりました。

アノテーションファイルをアップロードしてColabを実行するだけですからね…(^_^;)

何よりテキストファイルやプログラを開いて編集することがなくなりました。

ここまで書いたプログラムは0行です!(実行コマンドは除いて)

これで誰も簡単にYOLOの独自モデルを使った物体検出ができるようになりましたね!

ローカル環境で実行した時は学習に1日かかる勢いでしたが、Colabを使うと10分程度で終わりました。

衝撃の速さ!(゜o゜;

  1. 画像集め
  2. リサイズ
  3. アノテーション
  4. Colabにアップして学習
  5. 学習済みのモデルをAPI化してデプロイ

この一連の作業に慣れれば物体検出のプロダクツを量産できそうですね!

今回作成した学習済みモデルのAPI化はこちらの記事を参考にしてみてください。

【物体検出】1行で学習済みのYOLO独自モデルをAPI化する方法

 

2 Comments

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください