機械学習

MXNetで『カメラ・動画対応!物体検出ソフト』を作った -Yolo, SSD, Faster-RCNNモデル対応-

MXnetとGluonで物体検出ソフトを作る

こんにちは。

コンピュータビジョン(『ロボットの眼』開発)が専門の”はやぶさ”@Cpp_Learningです。

『深層学習による物体検出』が好きで色んな記事を書いてます。

Chainer・PyTorch・ONNX Runtimeによる物体検出ソフトについては、本サイトの”画像処理カテゴリー”で公開中です。

今回はAWS(Amazon Web Services)が公式サポートしているMXNetを使って物体検出ソフトを作りました。

MXNetとは

MXNetとは、AWSが公式サポートしている深層学習フレームワークです。

深層学習フレームワークという意味で、Tensorflow・Pytorch・Chainerなどの仲間です。

【MXNetの特徴】をリスト化したものが以下です。

MXNetの特徴
  • AWSが公式サポートしている深層学習フレームワーク
  • 自然言語処理・物体検出などを簡単に扱えるGluon APIがある
  • インストール簡単
  • チュートリアル充実
  • ONNXモデルのImort/Exportの両方をサポート
  • C++、JavaScript、Python、R、Matlab、Julia、Scala、Clojure、Perl といった幅広いプログラミング言語をサポート

MXNetの魅力をもっと知りたい人は、AWS公式サイトを覗いてみて下さい。

Gluonとは

Gluonとは、MXNet用の柔軟で使い易いAPIのことです。

以下の充実したチュートリアルで勉強すると、Gluon API柔軟かつ直感的に扱えることが分かると思います。

To get started with Gluon, checkout the following resources and tutorials:

  • 60-minute Gluon Crash Course – six 10-minute lessons on using Gluon
  • GluonCV Toolkit – implementations of state of the art deep learning algorithms in Computer Vision (CV)
  • GluonNLP Toolkit – implementations of state of the art deep learning algorithms in Natural Language Processing (NLP)
  • Dive into Deep Learning – notebooks designed to teach deep learning from the ground up, all using the Gluon API

引用元:MXNet/Gluon|公式

本記事では、物体検出を実践するので、GluonCVを使います。

スポンサーリンク

環境構築

MXNetおよびGluonは、pipで簡単にインストールできます。

Gluon公式サイトの”インストール”ページに飛ぶと以下の画面が表示されます。

MXNetとGlueCVのインストール方法

環境に応じた選択を行い、表示された「インストールコマンド(COMMAND)」をコピペして実行すれば、インストールが始まります。

上図は、Windowsにインストールする場合の例です。

Intel CPU搭載マシンなら、MKL-DNNを選択した方がパフォーマンスが向上します

また、動画を扱うときにOpenCVを使いたいので、以下のコマンドでインストールします。

pip install opencv-python

以降で説明するソースコードは以下のバージョンで動作確認しました。

  • Python==3.7.3
  • mxnet==1.4.1
  • gluoncv==0.4.0
  • opencv-python==4.1.0
  • matplotlib==3.1.0

Model Zoo for GluonCV

GluonCVには、Model Zoo(モデルの動物園)があります。Model ZooのObject Detectionを覗いてみると…

GluonCVで直ぐに試せる、以下の物体検出モデルが用意してあります。

  • SSD
  • Faster-RCNN
  • YOLO-v3

下図はデータセット:Pascal VOCで学習されたSSDモデルのリストです。

Model Zoo

例えば、上図の青枠は「MobileNetV1ベースSSDモデル(入力サイズ512×512)」です。

MobileNet SSDについては、以下の記事でも扱っているので、良ければ参考にして下さい。

PytorchでMobileNet SSDによるリアルタイム物体検出
PyTorchでMobileNet SSDによるリアルタイム物体検出深層学習フレームワークPytorchを使い、ディープラーニングによる物体検出の記事を書きました。物体検出手法にはいくつか種類がありますが、今回はMobileNetベースSSDによる『リアルタイム物体検出』を行いました。...
スポンサーリンク

物体検出ソフト『MXNetCV_Cam.py』の開発

【MXNetの特徴】で説明した通り、チュートリアルが充実しているため、SSDモデルのチュートリアルも用意してあります。

このチュートリアルのコードを使えば簡単に静止画の物体検出を実現できます。

ただし、今回やりたいのは「カメラ・動画対応の物体検出」だったので、新規でソースコード”MXNetCV_Cam.pyを作成しました。

実験や研究などで使い易いように、以下のポイントを考慮して作成しました。

  • 複数モデル対応
  • スコア閾値の変更が簡単
  • カメラ・ビデオ対応
  • フレーム数・FPSの表示

『MXNetCV_Cam.py』の使い方

パーサーで以下の項目を設定してから、”MXNetCV_Cam.pyを実行します。

設定項目 記号 選択候補
モデル –model Model Zooにある好きなモデル
スコア閾値 –threshold ボックス描画したいスコアの下限値
カメラ・動画モード選択 末尾に設定 カメラなら”0”
動画ならファイルパス

いくつか例を示します。

【使用例1】 YoloV3で物体検出(カメラモード)

COCOデータセットで学習した「MobileNetV1-YoloV3モデル」使用、スコア閾値=0.6に設定して、カメラモードで実行

