論文: M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network
注意
- 元論文:https://qijiezhao.github.io/imgs/m2det.pdf
- 本記事中の図はここを参照しています
- この解説は元論文の Google 日本語訳に対し毛が生えたようなものです
- ですので可能な限り元論文を読むことを推奨します
- 綺麗にまとめた訳ではないので似たような文が何度か繰り返される箇所があります
- 真剣に読んでまとめましたが間違えてる可能性はあります。マサカリください
- Experiments, Discussion, Conclusion については本記事では扱ってません
- M2Det って何?構造上これまでのモデルと何が違うのか?をしっかりまとめたかったので
- Experiments は後日追記するかもしれません
導入
2018年の物体検出では、速度精度の両方を見た場合 YOLOv3 が最もインパクトが大きかったと思います。 特に機械学習触ったことがない人にとって比較的導入しやすい(導入しやすいとは言っていない)のもポイントだったと思います。
そんな YOLOv3 に対し M2Det は もっと速くてもっと精度良い らしいです。 元論文は AAAI2019 にも採択されたらしいです。 今回はそんな M2Det の論文を頭からしっかり読んでいきます。
- 詳細な論文の訳が知りたい人は下記の内訳を確認してください。
- scale と level について
- 論文内では scale と level の 2つの観点で feature を分けています
- scale: 画像内での大きさ、scale が大きい -> 画像内で対象の占める面積が大きい
- level: 特徴としての抽象度や複雑度
- level が低い feature -> より単純な特徴
- level が高い feature -> より複雑な特徴や、抽象度が高い特徴
- 論文内では scale と level の 2つの観点で feature を分けています
- base feature について
- この論文内での base feature は、backbone となるネットワーク (VGG16 とか) から得た feature を FFMv1 モジュールによって統合したものです
ぶっちゃけ何がすごいの?
- YOLOv3 より速くて精度良い
- multi-level な特徴を multi-scale に扱えるようにした
- 過去のメジャーなモデルほとんでについて実験してる
- すごすぎる
- ここまでやれば AAAI 通るのか…
論文内訳
1. 著者情報
- 著者一覧
- Qijie Zhao(1)
- Tao Sheng(1)
- Yongtao Wang(1)
- Zhi Tang(1)
- Ying Chen(2)
- Ling Cai2 and Haibin Ling(3)
- 著者所属
- 1: Institute of Computer Science and Technology, Peking University, Beijing, P.R. China
- 2: AI Labs, DAMO Academy, Alibaba Group
- 3: Computer and Information Sciences Department, Temple University
中国すご…
2. Abstract
- Feature pyramids めっちゃ流行ってるよな
- one-stage object detectors (e.g., DSSD, RetinaNet, RefineDet)
- two-stage object detectors (e.g., Mask R-CNN, DetNet)
- でも上記のモデルたちは backbone のタスク(classification) 用のマルチスケール feature 使ってるからある程度制限かかってるよな?
- 🤔
- 俺らは "Multi-Level Feature Pyramid Network (MLFPN)" を提案するぜ
- 上記より detection に特化した feature pyramids だぜ
- 以下 3 step で作るぜ
- base feature として extract した fuse multi-level features (i.e. multiple layers) を融合する
- 以下2つ
- base feature を次の2つを組み合わせたブロックに入れる
- Thinned U-shape Modules
- Feature Fusion Modules
- また U-shape module の decoder layers は Object detection 時に活用する
- base feature を次の2つを組み合わせたブロックに入れる
- 同じ scale(size) の decoder layer を集約して Detection 用の feature pyramid を作る
- どの feature map も multiple-level な layer(feature) を含む
- だから精度上がってる???
- 上記の MLFPN を SSD アーキテクチャに組み込んだものを M2Det と呼ぶことにするわ
- 性能は one-stage detector 間で SOTA だぜ
- MS-COCO benchmark
- AP of 41.0 at speed of 11.8 FPS with single-scale inference strategy
- AP of 44.2 with multi-scale inference strategy
- 上記2つの strategy の違いは???
- コードは GitHub - qijiezhao/M2Det: M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network にあるぜ
- 4月頃コードが載るらしい?
3. Introduction
- Object detection において scale variation はメジャーなテーマ
- scale variation は大きく 2つの戦略がある
- 1: image pyramid
- いろいろなサイズに resize してコピーしたイメージ群等
- test 時にしかできないぞ
- もちろんメモリ使用量や計算量は増えるぞ
- よって効率はめっちゃ悪くなるぞ
- 2: detect objects in a feature pyramid extracted from the input image
- train 時も test 時も使えるぞ
- 1 に比べてメモリ使用量や計算量が少ないぞ
- feature pyramid は SOTA detection model への統合が楽にできるぞ
- 1: image pyramid
- SSD, FPN, RetinaNet, Mask R-CNN 強いよな
- でもクラス分類用に設計された feature pyramid のせいで限界あるよな
- 一般に上記の feature pyramid 作成方法は 2つの限界がある
- 1: pyramid 内の feature map の表現力が十分でない
- Object detection 用として考えると
- Base net は object classification 用に設計したからね
- 2: pyramid 内の各 feature map は、主に single-level layer in backbone から構成されている
- 各 feature map は特定範囲サイズの object detection 用
- そのため各 feature map は主に single-level の情報のみ含んでいる
- 1: pyramid 内の feature map の表現力が十分でない
- 一般に high-level feature と low-level feature は以下の違いがある
- high-level
- 分類サブタスクに役立つ
- 複雑な見た目の物体を特徴づけるのに役立つ
- low-level
- 物体位置回帰サブタスク(Object Location Regression) に役立つ
- 単純な見た目の物体を特徴づけるのに役立つ
- high-level
- 実際にはサイズが同じでも見た目がかなり違う場合がある
- 例:「信号機」と「遠くにいる人間」-> サイズは同じくらいでも人間の方がかなり複雑な見た目をしている
- pyramid 内の各 feature map は全てもしくはそのほとんどが single-level な特徴しか含んでいない
- -> Detection の performance が準最適(最適ではない)
- 上記の問題に対処するため以下 3step で M2Det 作った
- 1: 各 level の feature を混ぜて base feature とした
- 2: 以下の操作を行う
- 以下2つを交互に組み合わせたネットワークに入力する
- Thinned U-shape Modules(TUM)
- Feature Fusion Modules(FFM)
- より multi-level, multi-scale な feature を抽出するため
- 大事なこと:U-shape Module の各 decoder layers が同じ深さを共有している
- 以下2つを交互に組み合わせたネットワークに入力する
- 3: detection 用の feature pyramid を構築するために、同じ scale の feature map を集約する
- final feature pyramid 内の各 feature map は multi-level decoder layer を含んでいる
- Hence, we call our feature pyramid block Multi-Level Feature Pyramid Network (MLFPN).
4. Related Work
- 皆、one-stage や two-stage に限らず、様々な scale に対応するため頑張ってきた。それらは大きく2つの戦略がある
- 1: featurizing image pyramids
- 例: 画像をコピーして各スケールに resize したもの
- 各 scale の画像からそれぞれ予測を出力して、それらを合わせて最終的な出力を出す
- 単純に単一 scale で予測するより精度が高い
- Shrivastava et al.2016 や SNIP(Singh and Davis 2018) が該当する
- SNIP は SNIPER の元っぽい
- これらは時間やメモリ上のコストがかかるため、real-time task は厳しい
- 上記に対処するため、SNIP(Singh and Davis 2018) では test 時は特定の featurized image pyramid のみを採用できるようになっている
- 一方 Fast-RCNN や Faster-RCNN ではデフォルトではこの方法を選択しないようになっている
- 2: feature pyramid
- 単一 scale の画像のみを使い、ネットワーク層からそれぞれの feature を取ってきて pyramid を構成する方法
- 上記の方法(featurizing image pyramids)に比べ、メモリや計算コストを抑えることができるし、real-time 処理の train, test 時の両方でそのまま使える
- 加えて、この方法は SOTA のネットワークに容易に適用できる
- 以下のネットワークがそれぞれの方法で feature pyramid を適用している
- 俺らが調べたところ、
- MS-CNN(Cai et al.2016) が 2つの sub-network を提案して初めて multi-scale features を Object detection 用にネットワークに組み込んだ
- SSD(Liu et al.2016) は VGG16 の後半の層と追加した層からの feature map を multi scale な予測のために利用した
- FPN(Lin et al.2017a) は低い層から深い層への path を追加することでより強力な表現を得ることができた
- DSSD(Fu et al.2017) はコンテキスト(背景知識?)を集約して浅い層における high-level semantics を強化するための deconvolution layer を実装しました
- この文だけでは何言ってるか分からなくて、下記のリンクを参照しました
- リアルタイム物体検出向けニューラルネット、SSD(Single Shot Multi Detector)及びその派生モデルの解説 - verilog書く人
- SSD の feature exetractor (VGG + 追加層) に対しさらに deconv 層を足して浅い feature exetractor の層を深い層にも追加した
- RefineDet(Zhang et al.2018) は 2段階の cascade regression を適用することで、SSD の効率性を維持しながら精度がめっちゃ高くなった
- 1: featurizing image pyramids
5. Proposed Method
- M2Det は backbone と Multi-Level Feature Pyramid Network (MLFPN) を使って入力画像から特徴抽出を行っている
- SSD に似てる
- 密な bounding-box と category score を出力する
- その後 NMS をして最終的な結果を出力する
- Multi-Level Feature Pyramid Network (MLFPN) は以下の 3つのモジュールを含んでる
- Feature Fusion Module (FFM)
- Thinned U-shape Module (TUM)
- Scale-wise Feature Aggregation Module (SFAM)
- FFMv1 は backbone の特徴を統合することで意味的な情報を強化している
- 各 TUM は multi-scale features 群を出力し、TUM と FFMv2 を交互に適用することで multi-level で multi-scale な features を抽出している
- SFAM は scale 毎の feature concat と attention 機能を適用することで各 feature を集約して multi-level feature pyramid を作る
5.1 Multi-level Feature Pyramid Network
- ネットワーク全体図では MLFPN は 3つのモジュールから構成されれる
- 1: FFMv1 では base feature 生成用に shallow な feature と deep な feature を統合する
- 例: VGG16(Simonyan and Zisserman2015) の conv4_3 と conv5_3
- ココらへんは SSD とかでもよく出てくる
- これらは MLFPN 用の multi-level な意味的情報を得るのに役立つ
- 2: いくつかの TUM と FFMv2 を交互に重ねる
- 特に各 TUM は異なる scale の feature map をいくつか生成する
- FFMv2 では、base feature と前の TUM から得られた feature map 内で最も大きいものを統合する
- 統合された feature map は次の TUM の入力となる
- ただし最初の TUM は他の TUM からの事前知識がないので、 から学習する
- multi-level multi-scale features は下記のように計算される
-
- : base feature
- : 番目の TUM の 番目の scale の特徴
- : 番目の TUM の処理
- : FFMv1 の処理
- 3: SFAM で multi-level multi-scale features を統合
- scale をまたいだ concat
- channel-wise attention
- 1: FFMv1 では base feature 生成用に shallow な feature と deep な feature を統合する
5.1.1 FFMs
- FFM モジュールは M2Det 内の異なる level の feature を統合する
- 以下の操作を行う
- 1x1 Conv 層を使ってチャンネルを圧縮
- concat で各 feature map をまとめる
- 特に FFMv1 では backbone 内の scale の異なる 2つの feature map を扱うため、片方に対し upsample を適用して同じ scale にしてから concat する
- 一方 FFMv2 では base feature と一つ前の TUM で出力された最も大きな feature map を扱い、これらは同じ scale である
5.1.2 TUMs
- FPN(Lin et al.2017a) や RetinaNet(Lin et al.2017b) との違いとして TUMは 薄い U型構造となっている(下図)
- 薄い U型構造?🤔
- encoder は "3x3 convolution layers with stride 2" 連続でつなげてる
- decoder は これらを feature map として受け取る
- FPN(Lin et al.2017a) では last layer of each stage in ResNet backbone
- 私達はさらに upsample の後に 1x1 の Conv 層を足し、decoder での要素和をとることによって学習能力を高めかつ特徴の滑らかさを保った
- 各 TUM の decoder の出力は、ある level での multi-scale な feature となります
- 前から後ろの TUM にかけて low-level な特徴から deep-level な特徴を出力するようになる
5.1.3 SFAM
- 目的: 各 TUM から生成された multi-level multi-scale features を統合して multi-level feature pyramid に集約する
- SFAM は大きく分けて 2つのステップがある
- Step1: 同じ scale の feature をチャンネルも一緒に concat する
-
- 番目に大きい scale の特徴
- まとめられた各 feature pyramid は、各 level の feature を含んでいる
- ただし単に concat するだけでは不十分
-
- Step2: channel-wise attention module を使って有用なチャンネルを絞る
- SENet(Hu, Shen, and Sun2017) で使われた SE ブロックを使う
- squeeze step では GAP(Global Average Pooling) を使ってチャンネル別統計 を得る
- 次にチャンネルの依存関係を捉えるため 2つの FC(Fully Connected)層を使って attention を実現する
-
- : ReLU
- : シグモイド関数
-
- : 減衰率 (論文中では を使用
- で重み付けした最終的な出力は以下の通り
-
- 各 feature は rescale 操作によって強弱がついている
-
- Step1: 同じ scale の feature をチャンネルも一緒に concat する
5.2 Network Configurations (ネットワークの設定)
- M2Det では backbone を 2種類使った(同時ではない)
- backbone は ImageNet で pre-traine 済
- デフォルトの MLFPN は以下の構成
- 8 TUMs
- 各 TUM は 5 つの Conv 層と 5つの Upsample 層を持つ
- scale は 6つ
- 各 scale の TUM feature のチャンネルは 256 のみ(学習パラメータ数を減らすため)
- 画像サイズは 320, 512, 800 (SSD, RefineDet, RetinaNet を参考に)
- 6 つの pyramidal features に対し、それぞれ 2 つの Conv 層を加え、detection(location regression と classification ) をできるようにした
- 各 pyramidal feature の pixel に対し、6つの anchor と 3つの比率(ratios) で候補ボックスを定義した
- 上記候補ボックスに対する score のしきい値は 0.05 とした
- 後処理として線形カーネルを使った soft-NMS(Bodla et al.2017) を使ってより正確なボックスを残した
- しきい値を 0.01 とするとよりよい結果になったけど、推論時間がめっちゃ長くなったので実用上このしきい値は採用しなかった