こんにちは。
コンピュータビジョン(『ロボットの眼』開発)が専門の”はやぶさ”@Cpp_Learningです。
『深層学習による物体検出』が好きで色んな記事を書いてます。
Chainer・PyTorch・ONNX Runtimeによる物体検出ソフトについては、本サイトの”画像処理カテゴリー”で公開中です。
今回はAWS(Amazon Web Services)が公式サポートしているMXNetを使って物体検出ソフトを作りました。
Contents
MXNetとは
MXNetとは、AWSが公式サポートしている深層学習フレームワークです。
深層学習フレームワークという意味で、Tensorflow・Pytorch・Chainerなどの仲間です。
【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公式サイトの”インストール”ページに飛ぶと以下の画面が表示されます。

環境に応じた選択を行い、表示された「インストールコマンド(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モデルのリストです。

例えば、上図の青枠は「MobileNetV1ベースSSDモデル(入力サイズ512×512)」です。
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”を活用して頂ければ嬉しいです(*・ω・)ノ♪

まとめ
本サイトで様々なフレームワークを使用した「物体検出ソフト」を公開しており、今回はMXNetによる物体検出ソフトを公開しました。
1つのコードで色んな物体検出モデルを試せるので…
- 出力結果から各モデルの特徴を考察
- 用途に応じたモデルを見つける
- MXNetCV_Cam.pyの出力結果(座標やスコア情報)を使って何かを制御
などアイデア次第で面白いことができると思います。
という人が現れたら最高に嬉しいです(*・ω・)ノ♪
本編(完)
おまけ -本の紹介-
技術書展6で入手した書籍:機械学習の炊いたん。|技術書典6はCHAPTER1~5まであり、各CHAPTERを別の著者が執筆した本です。
(突然でてきたフクロウの”くるる”@kururu_owl が今日も可愛い)
この本の「CHAPTER 2 AWS SageMakerではじめるモデルの学習とデプロイ」にMXNetの魅力がたっぷり詰まっていました!
「MXNetとAWS SageMakerを⽤いてDeep Learningモデルの学習からデプロイまで⾏う⽅法」をコード付きで説明しており、大変勉強になりました。
機械学習の炊いたん。|技術書典6(無料サンプルあり)
また、本記事をきっかけに「機械学習を勉強したい!」と思った人には以下の記事をオススメしておきます。

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

