【論文メモ】NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection

注意：この文書は荒いメモなので、細かい内容に関してはご自身で元論文に当たるなどしてください。

- 論文
    - https://arxiv.org/abs/1904.07392

# 概要
各種ConvNetの複数のスケールの特徴量マップを利用するFeature Pyramid Network（FPN）は、物体検出手法でよく利用されている。しかし、複数のスケールの特徴量マップを混合してFeaturePyramidを構成する方法として、通常のFPNが本当に最良の方法なのかは疑問が残る。

本論文では、Neural Architecture Search(NAS)の枠組みよって、最適なFeaturePyramidのアーキテクチャを探索している。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/ee4b5877-d8ef-6ae4-d9cc-0e38d28bda06.png)


# 手法

複数のスケールの特徴量マップに対し、どのような処理を加えてFeaturePyramidとするのかを、NASによって探索する。図中の「×N」は、同じモジュールをNステップ繰り返すということではなく、相異なるN個の処理（論文中では、merging cellと呼称される）を行うという意味である。通常のFPNと同様、各スケールでそれぞれの分類器とBox回帰モジュールに接続されている。

![NAS-FPNが最適化する部分](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/c2babd64-b0c4-ced9-0e5c-fca087a59da2.png)

## NASによるFeaturePyramidの設計
NASでは、RNNControllerを強化学習（Proximal Policy Optimization）によって訓練することで、最適なFeaturePyramidの探索を行う。

RNNControllerは、以下の4つの要素を予測する。

1. 入力となるレイヤー1
2. 入力となるレイヤー2
3. 出力レイヤーの解像度（スケール）
4. レイヤー1とレイヤー2に対するBinary操作の種類

入力となりうるレイヤーの選択肢は、バックボーンのConvNetによって得られた特徴量マップだけでなく、前のmerging cellで出力されたレイヤーも含んでいる（下図のappendの線が、feature layersに向かっており、選択肢が追加されていることに注目）。

![RNNの出力と処理の流れの対応](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/21b8598d-c56c-800e-f89d-1b14e3aaca6c.png)

Binary操作は、SumとGlobalPoolingの2種類のうちから選択する。
![BinaryOperation](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/9d331987-24ac-873d-2397-e2673ba72099.png)

出力レイヤー（3の操作）の後には、3x3のConv層とBatchNormalizationが続く。

### Proxy Task
RNN Controllerを訓練する際、物体検出器を学習・評価しながら行うことになるので、時間が非常にかかる。そのため、個々の学習・評価を簡略化するために、ProxyTaskを導入する。

ProxyTaskは、本質的な探索対象（merging cellの組み合わせによるFeaturePyramidの構造）以外の部分を簡略化する。バックボーンとなるConvNetはResNet-10とし、画像のサイズは512x512とする。また、訓練時のエポック数も10エポックまでで止めている。

RNNControllerの報酬は、ProxyTaskのAP（Average Precision）として与えられる。

### NAS-FPNLite

モバイルなどでの推論のためのNAS-FPNLiteも考案し、実験している。

通常のNAS-FPNが$P_3,P_4,P_5,P_6,P_7$という5つのスケールでFeaturePyramidを出力するのに対して、Liteの方では、$P_3,P_4,P_5,P_6$の4つのスケールで出力する。NAS-FPNのConv層を、SSDLite[^1]に倣って、depth-wise separable convolutionで置き換えている。バックボーンはMobileNetV2である。

[^1]: [SSDLite（MibileNetV2論文）](https://arxiv.org/abs/1801.04381)

# 実験

データセットは、MS Coco2017のtrainとvalのデータを用いている。
NAS-FPNのバックボーンは、MobileNet、ResNet-50を用いている（NAS-FPNLiteは上記のとおりMobiliNetV2）。

![精度一覧](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/290ea255-2657-43cb-bc15-762c6de1b4e6.png)

表の中の「7 @ 384」というような表記は、merging cellの個数Nの数が7で、Conv層のフィルター数が384であることを示している。

また、DropBlock[^2]を用いたケースも実験している。こちらはエポック数が3倍必要だが、全体的に精度の向上が得られている。

[^2]: [DropBlock](https://arxiv.org/abs/1810.12890)

## NASによる設計結果

NASによって、以下のようなFeaturePyramidの設計が得られている。

![NAS-FPN](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/2b605ac1-4faa-b861-4e92-b5490e9452e4.png)

縦の5つの点はスケールの種類に対応し、横の7つの点は、merging cellの個数Nに対応する。
緑の丸は入力となる特徴量マップで、赤の丸が出力となる特徴量マップである。

NASによって、通常のFPN(a)とは異なるアーキテクチャのFeaturePyramidが得られている。スキップコネクションもある。

図中の精度は、ProxyTaskにおけるAPであることに注意。このように得られたFeaturePyramidで訓練した結果が、上記の表である。

# 議論
NAS-FPNの利点の一つとして、DeeplySupervise可能なアーキテクチャとなっていることが挙げられる。

DeeplySupervise可能とは、FeaturePyramidの過程で生じる全ての特徴量マップが、検出器に接続でき、訓練できるということを表す。DeeplySuperviseの利点としては、ネットワークの浅い位置に教師信号を与えることができるため、正則化の効果があることがまず挙げられる。また、推論時には、多少の精度を犠牲にして、浅い段階での予測ができるためと、簡単に高速化することができる。

# 感想

FPNは非常に美しいアーキテクチャだと思うが、美しいことが最善だとは限らない。

RNNControllerの訓練は、リソース的には趣味でやるには少々厳しい。