2020/04/28SHAREツイートシェアはてブGoogle+PocketLINEこんばんはエンジニアの眠れない夜です。前回はkeras−yolo3の独自モデルの学習方法を紹介しました。手順が多くてハマりそうなポイントもちょいちょいあって、手間はかかりますが物体検出の独自モデルの学習ができるようになりましたね。今回はGoogleColabを使ってGPU環境でYOLOの独自モデルを作ってみようと思います。keras-yolo3で手作業で設定が必要な部分をどんどん置き換えていったらアノテーションファイルを作成してアップロードするだけで独自モデルの学習ができるようになりました\(^o^)/もはやハマるところなし!!ノンプログラマーでも物体検出の独自モデルが作れそうな勢いです。Python初心者でも十分できます。それでは一緒に手順を確認していきましょう。v3】独自モデルを学習させるまでの流れ教師画像をダウンロード教師画像をリサイズVOTTでアノテーションを作成GoogleColabにアノテーションファイルをアップロードGoogleColabで学習アノテーションファイルを作るところまではだいたい前回と同じ手順です。後半がローカル環境でいろいろやっていたのをGoogleColabでサクッと終わらせます。設定済みのGoogleColabのファイルを用意しているのでそれを使ってもらえばあっという間です。ここからは前回の繰り返しになるので細かい説明は省きつつ進めます。わからないなと思ったら前回の記事を見てください。【物体検出】keras−yolo3の学習方法iCrawlerで教師画像をダウンロード機械学習の画像収集ならiCrawlerを使うと1回の実行で100枚の画像を集められます。GoogleColabを使うので画像の枚数は1000枚とか用意しても大丈夫ですが、それは2回目以降にして今回も20枚程度でいいと思います。動作確認を!教師画像をリサイズiCrawlerで一通り画像のダウンロードができたらkeras-yolo3のimage直下に画像を全て移動させます。keras-yolo3ディレクトリで下記のコードを実行します。画像にリサイズします。画像が正方形ではない場合は背景が白で塗り足されます。教師画像のサイズは32pxの倍数である必要があります。第1引数でサイズを指定しない場合は320pxに設定しています。32の倍数であれば128pxや352pxなどでも大丈夫です。リサイズしたい大きさは引数で指定できます。正方形なので引数は1つだけです。画像が大きすぎると学習時にメモリに乗り切らずクラッシュするため小さめのサイズが無難です。ここの例では320pxで進めていきます。アノテーションツールVOTT画像のここに対象物がありますよ。教えてあげるアノテーションツール。ここではVoTTというアプリケーションを使います。VoTTの使い方は別の記事にまとめたのでこちらをご覧ください。GoogleColabにアノテーションファイルをアップロードアノテーションファイルを書き出すとresize_imageの中にxxx-PascalVOC-exportというフォルダが作成されています。その中のファイルを全て選択して、圧縮します。この圧縮ファイルをGoogleColabにアプロードします。この後の作業をスムーズにするためにファイル名は「Archive.zip」に変更してください。YOLOの独自モデルの学習が簡単にできるようにしたGoogleColabです。Driveにコピーを作成」をして実行できるようにしてください。上から順番に実行Shift+Enterしていきます。実行するとファイルのアップロードを求められるのでArchive.zipをアップロードします。次のセルはZipファイルを解凍して学習用のファイルを作成しています。実行するだけ大丈夫です。YOLOはクラス名を「半角スペース区切り」で入力していきます。今回は1クラスなのでitemとだけ入力しています。GoogleColabで学習ここまでで独自モデルの学習をする準備ができました。後はこの3つのセルを実行するとYOLOのモデルをKeras用に変換して、学習が始まります。学習が終わったらtrained_weights_final.h5とvoc_classes.txtをダウンロードし始めます。約200MBくらいのファイルになります。ネット回線が遅いとダウンロードの途中でエラーが出る事があります。画面左側からファイルマネージャーを開けます。ここからダウンロードすれば大きなファイルでもダウンロードエラーになりません。logs/000の一番下の方にtrained_weights_final.h5があるので右クリックでメニューが開きます。指定できるようにしました。標準でバッチサイズは32です。バッチサイズを小さくしたい場合は第2引数で指定してください。8メモリーが足りないと言われたら...メモリーが足りないよって言われる可能性が90%くらいであります。IGNORE(無視)してもなんとか学習できなくはないですが途中で落ちるかもしれません。SESSIONS(セッション管理)を開くと実行中のColabファイルが確認できます。下の画像のように1つしか無い場合はどうしようもありません。複数ファイル開いている場合はTERMINATE(終了)します。それでもだめな場合はバッチサイズを下げてください。8学習済みの独自モデルを動かすGoogleColabで独自の学習モデルを動かす場合このセルを実行します。表示されたら画面左のファイルマネージャーから画像のファイルパスをコピーして入力します。コピーされるパスはルートからの”相対パス”が取得されるので、先頭に/(スラッシュ)を入れてパスをペーストします。実行すると予測結果が確認できます。残念がら動作確認はできてもColabで画像は表示されないのでどんな範囲が指定されているかを確認するにはローカル環境での確認が必要です。ローカル環境で独自の学習モデルを動かす方法sleepless-se/keras-yolo3をクローンします。git@github.com:sleepless-se/keras-yolo3.gitColabからダウンロードしてきたtrained_weights_final.h5をkeras-yolo3/logs/000に保存します。Colabからダウンロードしてきたvoc_classes.txtを<code>keras-yolo3/model_data</code>に保存します。準備ができたのでYOLOを動かしてみます。--imageの後に画像のファイル名、もしくは絶対パスを入力。ファイル名.mp4もしくは動画の絶対パスを入力します。前回より精度が落ちているような気がしますが...そこはアノテーションとラベルの問題なのかなと思います。アクセサリや雑貨、人物を全部含めて、十把一絡げにitemにしてしまっているので学習し辛いのだと思います(^_^;)もう少し狭い意味でそれぞれラベル付けしたほうが精度が良くなりそうです。まとめ前回の記事で紹介したときよりファイルを操作する回数が減ってハマりづらくなりました。アノテーションファイルをアップロードしてColabを実行するだけですからね...(^_^;)何よりテキストファイルやプログラを開いて編集することがなくなりました。ここまで書いたプログラムは0行です!(実行コマンドは除いて)これで誰も簡単にYOLOの独自モデルを使った物体検出ができるようになりましたね!ローカル環境で実行した時は学習に1日かかる勢いでしたが、Colabを使うと10分程度で終わりました。学習済みのモデルをAPI化してデプロイこの一連の作業に慣れれば物体検出のプロダクツを量産できそうですね!今回作成した学習済みモデルのAPI化はこちらの記事を参考にしてみてください。現在は『アイデアをカタチにする』ことが仕事です。2019年11月19日おでこさん見たこと無いエラーですね。nanoで動かした時に同じエラーが出ました。以下のサイトを参考に他所からインポートすることでとりあえず動くようにはなります。2019年11月22日アドバイスをお願いいたします。filesを実行後、最後にこのエラーが出てきました。西嶋惟旺さん質問ありがとうございます。下記、グーグル翻訳ですが問題解決の参考になるかと思います。keras==2.1.5をtrain.pyの前に実行し、ダウングレードすると学習ができますよ。keras==2.1.5をtrain.pyの前に実行したら、学習できるようになりました。学習速度がMacbookproとほんんど変わらない状況でした。ランタイムのタイム設定で、ちゃんとGPUとしています。2019年11月28日ご助言ありがとうございます。ランタイムを再起動してもう一度実行しましたが、変わりませんでした。何度も再接続・再起動を繰り返しましたが、変わらずです。2019年11月29日ランタイムを再起動してもだめでしたか。2019年11月30日アドバイスありがとうございます。CPU/GPUのパフォーマンスを比較する例題を試したところ、下記のように、ちゃんとスピードが出ていました。その同じノートブックで、Keras-Yoloの学習をさせたのですが、その時はスピードが出ません。2019年12月1日AKIWTさんCPU/GPUは切り替わっているのですね。謎ですね...こちらでも試してみて何か分かりましたら再度コメント致します。コメントアウトしてみてはいかがでしょうか。2020年3月31日アドバイスをお願いします。学習終了後にtrained_weights_final.h5ができません。trained_weights_stage_1.h5しかできていないのはやはり異常でしょうか?また、学習終了後と記載しましたが以下で終了しています。2020年4月2日YNさんご質問ありがとうございます。私は同じエラーが出たことがないのでわからないのですが、他にも同じエラーで悩んでいる方が他にもいらっしゃるようです。https://teratail.com/questions/229843tiitoiさんの回答の引用です。76行目の32となっているバッチサイズを16や8など小さい値にしてみてはどうでしょうか。ご参考になれば幸いです。2020年4月2日ご返信いただきましてありがとうございます。別件ですが、他のかたも記載していますが1エポックの処理時間がGPU使用で140secくらいかかっています。2021年10月23日shさんコメントありがとうございます。mAPを確認する方法は分かりません。さまtrained_weights_final.h5ができずに止まってしまう件、アドバイスいただいたようにバッチサイズをとりあえず8にすることで、正常動作しました。