AIエンジニア
カメラを使った物体検出って、色々な用途が考えられて、ワクワクしますよね。
今回は、そんな物体検出の最新手法であるM2Detをご紹介します。
僕も2年くらい機械学習の研究をしているので、そんな知見を踏まえてまとめていきます。
お品書き
元論文
この最新手法は、AAAI19(機械学習のトップカンファレンス)で北京大学、アリババ、テンプル大学の合同チームにより発表された物体検出技術M2Detです。
元論文は以下のリンクになります。オープンソースなので、誰でも読むことができます。
参考 M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Networkarxiv.org研究者たちが作ったプログラムも同様に、GitHubで公開されています。
参考 VDIGPKU/M2Detgithub.com性能
下に示したのが、今回の手法の性能を表した図です。
縦軸が検出精度、横軸が処理時間ですので、M2Det(★)が圧倒的な性能を示しているのがわかります。

この論文では、COCO datasetを利用しています。
このデータセットは、画像認識分野ではかなり一般的に使われているもので、APIなども充実しています。
さすがトップカンファレンスの論文だけあり、ablation study (各構成要素を1つだけ抜いた手法を比較)や内部構造の変化による検出精度の変動など、様々なテストが行われいます。
詳しくは論文を参照ください。
要約すると、すごく性能がいいです(小並感)
アーキテクチャ
M2Detのアーキテクチャは、大きく分けると3つに分かれます。
その中でも、さらに細かく分かれていますので、論文内では以下のような構成で説明しています。
- Backbone network
- Multi-Level Feature Pyramid Network (MLFPN)
- Feature Fusion Module v1 (FFMv1)
- Thinned U-shape Module (TUM)
- Feature Fusion Module v2 (FFMv2)
- Scale-wise Feature Aggregation Module (SFAM)
- Prediction layers

以下で詳しく説明します。
Backbone network
ここで画像から特徴量を得ます。一般に大規模な学習済みの画像分類アーキテクチャが利用します。
論文ではVGG-16とResNet-101が用いられています。
Multi-Level Feature Pyramid Network (MLFPN)
前述の通り、MLFPNは4つのモジュールで構成されています。
- Feature Fusion Module v1 (FFMv1)
- Thinned U-shape Module (TUM)
- Feature Fusion Module v2 (FFMv2)
- Scale-wise Feature Aggregation Module (SFAM)
Feature Fusion Module v1 (FFMv1)
FFMは簡単に言えば複数の特徴マップを集めて、一つの特徴マップにまとめています。
このFFMv1では、Base featureと呼ぶ特徴マップを生成します。
Thinned U-shape Module (TUM)
ここでは、特徴ピラミッドを作るのが目的です。
大小様々な特徴マップを作ることで、検出オブジェクトの大きさが変わるのに対応します。
Feature Fusion Module v2 (FFMv2)
FFMv2で、再度Base featureとTMUの出力を合わせます。
これにより、深い層で得られた情報と処理前の情報を合わせることができます。
TUMとFFMv2を繰り返して、Shallowな特徴とDeepな特徴を抽出します。
Scale-wise Feature Aggregation Module (SFAM)
それぞれの繰り返し得た特徴ピラミッドを混ぜ合わせます。
Prediction layers
SFAMではピラミッドの各特徴マップごとに、物体クラス予測と物体位置回帰を行うことで、
考察(Discussion)
ShallowとDeepの処理を合わせることで、画像中の物体大きさの変化に対して有効に働くことを確認しています。
最近のDeep Learning研究の傾向としてある、様々なレイヤーを融合するネットワークの有効性を実験的にしっかりと調べています。
実装
M2Detは有名なアルゴリズムの一つであるため、様々実装例がGitHub上に公開されています。
PyTorchによる実装
こちらは、論文著者によるコードで一番信頼性が高いものです。
参考 VDIGPKU/M2Detgithub.comTensorFlowによる実装
ここからは非公式のものになります。
TensorFlowに組み込まれているKerasによる実装です。
参考 taashi-s/M2Det_kerasgithub.com信頼性は高くありませんが、純粋にTensorFlowで書かれたものです。
参考 cjpurackal/m2det-tfgithub.comより論文を深く理解するために
論文を理解するためには、やはり理論的背景が必要です!
今回の論文でも、損失関数などはニューラルネットに対する数学的理解を要求されてます。
ブロガーの僕が言うのも変ですが、ネット記事より書籍の方が情報がまとまっていますので、本でも勉強をおすすめします。
他の記事で機械学習分野における、僕のおすすめ本を紹介しているので、参考にしてみてください。

まとめ
いかがでしたでしょうか?
今のところ最強の物体認識アルゴリズムです。
GitHubでコードも公開されており、READMEもしっかり書いてあるので試しやすそうです。
僕も今度試して見たいと思います。