# Feature Pyramid Networks for Object Detection
###### tags: `paper` `FPN`
>論文整理 (CVPR 2017),cited:5927
## Abstract
> 利用CNN做影像辨識時,一般會將圖片進行反覆進行捲積與池化等步驟,產生特徵圖,最後輸出到全連接層做預測。
### 四種利用特徵做預測的方式:

- ( a ) 將每張圖片都分別Resizes成不同大小,再進行捲積等步驟後產生feature map來進行predict。此方法預測效果好,但消耗資源高。
- ( b ) 常見的CNN,多數的object detection都只採用最後的特徵圖做預測,計算簡單,但捲積到後面,小物體特徵訊息消失,檢測結果較差。
- ( c ) 抽取不同尺度的feature map進行預測 ex: SSD 。
- ( d ) 作者採用此種架構,每層獨立預測。不增加明顯運算下,增強每層語義特徵,提升小物體檢測結果。作者Basic on Faster R-CNN特徵提取方式,使用FPN,在2016 COCO dataset競賽中獲得最佳成績,且達到6fps in GPU。
## Method
### 主網路: 利用ResNet架構提取特徵

特徵圖經過卷積核計算,通常是越變越小的,也有一些特徵層的輸出和原來的大小一樣。不改變feature map大小的層,為一個stage。對每個stage,提取最後一層的feature map輸出 (因有最強的特徵訊息),分別為C2、C3、C4、C5,構成金字塔。
<br/>
### 特徵圖使用方式

#### 三種路徑: 至底向上、從上向下、橫向連接的路徑
- 從下向上: 一般的捲積,產生的特徵圖。
- 從上到下: 採用upsampling (最鄰近插植)放大2倍,與橫向做1 * 1conv相加。(再進行3 * 3conv(濾波器),消除上採樣產生的混疊效應)
C2 … C5對應 P2…P5,size大小相同
論文中以Resnet作為架構,但沒選用Conv1層,因考慮效能及記憶體,Conv1層的size還是比較大,所包含的特徵跟直接的圖片像素信息也過於接近。
:::info
:bulb: 最鄰近插值法 ( for upsampling)

:::
## Application
- RPN ( Region Proposal Network )
- Fast R-CNN(Selective Search + CNN + ROI)
- Faster R-CNN(RPN + CNN + ROI)
### Feature Pyramid Networks for RPN
>作者將FPN應用於RPN (Rigion Proposal Network),此處將先介紹RPN,再解釋如何應用
#### RPN Concpet

左方圖中,先在Feature map上提取候選框 (anchor box),每個anchor box輸入至RPN,輸出**物件機率**及**座標**。
如果為感興趣的區域,會再經過ROI pooling層,獲得**物件的類別**以及更精準的**物件座標**。
Feature map上有3 * 3 sliding window,中心為 anchor point,每個anchor point有k個不同大小的anchor box,作為RPN的輸入,用來檢測物件。
假設每張feature map大小為13 * 13,此張feature map有 13 * 13 * k個 256-d的參數。每個anchor point輸出2k個分數(positive及negative)以及4k個座標訊息(x,y,w,h)。
#### RPN Example

每個anchor point有k個anchor box作為輸入。
### Feature Pyramid Networks for RPN
原文:
> Formally, we define the anchors to have areas of { 32^2^, 64^2^, 128^2^, 256^2^, 512^2^ } pixels on { P2 ,P3 ,P4 ,P5, P6 } respectively.
We also use anchors of multiple aspect ratios { 1:2; 1:1, 2:1 } at each level.
論文中,作者將多層FPN產生的feature map輸入至RPN,P2~P6層,每層對應的anchor box大小分別是 $32^2, 64^2, 128^2, 256^2, 512^2$ (此面積為相對原圖的大小),且都有 1:2, 1:1, 2:1 三種比例。
越小面積的anchor box使用於越前面的層,因為小物體捲積到後面容易消失。
:::info
:bulb:Rigion proposal的作用:避免類別不平衡發生(foreground與background數量相差太大)。
:::
### Feature Pyramid Networks for Fast RCNN
> 傳統的Fast R-CNN,使用Selective search演算法,根據照片顏色、大小、形狀、紋理相似度等等來提取感興趣的區域(Rigion of Interest, RoI),並將RoI投射到某一層的feature map作為分類網路的輸入,再進行分類。

為了將FPN用於Fast RCNN,作者提供一個公式,將不同大小的RoI,分配給金字塔中不同尺度的feature map。
上圖的公式中,k代表要使用第幾層feature map,k~0~為一基準值。ResNet架構中,因為有5個stage,因此k~0~=5。
224 * 224是Image Net標準輸入,w, h為RoI大小,RoI最大224 * 224。
例如,ROI為原圖大小,w, h則為224, 224,代入式子後,得到5,因此採用P5層,以此類推...。
同樣的,大尺度的RoI用後面特徵圖,因大物體的特徵到後面留著;小物體則用前面的特徵圖。
## Result
> AR^100^ 代表每張圖有100個Proposal。AR~s~ 小物體
<br/>

### Table 1.
- ( a )( b ):只用單層feature map,高層特徵圖 沒有比 低層特徵圖 好
- ( a )( b )( c ):FPN比單尺度特徵更有效
- ( d ):像FPN的(b),只有做1 * 1 捲積,橫向連接,和3 * 3捲積做輸出
- ( e ):像FPN的(d)右邊,只有自頂向下,無橫向連接融合原來的特徵,多次的upsampling及downsampling造成目標位置不準確
- ( f ):只用FPN的最後一層做預測。此層更多anchor,但不比( c )好,說明anchor多不能提升準確率
### Table 2.
- ( a )( b ): 將產生的RoI分別投射到C4、C5層。 另外在最後,分別接2fc跟conv5。作者認為,接2個1024的fc,速度較快。
- ( c )分別將不同大小的RoI投射到不同層的feature map上。
- ( c )( f ): 差不多,作者:ROI pooling對於尺度不敏感,不能認為此種方式不好,要針對問題。
### Table 3.
此處的( c )與Table 2.的( c )結果一樣,因為**Fast R-CNN**中,將Selective Search換成RPN,就等同於Faster R-CNN
### Comparisons of signal-model results on the COCO detection benchmark

作者表示此篇論文無使用其他方法,如增加數據集、影像增強,僅使用FPN,就小物體的檢測效果明顯提升,並獲取最佳成績。
:::info
:bulb:Question:R-CNN遇到COVID-19後,會變成什麼?
.
.
.
Answer:Mask-RCNN :satisfied:
:::