物体検出のDeepLearning読むべき論文7選とポイントまとめ【EfficientDetまでの道筋】

お久しぶりです。
2012年のHintonさんのAlexNetによるILSVRCでの圧勝を皮切りに、画像認識の世界でもDeepLearningが脚光を浴びることとなりました。

物体検出の世界でも現在DeepLearningを用いたモデルが主流になっています。
https://paperswithcode.com/sota/object-detection-on-coco を見ると、

![スクリーンショット 2020-08-28 11.34.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265344/83bafe91-cf1d-ca08-88bb-0832bc420990.png)

COCO test-devにおいて、state-of-the-art(SoTA)のモデルはEfficientDet-D7xのようです。
独断と偏見も少々ありますが、そのEfficientDetを理解するために読むべき論文を7つ集めてみました。


DeepLearning以降の物体検出に焦点を当てて、出来るだけ簡潔につらつらと書いていきたいと思います。

## 物体検出とは
物体検出について知らないという人は以下の動画を見てみてください。YOLOv2の動画なんですが、めちゃくちゃかっこいいです。

https://youtu.be/VOC3huqHrss

## two-stage型検出器とone-stage型検出器
物体検出器は大きく分けてtwo-stage型とone-stage型に分類されます。
前提知識として、ここで軽く紹介しておきます。

- two-stage型
    - Faster R-CNN, Mask R-CNNなど領域提案部分が分離されているもの。
- one-stage型
    - YOLO, SSDなど領域提案部分が分離されておらず、処理が一度で済むようになっているもの。

以下、本題の論文7選に入っていきたいと思います。
基礎的なものから順番に紹介していきます。

## 1. [Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks](https://arxiv.org/pdf/1506.01497.pdf)（2016）
### 概要
通称Faster R-CNN。
DeepLearningによる物体検出のパイオニア的論文。
two-stage系検出器の元祖。

### 先行研究と比べてどこがすごい？
region-based CNN(R-CNN), Fast R-CNNに対して推論時間の大幅な高速化を達成した。
End-to-Endを実現。

### 技術のキモは？
- RPN(Region Proposal Network)
    - CNNを通した後のfeature mapに対してanchor boxを生成
    - 各anchor boxに対して前景/背景の分類と矩形回帰を実施
- ROI Pooling
    - 任意の大きさの矩形に対して、決まったサイズの要素を出力する
- 検出が2 stageに分かれる
    - stage 1 : RPNで物体があるっぽい矩形を抽出
    - stage 2 : RPNで抽出した矩形に含まれる特徴を使ってクラス分類と矩形回帰

### どうやって有効だと検証した？
- PASCAL VOCとMS COCOで当時のSoTAを達成
- 1画像あたりの推論時間を200msecまで短縮

### 議論はある？
- さらに速くするためにはどうしたらよいか。

## 2. [You Only Look Once: Unified, Real-Time Object Detection](https://arxiv.org/pdf/1506.02640.pdf)（2016）
### 概要
通称YOLO。
Faster R-CNNと同時期のモデル。
one-stage系検出器の元祖。
はじめに紹介した動画はYOLO v2のもの。
現在は作者は変わっているがv5まで出ている。

### 先行研究と比べてどこがすごい？
とにかく早い。(精度面ではSoTAは達成していない)
Faster R-CNNでも一応リアルタイム検出が出来るが、YOLOからが本当のリアルタイム検出だと思う。

### 技術のキモは？
- S×Sのグリッドに分け、グリッドごとに考えるというシンプルな発想。
- feature mapの最終段を用いて"classification"と"regression"を同時に行うネットワーク構造。

### どうやって有効だと検証した？
- Faster R-CNNよりはるかに速い45FPSを達成。(Faster R-CNNは5FPS)
- さらに速いFast YOLOを用いると155FPSを達成。

### 議論はある？
- 推論速度を保ちつつさらに精度を上げるにはどうしたらよいか。

## 3. [SSD: Single Shot MultiBox Detector](https://arxiv.org/pdf/1512.02325.pdf)（2016）
### 概要
通称SSD。
YOLOと同じく元祖one-stage系検出器。

### 先行研究と比べてどこがすごい？
two-stage型と同等な精度を保ちつつ、59FPSを達成。

### 技術のキモは？
- 階層的なfeature mapを使用。それぞれのfeature mapに対してAnchor(論文ではDefault Boxと呼ばれている)を定義。

### どうやって有効だと検証した？
- VOC2007で74.3%mAP, 59FPSを達成。(YOLOは63.4%mAP, 45FPS)

