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に登録すれば、「データ」のタブからダウンロードできます)

SIGNATE - Data Science Competition
データサイエンス・AI開発のコンペティションを開催・参加できる日本最大級のプラットフォームです。

 

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にデータセットを入れて、実際に学習・プロットすることまで出来ました。

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

 

今回の記事含めて、第6回AIエッジコンテストの一環でした。

下記にてコンテストでテスト・実施したことのまとめを紹介しています。

第6回AIエッジコンテストが凄く難しいけど勉強になった感想

第6回AIエッジコンテストが凄く難しいけど勉強になった感想
第6回AIエッジコンテストに参加していました。 RISC-Vを使って、画像とLIDAR点群からの3D物体検出が課題でした。 ただ貴重な勉強の機会になりましたし、自身への忘備録としても内容を紹介します。

コメント