ラビットチャレンジ - 深層学習 補助教材 物体検知とSS

# 0．概要
本記事は日本ディープラーニング協会認定の講座プログラムである「ラビット・チャレンジ」が提供している科目の1つである深層学習のレポートである。
記事タイトルに記載のとおり、物体検知とSSについて以下にまとめる。

# 1．物体認識の種類

## 1.1．分類
画像に対して単一または複数のクラスラベル。
画像のどこかにある物体を検知するだけで位置に意味はない。

## 1.2．物体検知
Bounding Box(どこに物体があるか、どんな物体か)

## 1.3．セマンティックセグメンテーション
各ピクセルに対して単一のクラスラベル(例えば画像の中の風船のピクセルを検知)

## 1.4．インスタンスセグメンテーション
個々の物体の各ピクセルに対して単一のクラスラベル(例えば画像の中にある各風船それぞれのピクセルを検知)
物体個々に対して着目する。

# 2．代表的なデータセット

データセットを見る上で、クラス数、データ数も大事だが、1枚の画像あたりにいくつ物体があるかという点も大切。

実際の日常生活で出てくる画像は都合よく画像の真ん中に目的のものが1つだけあるようなことはそうないため、1枚の画像あたりにいくつ物体があるかが低いと物体検知には向かない。
高いほど、他の物体との重なりが合ったり色んなサイズだったりして日常生活で出てくる画像に近いと言える。

目的に合ったデータセットを選ぶことが大切。

## 2.1．VOC12
クラス数：20
Train+Valデータ数：11,540
Box/画像(1枚の画像あたりにいくつ物体があるか)：2.4

Instance Annotation(物体個々にラベリング)が与えられている。
日常生活で代表的な20クラス。

VOC=Visual Object Classes

## 2.2．ILSVRC12
クラス数：200
Train+Valデータ数：476,668
Box/画像(1枚の画像あたりにいくつ物体があるか)：1.1

ImageNetのサブセット。

## 2.3．MS COCO18
クラス数：80
Train+Valデータ数：123,287
Box/画像(1枚の画像あたりにいくつ物体があるか)：7.3

Instance Annotation(物体個々にラベリング)が与えられている。

物体位置推定に対するアタラタな評価指標を提案をしている。

MS=Microsoft
COCO=Common Object in Context

## 2.4．OICOD18
クラス数：500
Train+Valデータ数：1,743,042
Box/画像(1枚の画像あたりにいくつ物体があるか)：7.0

Instance Annotation(物体個々にラベリング)が与えられている。
画像サイズがバラバラ。

Open Images V4のサブセット。

# 3．評価指標
分類の場合、閾値を変えても混同行列に含まれる件数は変わらない(TP,FP,TN,FNのどれに属するかは変わりうる)

物体検出の場合は分類と異なり、件数が変わりうる。
例）
閾値0.5で0.9,0.8,0.7,0.6,0.55の真のクラスの予測があった場合、閾値を0.8とすると0.9,0.8しか残らない。

## 3.1．IOU(Intersection over Union：Jaccard係数)
物体位置の予測精度を評価する指標。
予測したBounding Boxに対する専有面積。

```math
IoU=\frac{Area\ of\ Overlap}{Area\ of\ Union}
```

混同行列を用いて表現すると

```math
IoU=\frac{TP}{TP+FP+FN}
```

## 3.2．Precision/Recallの計算

### 3.2.1．画像1枚
ある画像に対する検出結果を閾値0.5で抽出した結果を以下とする。
IoUの閾値を0.5とした場合、判定列のように判定される。

|  | conf | pred | IoU |判定|
|:-:|:-:|:-:|:-:|:--|
|P1   |0.92   | 人  |0.88   |IoU>0.5=TP|
|P2   |0.85   | 車  |0.46   |IoU<0.5=FP|
|P3   |0.81   | 車  |0.92   |IoU>0.5=TP|
|P4   |0.70   | 犬  |0.83   |IoU>0.5=TP|
|P5   |0.69   | 人  |0.76   |IoU>0.5=TPだが人は検出済みのためFP|
|P6   |0.54   | 車  |0.20   |IoU<0.5=FP|

```math
Precision=\frac{TP}{TP+FP}=\frac{3}{3+3}=0.5
```

```math
Recall=\frac{TP}{TP+FN}=\frac{3}{3+0}=1.0
```

### 3.2.2．クラス単位
クラス「人」に対して複数画像の検出結果を閾値0.5で抽出した結果を以下とする。
「人」が含まれている画像は4枚あるとする。

|  |画像| conf | pred | IoU |判定|
|:-:|:-:|:-:|:-:|:-:|:-:|
|P1   |1|0.92   | 人  |0.88   |TP|
|P2   |2|0.85   | 人  |0.46   |FP|
|P3   |2|0.81   | 人  |0.92   |TP|
|P4   |3|0.70   | 人  |0.83   |TP|
|P5   |1|0.69   | 人  |0.76   |FP|
|P6   |3|0.54   | 人  |0.20   |FP|

```math
Precision=\frac{TP}{TP+FP}=\frac{3}{3+3}=0.5
```

```math
Recall=\frac{TP}{TP+FN}=\frac{3}{3+1}=0.75
```

RecallのFNは4枚目の画像(人が検出されるべきだったのにされなかった)1つを指す。

## 3.3．Average Precision(AP)
confを0.05から変化させることでPR curve(Precision-Recall curve)を描くことができ、PR curveの下側面積としてAPが得られる。

