【YOLO】YOLO v2の改良点を簡単にまとめてみた【物体検出アルゴリズム】

# 1.はじめに
https://qiita.com/kindamu24005/items/efd53c7511a40ddac636

・上の記事で**YOLO v1**の仕組みについて簡単に理解しました。
・今回は次のバージョンである**YOLO v2**に加えられた**改良点**を簡単にまとめてみたいと思います。

# 2.YOLO v2の変化
・YOLOの論文発表から約一年後、**201６年**に**YOLO v2**の論文が発表されました。

https://pjreddie.com/media/files/papers/YOLO9000.pdf

:::note
**YOLO v2**では、、、
### ・<font color="red">より速く正確な</font>物体検出が可能になりました。
### ・検出できる種類の数がかなり増えました。(<font color="red">9000種類</font>)
### ・犬だけではなく、<font color="red">「犬種」まで分類できるようになりました。</font>
:::


## 2.1.YOLOからYOLO v2への具体的な改良点
:::note
物体検出は<B>「精度」</B>と<B>「速さ」</B>の二つの面から改良されます。
:::

# 3.具体的な改良点(物体検出の「精度」について)
![スクリーンショット 2022-06-29 17.30.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/201816a7-5960-ff93-1f32-69ead172961f.png)
・図の左の**10個の改良点**を順番に試していき、**mAP**の値を上げています。
・最終的に**YOLO v2の精度**は**10個中9個の改善**を加えています。
#### ◎ｍAPって何？
##### <font color="red">モデルの精度を評価する数字</font>
・**mAP**の値が高いほど、<B>物体検出の精度が<font color="red">「高い」</font></B>を意味します。

## 3.1.バッチノーマライゼーション(Batch Normalization)
:::note warn
**YOLOでは、、、**
CNNに<B>バッチノーマライゼーション(バッチの正規化)</B>という処理を使っていませんでした。
:::

:::note
**YOLO v2では**、、、
CNNに<B>バッチノーマライゼーションの処理</B>を使うことによって、<B>「検出制度」は良くなり、「学習速度」は早くな理ました。</B>
:::
### 3.1.1.バッチノーマライゼーションって何？
#### <font color="red">複雑なネットワークでも「安定的に」「より速く」学習できるようにする処理のこと</font>
・ネットワークが**深くて複雑**だとその分、**多くの計算**をしなければならなくなります。
・その**多くの計算**を<B>簡単にする(正規化する)</B>ことで、学習の<B>「安定性」</B>と<B>「速さ」</B>を改善します。

## 3.2.高解像度分類器(High Resolution Classifier)
:::note warn
**YOLOでは、、、**
事前学習をするとき<B>224×224サイズ(低解像度)の画像</B>を使って、その後、入力画像の<B>448×448サイズ(高解像度)の画像</B>に対応させていました。
:::

:::note
**YOLO v2では、、、**
事前学習をするとき<B>448×448サイズ(高解像度)の画像</B>を使ったことによって、<B>大きなサイズ(高解像度)の画像でもより良い結果</B>が得られるようにしました。

:::

## 3.3.アンカーボックスの導入(Convolutional With Anchor Boxes)

:::note warn
**YOLOでは、、、**
各小さな正方形ごとに、何の手法もなく<B>ただひたすら頑張って「正解の枠(バウンディングボックス)」を予測</B>していました。
:::

:::note
**YOLO v2では、、、**
各小さな正方形ごとに**アンカーボックスの手法**を使うことで、<B>効率的に正解の枠を予測</B>できるようにしました。
:::
### 3.3.1.アンカーボックスって何？
#### <font color="red">k個の枠を使ってどれが一番正解の枠に近いかを予測する手法</font>
![yolov2のdiff.002.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/e4810228-470f-a40f-b5bc-580d60341292.jpeg)
・<B>アンカー</B>を中心として、<B>「枠の数(k)」</B><B>「大きさ」</B><B>「縦横比」</B>を決めます。
![yolov2のdiff.003.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/fd279510-1a33-345e-2dbd-96bfe442f0f8.jpeg)
・**正解の枠と最も近いもの**を選びます。

