【論文読み】Single Shot MultiBox Detector

#SSDとは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455946/0e56b7b4-9e62-f28d-3655-336d429f4e83.png)

- 単一ディープニューラルネットワークを使って画像の中の物体を検出する方法
- 論文ではVGG16にExtra Feature Layersという畳み込み層を加え、物体検出を可能にした
- 予測時にカテゴリスコアの算出とデフォルトボックスの調整を行う

# Contribution
 - これまでの最先端であるYOLOを超える速度と性能を持つ物体検出方法(SSD)の提案
 - 小さな畳み込みフィルターを使うことで、デフォルトバウンディングボックスのカテゴリスコアとボックスのオフセットを予測させた
 - 異なるスケールの特徴マップから異なるスケールの予想を作り出し、アスペクト比によって明示的に分割した
 - これらのデザインによって低解像度の画像であっても、シンプルな End-to-End の訓練と高い精度につながり、スピードと精度のトレードオフを解消した
 - 様々な入力サイズをPSCAL VOC COCO, ILSVRCで検証して、最先端モデルと比較した。

# 1. Introduction
##これまでの物体検出との比較
  - 今までの手法
    - バウンディングボックスを仮定する
    - 各ボックスそれぞれでピクセルや特徴を再サンプル
    - 高性能の分類器を適用する
      - 正確だが計算負荷が大きく、リアルタイム物体検出に使うには遅すぎる
  - SSD
    - 初のディープニューラルネットワークベースの検出器
    - ピクセルや特徴を再サンプル必要がない
    - バウンディングボックスの採用と再サンプル工程を取り除きをしたため、従来より早い
 
# 2. The Single Shot Detector (SSD)
## SSDのフレームワーク
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455946/fceb5276-7e99-613a-9139-ac8286942de5.png)
 
- 入力画像と正解ボックスが必要
- 畳み込みによって、異なるいくつかの(4つくらいの)アスペクト比のデフォルトボックスと正解ボックスを異なるスケール(eg. 4x4 や 8x8)で評価する
- マッチしたデフォルトボックスは正、しなかったものは負として扱われる


## 2.1 モデル
 - フィードフォワード畳み込みネットワークでバウンディングボックスの集まりとボックスの中の物体のスコアを作り出す
 - Non-Maximum suppressionによって最終的な値が求められる
    - ベースネットワーク (画像分類のアーキテクチャー)
    - 補助的な構造
        - 検出のためのマルチスケール特徴マップ
            - 畳み込み特徴レイヤーをベースネットワークの最後尾に追加
            - サイズを大きく減少させて、マルチスケールの検出を可能にした。
        - 検出のための畳み込み予測器
            - それぞれの特徴レイヤーが畳み込みフィルターを使って検出予測を作り出すことができる
        - ディフォルトボックスとアスペクト比
            - それぞれの特徴マップで、デフォルトボックスからのオフセットとクラスのスコアを求める

## 2.2 訓練
### マッチング戦略
 - デフォルトボックスはjaccard係数が0.5以上であるものを正解としている
 - 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455946/03998056-70c0-5677-a2cf-b99fba336330.png)



###損失関数 = 確信度誤差関数 + 位置特定誤差
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455946/0fa2073a-0414-2b1b-e2ff-c20be4f9de99.png)


```math
x_{i, j}^{p} = \bigl\{1, 0\bigl\}
```
$x$: カテゴリpにおいて、i番目のデフォルトボックスとj番目の正解ボックスのマッチ度を示すもの
$N$: マッチしたディフォルトボックスの数
$l$: 予測されたボックス
$g$: 正解ボックス
$c$: デフォルトボックスの座標のオフセット ((cx, cy) のように書く)
$d$: ディフォルトバウンディングボックス
$ω$: 幅
$h$: 高さ
$α$: ハイパーパラメーター (実験では１とした)
###確信度誤差関数

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455946/b65f9882-01e8-0453-2a97-0016fed557bc.png)


###位置特定誤差関数
```math
L_{loc}(x,l,g) = \sum^N_{i \in Pos}\sum_{m \in {cx, cy, w, h}} x^k_{ij} {\rm smooth_{L1}}(l^m_i-\hat{g}^m_j)
```

<img width=300 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455946/ce3acf66-d769-ae92-be4c-cb74ebd7fa69.png>



###正規化

```math
\hat{g}^{cx}_j = (g^{cx}_j - d^{cx}_i) / d^{w}_i
```

```math
\hat{g}^{cy}_j = (g^{cy}_j - d^{cy}_i) / d^{h}_i
```

```math
\hat{g}^{w}_j = \log(g^{w}_j / d^{w}_i)
```

```math
\hat{g}^{h}_j = \log(g^{h}_j / d^{h}_i)
```


##デフォルトボックスのスケールとアスペクト比の選び方

 - デフォルトボックスのアスペクト比の計算
    - k番目の特徴マップのスケール $s_k$
<img width=600 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455946/e7fbebbf-554a-8ef5-5e6b-88f45c080131.png>

 - 高さと幅

$ a_r $ : アスペクト比{1, 2, 3, 1/2, 1/2}

```math
h_k^a = \frac{s_k}{\sqrt{a_r}}
```

```math
 ω_k^a = s_k(\sqrt{a_r}) 
```

 - デフォルトボックスの中心

```math
 (\frac{i+0.5}{|f_k|}, \frac{j+0.5}{|f_k|}) 
```

$|f_k|$ : k番目の特徴マップのサイズ


#3. 検証

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455946/a1c7dc8f-8af2-6960-b849-0b49810dbd21.png)

 - ILSVRC CLS-LOCで事前に訓練されたVGG16をベースに検証が行われた

## 3.1 性能比較 1 - PASCAL VOC2007 

###PASCAL VOC 2007

 - アノテーション付きの画像データセット
 - Fast R-CNN と Faster R-CNNを比較

###PASCAL VOC 2007 テスト結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455946/42012cb6-a0f2-4c16-69d6-dfbdc3ef759e.png)

 - 全体平均的にSSDの精度が高いことがわかる
 - 最高で81.6% mAPを記録
 - 入力画像は大きい方が良い

###PASCAL VOC 2007 テストの動物、乗り物、家具の分類
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455946/02ba23ff-28af-5a18-edf6-0cb2d2f91cfd.png)
$Cor$ : 正解
$Loc$ : 位置の間違い
$Sim$ : 似たカテゴリの間違い
$Oth$ : 別の物体との間違い
$BG $ : 背景との間違い

###発見と課題

 - SSDはR-CNNより位置特定誤差が少ない
 - カテゴリで多くの取り違えをしてしている
 - 複数カテゴリの場所を共有していることが部分的な原因
 - 小さな物体ではうまく認識できないことが多い


## 3.4 性能比較 2 -COCO
###COCO
 - セマンティックセグメンテーション情報が付加されたデータセット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455946/83aeae4a-d447-8b2d-f4ef-07f34ef4dcec.png)

 - COCOの物体は小さい傾向にある
 - R-CNNよりも良い結果が出ている

## 3.7 Inference time

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455946/d559f6a7-25d5-5ac8-2292-79216d76e6db.png)
 
 - Fast YOLOは155FPSと出ているが精度が22%ほど低い
 - それ以外は速度と精度の両方でより良い結果が出ている
 - SSDの計算時間の80%はベースネットワークに使われているため、この速度が改善されればより早いモデルになることができる