confの閾値を$\beta$とすると、$Recall=R(\beta)$、$Precision=P(\beta)$、PR curveが$P=f(R)$となる。

APはクラスごとに計算する。

```math
\int_0^1 P(R) dR
```

### 3.3.1．Mean Average Precision(mAP)
APの平均。

```math
mAP=\frac{1}{C}\sum_{i=1}^{C}AP_{i}
```

$C$：クラス数

## 3.4．mAP COCO
IoU閾値を固定ではなく、0.5～0.95まで0.05刻みでAPとmAPを計算し、平均をとる。

```math
mAP_{COCO}=\frac{mAP_{0.5}+mAP_{0.55}+...+mAP_{0.95}}{10}
```

## 3.5．FPS(Flames per Second)
物体検出はリアルタイムで検出したい等といった速度を求められる場面も多いため検出速度も重要となる。

FPSは1秒間に何枚処理できるかを表す。

## 3.6．Inference time
FPSと同様に検出速度を表す指標。
1枚の画像の予測にどれだけ時間がかかったか。

# 4．物体検出

## 4.1．物体検出の種類

### 4.1.1．1段階検出器(One-stage detector)
候補領域の検出とクラス推定を同時に行う。
2段階検出器より精度が低い傾向にある。
2段階検出器より計算量が小さいため予測も早い傾向にある。

### 4.1.2．2段階検出器(Two-stage detector)
候補領域の検出とクラス推定を別々に行う。
1段階検出器より精度が高い傾向にある。
1段階検出器より計算量が大きいため予測も遅い傾向にある。

## 4.2．SSD(Single Shot Detector)
1段階検出器のモデルの1つ。
VGG16をベースとしたアーキテクチャ。

入力のサイズによってSSD300、SSD512とも表記される。

### 4.2.1．Default Box
最初に複数個のBounding Boxを適当な位置に適当なサイズで配置する。

Default Boxを変形して物体を捉えられるようにしていく。

### 4.2.2．特徴マップからの出力
マップ中の1つの特徴量における1つのDefault Boxの出力サイズは「クラス数+4」となる。

+4はオフセット項($\Delta x,\Delta y,\Delta w,\Delta h$)を表す。
Default Boxが物体を正しく検出できているとは限らないためオフセット項で調整する。

また、$k$個のDefault Boxをおいた場合の出力サイズは「$k$(クラス数+4)」となる。

さらに特徴マップのサイズが$m\times n$であるとすると、出力サイズは「$k$(クラス数+4)$mn$」となる。

特徴マップごとに用意するDefault Boxの数は$k\times mn$。

### 4.2.3．Non-Maximum Suppression
Default Boxを複数用意したことで1つの物体に対して複数のBounding Boxが予測されてしまう問題。

対策：IoUの閾値で複数の予測があるのであれば最もconf(確率)が高いもののみを残す。

### 4.2.4．Hard Negative Mining
VOCの21クラス目である背景のようなクラスがある場合、背景とそれ以外の物体で検出数が不均衡となりうる(背景がたくさん予測される)。

対策：最大でも1:3となるように制約をかける。

### 4.2.5．損失関数

```math
L(x,c,l,g)=\frac{1}{N}(L_{conf}(x,c)+\alpha L_{loc}(x,l,g))
```

$L_{conf}$：confidenceに対する損失
$L_{loc}$：検出位置に対する損失

## 4.3．セマンティックセグメンテーション(Semantic Segmentation)

### 4.3.1．Up-sampling
畳込みやプーリングで画像の解像度が落ちていくが、セマンティックセグメンテーションでは各ピクセルに対してクラス分類することとなるため、解像度を元に戻す必要がある。
この解像度をもとに戻すことをUp-samplingと言う。

#### 4.3.1.1．Deconvolution/Transposed convolution
Up-samplingの手法の1つ。
通常の畳込みと同様にカーネルサイズ、パディング、ストライドを指定する。

1.特徴マップのピクセル感覚をストライド分、空ける。
2.特徴マップの周囲に(カーネルサイズ - 1) - パディング分の余白を作成。
3.通常通り畳込みを行う。

プーリングで失われた情報が復元されるわけではない。

#### 4.3.1.2．輪郭情報の補完
低プーリング層の出力をelement-wise additionすることで補完を行うことができる。

#### 4.3.1.3．Unpooling
プーリングした時、例えば最大値プーリングであればどこが最大値を持っていたかの位置情報を持つ。
戻す時は位置情報をもとにunpoolingを行う。

### 4.3.2．Dilated Convolution
プーリングをするのは受容野を広げるためであるため、Dilated Convolutionは代わりに畳み込みの段階で受容野を広げる工夫。
カーネルの各ピクせルの間を空けることで受容野を広げる。

# X．ラビットチャレンジとは
ラビットチャレンジとは、日本ディープラーニング協会認定の講座プログラムの1つ。
E資格を受験するためにはこのラビットチャレンジ等、いずれかの講座プログラムを修了しなければならない。

ラビットチャレンジの特徴は「現場で潰しが効くディープラーニング講座」の通学講座録画ビデオを編集した教材を使用した自習スタイルであるという点。
サポートは他の講座より少なく、受け身ではなく自主的に学んでいく姿勢でなければ進められないが、その分、他の講座に比べると安価であり、手が出しやすい。
ある程度知識がある人、自力で頑張るぞというガッツのある人向けではないかと感じる。

![bnr_jdla.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389699/bce66671-a2f5-a7f9-de6f-3f87e15c253b.png)