物体検出モデルの特徴整理

## はじめに
　こんにちは。まっちゃ。です。:tea:
　今回は、画像認識における"物体検出"のモデルについてまとめていきます。

## 目次
- 物体検出とは
- 各モデルの特徴
  - Faster R-CNN
  - YOLO
  - FCOS
  - DETR 
- まとめ

## 物体検出とは
　画像認識におけるタスクの一つであり、画像内の物体の位置およびクラスを同時に推定します。また、物体検出モデルはバウンディングボックスとクラスを出力する形で実装されます。
　以下に物体検出を行った画像の一例を示します。オリジナルの画像は、Unsplashからダウンロードしました。

https://unsplash.com/ja

　左図がオリジナルの画像、右図が物体検出後の画像になります。物体検出後の画像において、画像中の犬と猫をそれぞれ検出できていることが分かります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/f690aa3b-4038-786b-e5d5-848f96c214df.jpeg", width=30%>　　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/a8d3c981-4028-aa71-ae92-7adc18890157.jpeg", width=30%>

[Alec Favale撮影](https://unsplash.com/ja/%E5%86%99%E7%9C%9F/%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%B3%E3%83%BC%E3%83%88%E3%81%AE%E7%99%BD%E3%81%A8%E8%8C%B6%E8%89%B2%E3%81%AE%E5%AD%90%E7%8A%AC-Ivzo69e18nk)

## 各モデルの特徴
　ここでは、代表的な下記4つのモデルについて、特徴をまとめていきます。
- CNNベースモデル
    - Faster R-CNN
    - YOLO
    - FCOS
- Transformerベースモデル
    - DETR

## CNNベースの物体検出モデル
　CNNベースの物体検出モデルは標準的に、「バックボーン」、「ネック」、「ヘッド」の3つの要素で構成されています。以下の表に、それぞれの役割を示します。
 
| 要素 | 役割 |
|--------|--------|
| バックボーン | 入力画像からマルチスケールの特徴を抽出、主に学習済みの画像分類モデルを使用 |
| ネック | バックボーンで抽出された画像特徴を集約し、洗練化された画像特徴を出力 |
| ヘッド | ネックが出力する特徴マップをもとに、各ボックス位置とクラスを推定 |

## Faster R-CNN

https://arxiv.org/abs/1506.01497

　Faster R-CNNは、バックボーン、特徴ピラミッドネットワーク（FPN: Feature Pyramid Network）、領域提案ネットワーク（RPN: Region Proposal Network）、検出ヘッドの4つで構成されます。以下の図に、全体像を示します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/6d6b2ec7-1ef6-4e4d-8e61-61269219ecc6.png", width=45%>

　FPNは、ネックと同様の処理を行います。具体的には、バックボーンで出力されるマルチスケールの特徴マップを統合し、画像特徴を洗練化します。

　RPNは、物体が存在し得る位置と物体らしさを推定します。以下の図に、RPNの概略を示します。物体候補のボックス位置を出力する際、アンカーと呼ばれる特徴マップ上の点を用います。このアンカーから固定のアスペクト比とスケールをもつアンカーボックスを生成します。アンカーボックスと正解ボックスとのずれから物体が存在し得る位置を計算します。また、各アンカーボックスと正解ボックスとのIoU[^1]を用いて正解ラベル（物体）を生成します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/5e24ac0f-34e3-199f-0cc3-c3c8017a043d.png", width=55%>

　RPNで出力されるボックスは数が多く、それらの大部分は重複します。そこで検出ヘッドでは、RPNで出力され物体らしさのスコアを用いて選別したボックスに対して、非最大抑制（NMS: Non-Maximum Supression）を適用することで、重複するボックスを削除します。また、関心領域プーリング（ROIプーリング）を用いて、ボックスで囲まれた特徴マップのサイズを均一にします。

　このようにFaster R-CNNは、RPNで物体候補領域を検出し、検出ヘッドで最終的なボックス位置とクラスを推定するため、2ステージアプローチの物体検出モデルとなります。

https://qiita.com/DeepTama/items/0cb9ca2d35c200deed37

https://zero2one.jp/learningblog/object-detection-faster-r-cnn/

https://medium.com/lsc-psd/faster-r-cnn%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Brpn%E3%81%AE%E4%B8%96%E7%95%8C%E4%B8%80%E5%88%86%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%84%E8%A7%A3%E8%AA%AC-dfc0c293cb69

## YOLO (You Only Look Once)

https://arxiv.org/abs/1506.02640

　続いて、YOLOを取り上げます。YOLOは、ボックス位置とクラスを同時に推定する、1ステージアプローチの物体検出モデルです。バックボーン、FPN、検出ヘッドの3つで構成されます。

　YOLOでは以下の流れで、ボックス位置とクラスの推測を行います。
 
1. 入力画像をグリッドセルと呼ばれる領域で分割
2. グリッドセルにバウンディングボックスを設定し、バウンディングボックス毎の位置と信頼度（物体らしさ）を推測
3. グリッドセルごとに物体クラスの条件付き確率を推測
4. バウンディングボックスの信頼度とクラスの確率をかけ合わせることで、バウンディングボックス毎のクラスに対する信頼度スコアを算出し、信頼度スコアをもとに、どのバウンディングボックスが物体を検出しているかを判断

　以下の図に、YOLOにおける物体検出の流れを示します。犬、自転車、車の領域がバウンディングボックスで推測され（2.）、クラスの予測についてもそれぞれの色で推測されています（3.）。最終的に、犬、自転車、車がそれぞれ検出されていることが分かります（4.）。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/cfa82b1d-5a74-9638-8148-baec481b78c1.png", width=60%>

https://qiita.com/kindamu24005/items/efd53c7511a40ddac636

https://deepsquare.jp/2020/09/yolo/

---
　ここまでに取り上げた、Faster R-CNNとYOLOはアンカーを用いた物体検出モデルです。アンカーを用いた物体検出には、以下の欠点があります。
- 事前にアンカーに関する多数のパラメータ設定が必要
- ポジティブサンプル（物体）とネガティブサンプル（背景）が不均衡

　これらの欠点を克服したモデルとして、FCOSがあります。

## FCOS (Fully Convolutional One-Stage Object Detection)

https://arxiv.org/abs/1904.01355

　FCOSは、1ステージアプローチかつ**アンカーを用いない**物体検出モデルです。バックボーン、FPN、検出ヘッドの3つで構成されます。以下の図に、全体像を示します。アンカーを用いていないために上述した欠点をがなく、また、アンカーに関する計算コストを削減することで、実装が簡単になります。

 <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/bdba3d08-c0ca-c1be-d462-9b6fcfe0f56c.png", width=70%>
 
 　アンカーを用いていないため、アンカーとは異なる方法で正解ラベルを決める必要があります。そこで、FCOSでは特徴マップ上の正解ボックス内に含まれるすべての画素をポジティブサンプルとして扱い、クラスを決定します。また、ボックス位置を推測する際、各画素から正解ボックスの各辺までの距離を用います。以下の図に、対象となる各画素から正解ボックスまでの距離を示します。右図のように、同一画素において正解ボックスが重複する場合は、小さいボックスを対象とします。
 
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/8712890c-3aba-5a39-7c71-468f3660a17a.png", width=50%>

　ここまでで最適化を行った場合、正解ボックスの中心から離れた位置におけるバウンディングボックスの影響で推論精度が悪くなります。そこで、正解ボックスの中心ほど1.0に近づくセンターネススコアを推定し、クラススコアに乗算します。結果として、物体の中心から離れた低品質のバウンディングボックスのスコアを抑制し、検出精度を向上させることができます。以下の図に、センターネスの概略を示します。中心に近いほどスコアが大きく（赤く）、中心から離れるにつれてスコアが低く（青く）なっていることが分かります。
 
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/ffb7b3a6-20f9-945f-54f4-5f3cbe4fb5bd.png", width=25%>

https://accum33.com/%E3%80%90%E6%B7%B1%E5%B1%A4%E5%AD%A6%E7%BF%92%E3%80%91fcos%EF%BC%88%E7%89%A9%E4%BD%93%E6%A4%9C%E5%87%BA%EF%BC%89%E3%81%A8%E3%81%AF%EF%BC%9F/8689/

https://medium.com/lsc-psd/fcos-%E3%82%A2%E3%83%B3%E3%82%AB%E3%83%BC%E3%83%95%E3%83%AA%E3%83%BC%E7%89%A9%E4%BD%93%E6%A4%9C%E5%87%BA%E6%B3%95-dd18147dc822

---
　ここまでに取り上げた3つのモデルは、重複するバウンディングボックスを削除するために後処置においてNMSを適用する必要があります。NMSはパラメータを設定する必要があり、モデルが複雑になるといった欠点があります。

　この欠点を克服したモデルとして、TransformerベースのDETRがあります。

## DETR (Detection Transformer)

https://arxiv.org/abs/2005.12872

　DETRは、物体検出を直接集合推定問題として捉えた、1ステージアプローチの物体検出モデルです。物体検出で初めて、Transformerを採用したモデルになります。FCOSは、バックボーン、Transformerエンコーダ、デコーダ、検出ヘッドの4つで構成されます。

 　DETRでは以下の流れで、ボックス位置とクラスの推定を行います。 　
1. バックボーンから出力された特徴マップに位置情報を追加し、エンコーダへ出力
2. エンコーダにてクエリ、キー、バリューを作成し、計算される特徴マップと共にデコーダへ出力
3. オブジェクトクエリとエンコーダから出力された特徴マップを用いて、最終的なオブジェクトクエリを作成し、検出ヘッドへ出力
4. FFNを通して、ボックス位置とクラスを推定

　以下の図に、DETRの全体像を示します。デコーダへ入力されるオブジェクトクエリは、初期値がランダムなパラメータであり、ボックス位置とクラスを推定するために用いられます。オブジェクトクエリ数は、画像中に含まれる物体数より多くする必要があります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/4df9babd-9eee-1c46-151d-660b6c560763.png", width=85%>

　DETRでは推論と正解のマッチングが正しく行われているかを判断するため、2部グラフマッチングを実施します。以下の図に、2部グラフマッチングの例を示します。ここでは、2部グラフマッチングにおいて、異なる2つの集合要素（ボックス情報およびクラスラベルの集合と正解ラベル集合）を重複なく組み合わせた際に、損失値が最小となる組み合わせを求めます。これにより推定結果と正解ラベルを1対1対応させることができます。結果として、DETRでは過剰な検出を抑制でき、NMSなどの後処理が不要な物体検出を実現できます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/c2cde208-ebce-22e6-71ab-da24a4aa92de.png", width=40%>

https://qiita.com/DeepTama/items/937e13f6beda79be17d8

https://deepsquare.jp/2020/07/detr/#outline__2_4_3

https://www.ogis-ri.co.jp/otc/hiroba/technical/detr/part2.html

## まとめ
　今回は、物体検出のモデルに関する概要をまとめました。各モデルについて、どのような構造を用いているかや推論方法を知るためのいい機会となりました。CNNベースおよびTransformerベースそれぞれのモデルは、各特徴を活かして現在まで応用されているモデルであることも再確認することができました。これらのモデルをベースとして改良されたモデルも数多く出ているので、変更点を踏まえて改良されたモデルについても各構造や推論方法に関する理解を深めたいです。

### 参考
　この記事は、各モデル説明において記載している記事と以下の書籍を参考にして執筆しました。
 - [深層学習による画像認識の基礎](https://www.ohmsha.co.jp/book/9784274231841/)

[^1]:IoU (Intersection over Union)とは、正解ボックスと推測ボックスの重なり具合を図る指標です。最小値0.0、最大値1.0をとります。完全に一致したときは、1.0となります。