### 議論はある？
- どうしたらより良く小さな物体を検出できるか。

## 4. [Feature Pyramid Networks for Object Detection](https://arxiv.org/pdf/1612.03144.pdf)（2017）
### 概要
通称FPN。
EfficientDetで用いられているBiFPNの元となった理論。
新たな特徴抽出方法。

### 先行研究と比べてどこがすごい？
ピラミッド型の特徴量の利用をすることで、スケールの違う物体の検出における認識を行いやすくしている。

### 技術のキモは？
- 下位のfeature mapと上位のfeature mapを組み合わせることにより、従来のSSDなどでは意味的に弱かった下位の特徴量を強化。
- SSDでの弱点であった小さい物体の検出を克服。

### どうやって有効だと検証した？
- FPNをFaster R-CNNに組み込むことによって、COCOで当時のSoTAを達成。

### 議論はある？
- 画像の特徴を損失させず、さらに良く抽出させるにはどうしたらよいか。

## 5. [Focal Loss for Dense Object Detection](https://arxiv.org/pdf/1708.02002.pdf)（2018）
### 概要
通称RetinaNet。
Focal Lossという新しい概念を導入。

### 先行研究と比べてどこがすごい？
Anchor Boxなどを用いると背景クラスが必然的に多くなってしまい、従来はそれをHard Negative Miningなどで解消していたが、それをLossを変えるという異なったアプローチで改善。

### 技術のキモは？
- cross entropyを軸に補正を加えている。
- well-classified exampleに対しては、Lossにあまり影響を与えないように改変している。（つまり、分類が容易な例(easy example)は重みを小さくし、分類が困難な例(hard negative)の訓練に焦点を当てている。）

### どうやって有効だと検証した？
- COCOでの当時のSoTAを実現。

### 議論はある？
- なし。

## 6. [EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks](https://arxiv.org/pdf/1905.11946.pdf)（2019）
### 概要
通称EfficientNet。
今回の７つのうちこの論文のみ、"detection"ではなく"classification"についての論文。
Google Brainによって発表された。
EfficientDetのbackboneに使用されているので採用。

### 先行研究と比べてどこがすごい？
従来よりかなり少ないパラメータ数で高い精度を叩き出したところ。

### 技術のキモは？
- モデルのスケールアップに対して広さ(1レイヤーのサイズ)、深さ(レイヤーの数)、解像度(入力画像の大きさ)のを最適化している
- compound coefficient $\phi$ という1つの係数を用いてモデルの構造を決めている。

### どうやって有効だと検証した？
- ImageNetを含む5つのデータセットでSoTAを達成。

### 議論はある？
- なし。

## 7. [EfficientDet: Scalable and Efficient Object Detection](https://arxiv.org/pdf/1911.09070.pdf)（2020）
### 概要
通称EfficientDet。
2020年に発表された最新の物体検出モデル。
前述のRetinaNetのFPNをBiFPNに変え、backboneをEfficientNetにしたようなモデル。

### 先行研究と比べてどこがすごい？
同程度の精度が得られている既存のモデルに比べると、EfficientDetではパラメータ数がかなり減少している。また、演算回数(FLOPs)が少ない。

### 技術のキモは？
- 複数の解像度の特徴マップをうまく混合してFeaturePyramidを得るための方法であるBiFPNを提案。
- EfficientNetのようにネットワークの容量をスケールさせるパラメータを導入し、FLOPsと精度のバランスを図っている。

### どうやって有効だと検証した？
- 論文の実験結果によるとCOCOでの性能評価でSoTAである55.1%に達している。

### 議論はある？
- なし。

## 番外編
EfficientDetとはあまり関係ありませんが、番外編も残しておきます。もし興味があれば読んでみてください。

- [Libra R-CNN: Towards Balanced Learning for Object Detection](https://arxiv.org/pdf/1904.02701.pdf)
    - 物体検出における学習段階の課題を分析し、それぞれの課題に対する改善した手法を提案している。
- [End-to-End Object Detection with Transformers](https://arxiv.org/pdf/2005.12872.pdf)
    - BERTや話題のGPT-3など自然言語処理で威力を発揮しているTransformerを物体検出に応用している論文。

## おわりに
今回は簡単に論文のポイントについて書いてきましたが、それを踏まえて元論文を読んでみると理解が深まると思います。

EfficientDetの実装はこちらになります。
PyTorch: https://github.com/rwightman/efficientdet-pytorch
TensorFlow: https://github.com/google/automl/tree/master/efficientdet (論文に記載)

最後まで、読んでいただきありがとうございました！