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

# 1.物体検出って何？

**物体検出**(英: object detection)とは

### <font size="7" color="red">**写真や動画に「何が」、「何処に」映ってるかを特定すること**</font>
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/646f61f9-a9ef-c8eb-2c7c-39ffc49b68a3.jpeg)


## 1.1物体検出の簡単な流れ

**画像を入力　⇒　物体検出モデルが画像を分析　⇒　画像を出力**
![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/a008b24d-9e18-8e86-3243-ceaf13577690.jpeg)
・分析したい画像を<B>「物体検出モデル」</B>に入れると、画像に何が何処に映ってるかを勝手に調べてくれて出してくれます。

## 1.2物体検出モデルって何？

### <font size="7" color="red">**画像を分析してくれるAIのこと**</font>

・画像を受け取ったモデルは、<B>「この画像には○○が××に映ってる！　△△は□□に映ってる！」</B>といった感じで調べてくれます。

・このモデルにはいろいろな種類があって、<B>「識別の正確性を上げよう」、「識別の早さを上げよう」</B>といった感じに日々研究されていて、改良が進んでいます。

# 2.YOLOって何？
### <font size="7" color="red">**物体検出モデルの一つ**</font>

### <font size="7" color="red">**識別の正確性よりも、「識別の早さ」を改良したモデル**</font>

・自動運転などでは、ドライブレコーダーからどれだけ早く何が何処に映っているかを知る必要があるので、よりリアルタイムに近い検出ができるようにモデルを改良しました。


## 2.2YOLOの仕組み
![3-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/38b8b4af-8c0e-1b60-d65c-82ce8dc18664.jpeg)
**①　 画像をS×S個の小さな正方形に分割する**
**②-1　バウンディングボックスの要素(5つ)を求める**
**②-2　一つ一つの小さな正方形が何を映しているかを判断する**
**③　 ②-1と②-2を組み合わせて結果を出す**

<DIV ALIGN=CENTER><HR COLOR=BLUE WIDTH=50%></DIV>

### ①：画像を画像をS×S個の小さな正方形に分割する
![yyyy1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/bacab990-10db-da35-e12f-2b052bc785ac.jpeg)
・入力された正方形の画像をさらに**小さなS×S個の正方形**に分割します。
・この小さな正方形を論文内では「**グリッドセル(grid cell)**」と呼んでます。

<DIV ALIGN=CENTER><HR COLOR=BLUE WIDTH=50%></DIV>

### ②-1：バウンディングボックスの要素（５つ）を求める
#### ◎バウンディングボックスって何？
### <font size="7" color="red">**各小さな正方形にB個、配置される長方形だったり四角形だったりするもの**</font>
![4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/19f774d4-3b0b-171a-c8c0-18bebcd0ae73.jpeg)
・このバウンディングボックスは**あらかじめ設定**されています。



#### ◎一つのバウンディングボックスは5個の特徴を持つ
![6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/d3525ca2-8902-caee-cef4-e4fee17576f9.jpeg)
・<B>x</B>：バウンディングボックスの中心のx座標
・<B>y</B>：バウンディングボックスの中心のy座標
・<B>w</B>：バウンディングボックスの横幅
・<B>h</B>：バウンディングボックスの縦幅
・<B>F</B>：信頼度


#### ◎信頼度って何？
### <font size="7" color="red">**バウンディングボックスで囲った部分が、「背景」か「物体」かを表す数字。**</font>
$$ \huge{{0\leqq信頼度\leqq1}} $$
・<B>信頼度</B>は<font color="Red"><B>0</B></font>から<font color="Blue"><B>1</B></font>までの間の数字です。

![5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/2ca9b0af-f85b-8059-c3f8-98baf8630c4d.jpeg)
・<B>信頼度</B>が<font color="Red"><B>0</B></font>に近いほど、バウンディングボックスの中身は「<font color="Red"><B>背景</B></font>」を表しています。
・<B>信頼度</B>が<font color="Blue"><B>1</B></font>に近いほど、バウンディングボックスの中身は「<font color="Blue"><B>物体</B></font>」を表しています。

#### ◎全部の小さな正方形に対してバウンディングボックスを描いた結果
![c.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/1e79b896-e3ec-b491-ff0c-59019dfcb838.jpeg)

<DIV ALIGN=CENTER><HR COLOR=BLUE WIDTH=50%></DIV>

### ②-2：一つ一つの小さな正方形が何を映しているかを判断する
![8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/31bdd096-49fb-87b7-eb2e-f8ec7bc716b6.jpeg)
・各小さな正方形がC種類のクラス中で、どのクラスに所属している可能性が高いかを判断します。


#### ◎全部の小さな正方形を判断し、色分けした結果
![final10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/3d3aeda1-c55d-6b88-231a-352adbaf6f66.jpeg)
・全ての小さな正方形が何かしらの種類のクラスに所属します。

<DIV ALIGN=CENTER><HR COLOR=BLUE WIDTH=50%></DIV>

### ③：②-1と②-2を組み合わせて結果を出す
![final11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/55699b56-20c2-c7bb-e2a0-e94ce373b97d.jpeg)
・たくさんのバウンディングボックスから適切なものを選ぶために、<B>NMS(Non-maximum suppression)</B>という方法を使います。

#### ◎NMS(Non-maximum suppression)って何？
### <font size="7" color="red">**余計なバウンディングボックスを消す方法**</font>

#### ◎NMS(Non-maximum suppression)の流れ
・各クラスごとに、<B>一番信頼度の高い枠</B>を選びます。
・その枠と他の枠の<B>重なり具合(IoU)</B>を調べて一定以上の割合で重なっている枠を消します。

#### ◎IoUって何？
### <font size="7" color="red">**基準の枠とその他の枠の重なり具合（割合）を表す数字**</font>
$$ \huge{{0\leqq IoU\leqq1}} $$
・<B>IoU</B>は<font color="Red"><B>0</B></font>から<font color="Blue"><B>1</B></font>までの間の数字です。
![13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/718b2664-e370-fe62-f3f4-4be19fb022c1.jpeg)
・<B>IoU</B>が<font color="Red"><B>0</B></font>に近いほど、2つの枠は「<font color="Red"><B>重なっていない</B></font>」を意味します。
・<B>IoU</B>が<font color="Blue"><B>1</B></font>に近いほど、バウンディングボックスの中身は「<font color="Blue"><B>重なっている</B></font>」を意味します。

#### ◎NMS(Non-maximum suppression)を行った後
![131.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658998/d3475e27-719f-4c26-29a7-1a8faec3b175.jpeg)


# YOLOシリーズの違いを簡単にまとめてみた
https://qiita.com/kindamu24005/items/6374b17cb6a3effa80c6

# YOLOv5を実際に使ってみた①
https://qiita.com/kindamu24005/private/417369ef11ade359c306


# 【連合学習】YOLOが利用されている次世代の技術

https://qiita.com/magisystem0408/items/804b420bdc2842370089

https://www.wantedly.com/projects/921719



# 参考文献

Yolo公式サイト

https://pjreddie.com/darknet/yolo/

Yolo論文

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