ColabでMMDetectionとOpera Datasetを動かしてみた

AI

Opera Datasetの2DサンプルをColabでテストしてみました。

Google Driveに学習データを入れて、実際に学習・デモまで実施しています。

手順を一から紹介します。

 

スポンサーリンク

ColabでMMDetectionとOpera Datasetを動かしてみた

Opera Datasetの2DサンプルプログラムをColabでテストしてみました。

(Opera Dataset…自動車走行のデータセット)

MMDetection(物体検出のライブラリ)を使って、学習させています。

 

サンプルは基本的な「FasterRCNN」の物体検出のアルゴリズムを使っています。

自動車・トラックなど21のクラスを物体検出できました。

Colabで実施した学習の流れを紹介します。

 

第6回AIエッジコンテストのデータセット

今回のデータセットのOpera Datasetは「第6回AIエッジコンテスト」でも使われています。

データセットのダウンロードに関しても、コンテストのページから可能です。

(SIGNATEに登録すれば、「データ」のタブからダウンロードできます)

The 6th AI Edge Contest (Implementation Contest 4) | SIGNATE - Data Science Competition

 

2Dに加えて、3DやDepth含めた画像・点群データが入ったデータセットです。

自動車走行の3Dの物体検出までテストが可能となっています。

 

データセットの詳細はGitlabに

データセットの構造や詳細に関してはGitlabにあります。

まだdemoと書かれているので、Opera Datasetも開発中のデータセットのようです

PerceptionEngine / deliverables / opera_demo · GitLab
GitLab.com

 

Opera Datasetの2Dの学習

GitLabの中に「OperaCustomFasterRCNNYoloLoader.ipynb」のサンプルがあります。

Opera Datasetの2D(画像)データを使って、FasterRCNNで学習・デモするものです。

 https://gitlab.com/perceptionengine/deliverables/opera_demo/-/blob/master/OperaCustomFasterRCNNYoloLoader.ipynb

 

今回はGoogle Colabの環境で上記サンプルプログラムを実施してみました。

個人的に詰まった・気になった点など含めて、一連の流れのメモを残しておきます。

細かい内容に関しては、最後にGistを貼りますのでそちらをご確認下さい。

 

ColabのGPUを使用します

1000枚~2000枚程度の写真を使って学習をしますので、GPUが必要になります。

ランタイムからGPUを選択してColabを開始します。

(下記はColabの残り時間、GPUがセットされているかの確認です)

 

学習で数時間かかります。無料のColabだと運が悪いと制限が掛かる場合があります。

下記記事のように筆者は有料のColab Pro環境で動かしています。

GPUバックエンドに接続できませんが出たのでColab Proに課金した話

GPUバックエンドに接続できませんが出たのでColab Proに課金した話 
最近Google Colabで重いデータセットを学習させるケースが増えてきました。 ただし無料版のColabで長時間GPUを使っていると、制限が掛かり暫く使えなくなります。 そのため有料版のColab Proに課金してみました。

 

Google Driveにデータセットを保存・解凍します

予め、データセット(train0~4.zip)をGoogle Driveに保存しています。

Colab上でGoogle Driveをマウントして、unzipで解凍します。

今回筆者はwork→ai_edge_2022というフォルダ内で作業しました。

 

opera_demoをダウンロード(必要であれば)

必要であればGitlabからopera_demoをコピーしておきます。

※opera_demoの方にはデータセットは入っていません。

 

MMDetectionをダウンロード・インストールします

MMDetection(物体検出のライブラリ)をダウンロード・インストールします。

特に特別なことはしておらず、下記の公式のインストール手順に従ったのみです。

 https://github.com/open-mmlab/mmdetection/blob/master/docs/en/get_started.md/#Installation

 

FasterRCNNのcheckpointをダウンロードします

予めCOCOのデータセットで学習済のcheckpointをダウンロードしときます。

これをベースに学習(finetune:ファインチューニング)します。

 

Gitlabの手順に従って学習・デモします

アノテーション作成や学習などの流れに関しては、Gitlabの手順通りです。

パスなどを合わせただけで、問題なく動作しました。

学習前と学習後の結果を比べると、物体検出の精度が上がっていることが分かります。

 

Opera Datasetでの学習前の物体検出

サンプルの1枚(0TyydnMdYWU1YD7nw5uCNGs8_15.jpg)を物体検出した画像です。

Opera Datasetの学習前です。

 

Opera Datasetでの学習後の物体検出

同じ写真でOpera Datasetの学習後の写真です。

例えば、一番手間に見える車の精度だと0.95→0.99に上がっています。

(奥の自動車の精度も向上、自動車横の物体検出まで出来ています)

 

サンプルプログラム動かす上でエラー出たところ

「OperaCustomFasterRCNNYoloLoader.ipynb」を動かす上で躓いたことを残しときます。

※あくまで筆者の環境でしか確認していないので、参考までにお願いします。

 

アノテーションの出力例が表示されない場合がある

GitLabの手順に沿って、アノテーション作成・出力例を確認する箇所があります。

運悪いと何も物体検出するものがない写真に当たって、値が出てこない場合があります。

(ただランダムに抽出している写真の1枚を確認しているため)

 

特にそのまま気にせず学習を進めても問題ありません。

ただ気になる人は一つ前のアノテーションファイル作成の箇所からやり直せばOKです。

(ROOT_PATH+'train.txt' ,test.txt'を作る箇所です。)

何回か実施していれば、物体検出するものがある写真に当たります。

 

error: (-215:Assertion failed) !buf.empty() in function 'imdecode_'

学習する際に画像が読み込めないエラーが発生しました。

ただ、全ての写真でエラーが出ているという状況ではありませんでした。

(ビルドのデータセットを作ろうとして、暫くするとエラーがでる)

error: YoloRosaDataset: OpenCV(4.6.0) /io/opencv/modules/imgcodecs/src/loadsave.cpp:816: error: (-215:Assertion failed) !buf.empty() in function 'imdecode_'

 

エラーの中身を追っていくと、単純に1枚の画像が空の状態でした。

PzHtqS4uoKqJNy6e5y6FXPiA_223.jpg

 

単純にダウンロードしたデータセットのZIPファイルをunzipで解凍しただけです。

なぜか特定の一枚の画像ファイルだけ0kBとなっていました。

(うまく解凍できなかった?アップロード中に壊れた? 何が原因はよく分からず…)

筆者のGoogledrive上で再度解凍したところ再現性はありました。

 

ローカルのWindows・Linuxで解凍したところ、特定のファイル含めて全て開けました。

Google Drive上で壊れていた特定の画像ファイルだけ交換すると、問題なく学習できました。

 

学習後にサンプル画像にプロットするとメモリエラー

学習後に全サンプル画像にプロットする箇所がありますが、メモリがクラッシュしました。

一度に大量に画像をプロットしようとして、単純にシステムRAMが不足するためでした。

(Colab Proの25GB近くあるハイメモリの環境でも不足します)

 

1000枚ぐらいだったら一度にプロットできました。

学習後のプロットに関しては途中で止めるか、分割してプロットした方が良さそうです。

 

Colabのテスト結果(Gist)

綺麗にまとめていませんが、Colabのテスト結果をGitHubのGistのリンク先を貼っておきます。

2回目以降に実施する際に不要な箇所は#でコメントアウトしています。ご注意下さい。

あくまでGitlabのサンプルに追記して確認したレベルです。参考までにお願いします。

 

まとめ

Opera Datasetの2DサンプルをColabでテストしてみました。

Google Driveにデータセットを入れて、実際に学習・プロットすることまで出来ました。

よろしければ皆さまも試してみて下さい。

 

コメント