【論文読んでみた】YOLOv3: An Incremental Improvement

# はじめに

yoloをよく使ってるけど中身詳しく知らないなと思い今更ながら原著論文をちゃんと読む。

とりあえず走り書きチックな感じで大事そうなところを書いていく。

# Contents

## 1. Introduction

> 1年全然研究しなかったと吐露している部分、こんな正直に書いていいのね...

## 2. The Deal

### 2.1 Bounding Box Prediction

Bounding Boxの中心座標を$(b_{x}, b_{y})$、幅と高さを$(b_{w}, b_{h})$とおく。
このとき、yolo v3が推定する値$t_{\*}(\*=x, y, w, h, 0\leq t_{\*} \leq 1)$、中心がいると予想されるGrid Cellのoffset距離$(C_{x}, C_{y})$、anchor boxのサイズ$(p_{w}, p_{h})$を用いて以下の式で表される。

```math
\begin{align}
b_{x} &= \sigma(t_{x}) + C_{x} \\
b_{y} &= \sigma(t_{y}) + C_{y} \\
b_{w} &= p_{w}{\rm e}^{t_{w}}\\
b_{h} &= p_{h}{\rm e}^{t_{h}}
\end{align}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2043769/02571662-b4cc-111c-5834-fb8655d7ea60.png)


ただし$\sigma(\*)$はシグモイド関数を表しており、以下のようなグラフで表される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2043769/9817b431-5b51-9eae-3719-3cb1a497d7b2.png)

> *If a bounding box prior is not assigned to a ground truth object it incurs no loss for coordinate or class predictions, only objectness.* = 事前分布に割り当てない場合、オブジェクトらしさのみが発生する(要約)
> これがどういう意味かわからないので教えてください...

### 2.2 Class Prediction

<font Color="Red">主張：softmaxの変わりにlogistic回帰を使ってclass分類を実施、学習中はbinary cross-entropy lossを使ってクラス分類実施。→ 複雑なクラス分類にも対応できるようになった！<font>

> keyword: softmax, logistic, binary cross-entropy loss

### 2.3 Predictions Across Scales

> feature pyramid networksと同様の考えでシステムを組んでるよ、と説明。
> 引用文献もあるのでぼちぼち確認

yolov3では3つのscaleの異なるbboxを予測して、最後にNMS(Non-Maxumum Suppression)によりいいやつだけ残す。
cocoのデータセット(class数=80)で検証した例を説明すると...

1. $N \times N$のGrid Cellで分割された画像を用意
2. 1つのCellあたりに3つの異なるscaleのbboxを予測
3. 1つのbboxごとにbboxのoffset値($x, y, w, h$の4次元)、objectの存在確率(1次元)、class数(COCOだと80次元)のvector

→ 画像全体では$N \times N \times [3 \ast (4 + 1 + 80)]$のtensorで表される。

> *bboxのoffset値*が何を意味するのか。
> $b_{\ast}$か$t_{\ast}$か論文中にあった$\hat{t_{\ast}}-t_{\ast}$($\hat{t_{\ast}}$はgrand truth)なのかわからない、いろんなサイトで言ってることが微妙に違う...

このtensorに対しconvolutional layerを通して特徴量抽出

次に抽出した特徴量をupsampleしてサイズを2倍に(13$\times$13から26$\times$26みたいなイメージ)して2層前の特徴マップとconcatする。

> concat: 連結する

予測のフローイメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2043769/12e3e053-ffe7-02a6-f36f-d42a75728cd6.png)

### 2.4 Feature Extractor

Convolutional Layerを53層つなげたdarknet-53というnetworkを作ったよ！とのこと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2043769/843fe09d-9da1-3ab1-f635-7491829efd55.png)

> あれ？2.2でsoftmaxの変わりにlogistic回帰使うって言ってなかった？
> 結果については省略

### 2.5 Training

<font Color="Red">主張：標準的なものをすべて使って学習する(hard negative miningといったものは使わない)。<font>

> hard negative miningってなに？

## 3. How We Do

<font Color="Red">主張：IOU=0.5の場合は非常に強力な検出器となるが、IOUしきい値が高くなるに連れて性能が大きく低下する。また新しいmulti-scale予測では小さい物体の検出が比較的高く出てるのに対し、中型以上の検出結果は比較的悪くなっているが理由はわからない。<font>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2043769/100ecde2-c9d2-6791-5eb8-96778d48aa06.png)

## 4. Things We Tried That Didn't Work

yolo v3に取り組んでいる間に試して上手くいかなかったものを列挙してくれている。感謝。

1. Anchor box $x, y$ offset predictions
    - normal anchor box prediction mechanismを使って、offsetを予測した
    - 安定性の低下につながった
2. Linear $x, y$ predictions instead of logistic
    - logisticの代わりにlinearを用いた
    - mAPが2ポイント下がった
3. Focal loss
    - 多分binary cross-entropy lossの前に考えたのかな？
    - mAPが2ポイント下落
    - 多分yolo v3では位置予測とclass分類の処理を分離しているからFocal lossで解決したい問題に対してはロバストなのかも
        - 自信はないとのこと
4. Dual IOU thresholds and truth assignment 
    - Faster R-CNNの学習時に2つのIOUしきい値を使ってるので真似してみたけど上手く行かなかった

## 5. What This All Means

> COCOのIOUしきい値に関する疑問の提示と検出技術のいい使われ方に対する希望について記載

# さいごに

ちょこちょこわからない文章があったので、わかる人教えてくださいm(_ _)m

あとは細かい技術的なところは補強しなくちゃ...