Google Colab + MMDetectionで楽してObject Detection - 1.導入編 -
はじめに
こんにちは!すだです!
私は普段はメーカーで画像認識 AI の研究開発を行うエンジニアをしつつ、空き時間にはプログラミングのメンターとして、画像認識 AI を中心に Deep Learning を教えています。
本業をやっていてもメンターをやっていても良く感じるのが、Object Detection の需要の高さです。
最近は生成系の技術が流行っていますが、自動運転や医療のように社会実装が近い産業分野では、依然として Object Detection のような基本的なタスクが求められているように感じますし、
Deep Learning を初めたばかりの方にとっては、Classification より華のある Object Detection をやりたいという方が多いように思います。
Object Detection をやろうとして壁になるのが「アルゴリズムの複雑さ」です。他の画像認識タスクの Classification や Semantic Segmentation は割とモデル構造がシンプルですが、Object Detection は、モデル構造や損失関数、正解の割り当て、後処理など、さまざまな技術が組み合わさって構成されているので、いろんな技術をさっと試すのが比較的難しいというのが私の所感です。
そんなとき、とても便利なのが、MMDetectionという Object Detection のツールボックスです。 これを使うと、基本的なモデルから最新のモデルまで比較的簡単に動かすことができます。
今後、シリーズで MMDetection で行えるいろんな便利な機能を紹介していきたいと思います!
MMDetection とは
MMDetection はOpenMMLabという研究機関が公開している PyTorch ベースの Object Detection 向け Deep Learning ライブラリです。
公式 Githubに書いてある Major Features によると
- Modular Design
- Support of multiple frameworks out of box
- High efficiency
- State of the art
が特徴として挙げられています。
Object Detection はモデル構造(Backbone, Neck, Head)や Assigner, Loss, Data Augmentation などいろんな要素が組み合わさって構成されていますが、1 の特徴により、一部を変えて残りは固定して、性能を比較するというようなことも簡単にできます。
また、比較的頻繁に新しい技術が実装されますので、新しい技術も簡単に試せます。
公式で実装されていないオリジナルの技術も実装することもできます。
これらの特徴からとても使い勝手が良いため、私は本業でも生徒さんに教えるときにも良く利用しています。
では、ここから実際に使えるようになるまでの手順を解説します。
今回作成した Colab Notebook は下記です。
Google Colab の設定
Google Colab で Deep Learning モデルを動かす場合、処理時間の観点から、GPU は使用した方が良いです。
「ランタイム」の設定項目から「ランタイムのタイプを変更」をクリックし、
「ハードウェアアクセラレータ」を「None」から「GPU」に変更してください。
MMDetection の環境構築
公式 GitHub の Getting Startedをベースに環境構築を進めていきます。
Google Colab では初めから PyTorch がインストールされているので、公式の手順のうち PyTorch のインストールはスキップします。
mmcv
のインストール
まずはmmcv
という OpenMMLab 製のコンピュータビジョン系ライブラリをインストールします。コンピュータビジョン系以外にもファイル操作などユーティリティ系の関数なども含まれていて便利です。
またmmcv
のインストールに先立ち、これも OpenMMLab 製の、openmim
というライブラリをインストールしています。
下記コマンドを実行してください。
!pip install -U openmim
!mim install mmcv-full
MMDetection のインストール
下記コマンドを実行すると MMDetection がインストールされます。
!git clone https://github.com/open-mmlab/mmdetection.git
%cd mmdetection
!pip install -v -e .
インストールの確認
モデルを動かしてみてインストールが正常に行えたことを確認します。
学習済みモデルのダウンロード
openmim
を使うと、既に特定とデータセットで学習が完了したモデルをダウンロードすることができます。便利ですね!
学習済みモデルの重みファイルとモデル構造などが記載された config ファイルをダウンロードします。
まずは、保存先のフォルダを作ります。
!mkdir trained_models
次に重みファイルと config ファイルをtrained_models
フォルダにダウンロードします。
今回は、MSCOCO データセットを MobileNetV2 が Backbone の YOLOv3 で学習したモデルをダウンロードしています。
!mim download mmdet --config yolov3_mobilenetv2_320_300e_coco --dest trained_models
上記を実行すると、
yolov3_mobilenetv2_320_300e_coco.py
yolov3_mobilenetv2_320_300e_coco_20210719_215349-d18dff72.pth
がtrain_models
フォルダにダウンロードされます。前者が config ファイル、後者が重みファイルです。
画面左のファイルツリーからダウンロードされたことを確認しましょう。
モデルを実行
ダウンロードしたファイル類とデモスクリプトを使ってデモ画像を処理してみます。
config_path = 'trained_models/yolov3_mobilenetv2_320_300e_coco.py'
weights_path = 'trained_models/yolov3_mobilenetv2_320_300e_coco_20210719_215349-d18dff72.pth'
!python demo/image_demo.py demo/demo.jpg $config_path $weights_path --device cpu --out-file result_yolov3.jpg
result_yolov3.jpg
に以下のような結果が出力されれば、インストールは成功です。
一番前にあるベンチはもちろん、後ろにあるベンチや車もちゃんと検出できていますね。
GPU で実行
上記のデモは CPU を使った処理なので、GPU を使って実行してみましょう。
!python demo/image_demo.py demo/demo.jpg $config_path $weights_path --device cuda:0 --out-file result_yolov3.jpg
先ほどと同じ結果が出ることを確認してください。
GPU 処理にしたので、すごく速くなることを期待しましたが、モデルの GPU へのコピーや、結果の描画など、モデルの処理以外の処理が全体の中で大きな割合を占めているようで、速くなりませんでした。速度を比較するには、モデル定義後にモデルの処理部分だけを繰り返し処理して平均を出したりする必要がありそうですね。
(おまけ)自分で用意した画像を処理してみる
うちで飼っている猫たちも検出できるか試してみます。
画像の準備
Google Colab を動かしているのと同じアカウントの Google Drive に画像をアップします。
今回はマイドライブに images というフォルダを作って、「my_cat.jpg」という名前でアップロードしました。
ちなみにこんな画像です。かわいいですね。
Google Drive にマウント
下記コードを実行します。
from google.colab import drive
drive.mount('/content/drive/')
実行すると、Google Drive への接続を許可するかを尋ねるメッセージが出ますので、許可してください。
モデルで処理
それでは先ほどのデモスクリプトを、入力画像と出力先を変えて実行してみましょう。
src_path = '/content/drive/MyDrive/images/my_cats.jpg' # 各自変更してください
dst_path = '/content/drive/MyDrive/images/my_cats_result.jpg' # 各自変更してください
!python demo/image_demo.py $src_path $config_path $weights_path --device cuda:0 --out-file $dst_path
結果
出力先のマイドライブの images フォルダを見てみましょう。
ちゃんと処理結果が出力されていますね。
検出結果もバッチリです。かわいいですね。
まとめ
無事に MMDetection を Google Colab で動かすことができました!
次回は、MMDetection で使える最新モデルを動かしてモデルの比較をします。
Discussion