python MXNetCV_Cam.py -model yolo3_mobilenet1.0_coco -threshold 0.6 0

【使用例2】 Faster-RCNNで物体検出(動画モード)

COCOデータセットで学習した「ResNet50-Faster-RCNNモデル」使用、スコア閾値=0.7に設定して、動画モードで実行

python MXNetCV_Cam.py -model faster_rcnn_resnet50_v1b_coco -threshold 0.7 [VideoPath]

【使用例3】 SSDで物体検出(デフォルト設定・カメラモード)

モデルや閾値に何も設定せず、カメラ・動画モードのみを設定して実行もできる。

python MXNetCV_Cam.py 0

※Pascal VOCで学習された「MobileNetV1-SSDモデル」、スコア閾値=0.5がデフォルト設定

キーボードの”q”を押すと停止し、動画の場合は、動画が終れば自動停止します。

モデルのダウンロードが必要なので、インターネットに接続されたPCを使って下さい(ダウンロード済みのモデルを使う場合は、インターネット不要です)

動作確認

任意の設定で”MXNetCV_Cam.pyを実行すると以下のような映像が出力されます。

※この映像は20fpsで再生しています。

『MXNetCV_Cam.py』公開のモチベーション

本記事で紹介した”MXNetCV_Cam.py”を公開したモチベーションについて少しだけ説明すると…

「深層学習と画像処理」をメインで研究・開発している人だけでなく、以下のような人が手軽に使えるソフトを提供したかった。

【対象読者】

  • これから深層学習や画像処理を勉強したいと考えている人
  • 物体検出がどんなものか直観的に理解したい人
  • ロボットやアクチュエータ制御でイメージセンシングを活用したい人(ただし、画像処理を勉強する時間がとれない)

以下の記事で紹介している”⼭下り⽅式”の勉強方法に貢献するサンプルコードとして、”MXNetCV_Cam.pyを活用して頂ければ嬉しいです(*・ω・)ノ♪

図解速習DEEP LEARNING
【技術書典】『秒速DEEP LEARNING』と『図解速習DEEP LEARNING』の感想文こんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。 2018/10/8 体育の日(祝日)に『技術書典...
スポンサーリンク

まとめ

本サイトで様々なフレームワークを使用した「物体検出ソフト」を公開しており、今回はMXNetによる物体検出ソフトを公開しました。

1つのコードで色んな物体検出モデルを試せるので…

  • 出力結果から各モデルの特徴を考察
  • 用途に応じたモデルを見つける
  • MXNetCV_Cam.pyの出力結果(座標やスコア情報)を使って何かを制御

などアイデア次第で面白いことができると思います。

”MXNetCV_Cam.py”を活用して○○しました!

という人が現れたら最高に嬉しいです(*・ω・)ノ♪

はやぶさ
はやぶさ
理系応援ブロガー”はやぶさ”@Cpp_Learningは頑張る理系を応援します!

本編(完)

おまけ -本の紹介-

技術書展6で入手した書籍:機械学習の炊いたん。|技術書典6はCHAPTER1~5まであり、各CHAPTERを別の著者が執筆した本です。

くるる
くるる
著者が5人も!ステキだー♪

(突然でてきたフクロウの”くるる”@kururu_owl が今日も可愛い)

この本の「CHAPTER 2 AWS SageMakerではじめるモデルの学習とデプロイ」にMXNetの魅力がたっぷり詰まっていました!

「MXNetとAWS SageMakerを⽤いてDeep Learningモデルの学習からデプロイまで⾏う⽅法」をコード付きで説明しており、大変勉強になりました。

機械学習の炊いたん。|技術書典6(無料サンプルあり)

また、本記事をきっかけに「機械学習を勉強したい!」と思った人には以下の記事をオススメしておきます。

勉強で得られるもの
機械学習の勉強法!キカガク流 Udemy講座の感想など -エンジニア目線-こんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。 【深層学習チュートリアル】などの技術ブログを書い...
くるる
くるる
上の記事で本の紹介もしてるよー

本サイトの記事が勉強の参考になると嬉しいです。勉強を楽しも―(*・ω・)ノ♪

おまけ(完)

ONNX RuntimeとYoloV3でリアルタイム物体検出
ONNX RuntimeとYoloV3でリアルタイム物体検出Microsoft社製OSS”ONNX Runtime”の入門から実践まで学べる記事です。ONNXおよびONNX Runtimeの概要から、YoloV3モデルによる物体検出(ソースコード付)まで説明します。深層学習や画像処理に興味のある人にオススメの内容です。...
ChainerCVとYoloでリアルタイム物体検出
ChainerCVとYoloで『カメラ・動画対応!リアルタイム物体検出ソフト』を作るChainerファミリ一つChainerCVのYoloサンプルソースをカメラ・動画に対応できるよう改造した「リアルタイム物体検出ソフト」を開発した。その開発手順を紹介します。...

 

LINEスタンプ配信中!

フクロウのLINEスタンプ

当サイトのマスコットキャラクター

「フクロウのくるる」が

LINEスタンプになりました!

勉強で疲れたあなたに癒しをお届け☆

お迎え待ってます(*・ω・)ノ♪

今すぐお迎えする

40個セットがたったの50コインとお得です