::: note warn
しかし、アンカーボックスの手法には<B><font color="red">「2つ」</font>問題があり、使われませんでした。</B>
この<B>問題を解決する策</B>として<B>「3.4.ディメンションクラスター」</B>と<B>「3.5.位置を直接予測する」</B>という手法が使われました。
:::

## 3.4.ディメンションクラスター(Dimension Clusters)
### 3.4.1.ディメンションクラスターって何？
#### <font color="red">最適なアンカーボックスの数を決める手法</font>
::: note warn
アンカーボックスの一つ目の問題点は<B>「枠の数」「大きさ」「縦横比」</B>は**人間が設定**していることでした。
:::
:::note
<B>k平均法(k-means)</B>という方法を使って、<B>最適なアンカーボックス</B>の<B>「枠の数」</B>と<B>「大きさ」</B>と<B>「縦横比」</B>を<B>自動</B>で決めれるようにしました。<B>(ディメンションクラスター)</B>
:::
![yolov2のdiff.004.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/34373a8e-0ac6-4518-4572-f9dbd351cb29.jpeg)
・論文では、自動的に決めた結果、<B>枠の数=5</B>が最適と書かれています。


## 3.5.位置を直接(Direct location prediction)
::: note warn
アンカーボックスのもう一つの問題点は<B>中心座標(x,y)</B>を予測することが難しいことでした。
:::
:::note
YOLOで行った方法と同じように、<B>ディメンションクラスターで決めたk個の枠</B>を<B>「小さな正方形ごとに当てはめる」</B>ことで、<B>中心座標(x,y)を予測することができるようになりました。</B>
:::
![yolov2のdiff.005.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/af896230-f1ae-8e66-8260-53d227e09774.jpeg)

・全の小さな正方形ごとに<B>5つの枠</B>を当てはめていき、**正解の枠と近いものを検出します。**
・中心座標の他にもボックスの<B>「w：横幅」「h：高さ」「F：信頼度」</B>と合わせて<B>5つ</B>の要素を持ちます。

## 3.6.細かい特徴も検出できる(Fine-Grained Features)
::: note warn
<B>YOLOでは、、、</B>
<B>小さい物体の検出</B>がうまくいきませんでした。
:::

:::note
<B>YOLO v2では、、、</B>
<B>リオーガナイゼーション(Reorganization)</B>という独自の手法を使い、入力画像が<B>サイズの大きい画像(高解像度)</B>でも<B>サイズの小さい画像(低解像度)</B>でも対応できるようになりました。
:::
![yolov2のdiff.006.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/c6b8b641-f719-794d-0482-0c0143a95719.jpeg)
### 3.6.1.リオーガナイゼーションって何？
#### <font color="red">「サイズの大きい画像(高解像度)」でも「サイズの小さい画像(低解像度)」でもちゃんと物体を検出することができるようにする手法</font>

## 3.7.マルチスケールのトレーニング(Multi-Scale Training)
::: note warn
<B>YOLOでは、、、</B>
入力画像は<B>448×448のサイズ</B>でしか学習出来ませんでした。
:::

:::note
<B>YOLO v2では、、、</B>
上の<B>3.6.1.リオーガナイゼーション(Reorganization)</B>という独自の手法を導入したことで、入力画像が<B>320×320のサイズの画像から608×608のサイズの画像(32の倍数)</B>でも学習できるようになりました。
:::

# 4.改良点(物体検出の「速度」について)
・モデルの**基本構造を変化**させることで、**検出速度を速くします。**
## 4.1.モデルの構造の変更
::: note warn
<B>YOLOでは、、、</B>
GoogLeNetという構造のモデルを少しアレンジしたものを使っていました。
:::

:::note
<B>YOLO v2では、、、</B>
<B>Darknet-19</B>というオリジナルの構造を作って使いました。
:::
![0010.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/be8af14c-0959-ded9-68c6-78e9f0aec061.jpeg)
つまり、
#### <font color="red">「より速く」学習ができる「モデルの構造」を作ったよ</font>
ということです。

# YOLOシリーズ各バージョンの簡単な違いについてのまとめ

https://qiita.com/kindamu24005/items/6374b17cb6a3effa80c6