目標檢測算法筆記

1.FPN(Feature Pyramid Network)

論文地址:https://arxiv.org/pdf/1612.03144.pdf
在物體檢測裏面,有限計算量情況下,網絡的深度(對應到感受野)與stride通常是一對矛盾的東西,常用的網絡結構對應的stride一般會比較大(如32),而圖像中的小物體甚至會小於stride的大小,造成的結果就是小物體的檢測性能急劇下降。傳統解決這個問題的思路包括:

(1)多尺度訓練和測試,又稱圖像金字塔,如圖1(a)所示。目前幾乎所有在ImageNet和COCO檢測任務上取得好成績的方法都使用了圖像金字塔方法。然而這樣的方法由於很高的時間及計算量消耗,難以在實際中應用。

(2)特徵分層,即每層分別預測對應的scale分辨率的檢測結果。如圖1©所示。SSD檢測框架採用了類似的思想。這樣的方法問題在於直接強行讓不同層學習同樣的語義信息。而對於卷積神經網絡而言,不同深度對應着不同層次的語義特徵,淺層網絡分辨率高,學的更多是細節特徵,深層網絡分辨率低,學的更多是語義特徵。

本文針對這些問題,提出了特徵金字塔網絡FPN,如圖1(d)所示,網絡直接在原來的單網絡上做修改,每個分辨率的feature map引入後一分辨率縮放兩倍的feature map做element-wise相加的操作。通過這樣的連接,每一層預測所用的feature map都融合了不同分辨率、不同語義強度的特徵,融合的不同分辨率的feature map分別做對應分辨率大小的物體檢測。這樣保證了每一層都有合適的分辨率以及強語義特徵。同時,由於此方法只是在原網絡基礎上加上了額外的跨層連接,在實際應用中幾乎不增加額外的時間和計算量。作者接下來實驗了將FPN應用在Faster RCNN上的性能,在COCO上達到了state-of-the-art的單模型精度。

The construction of our pyramid involves a bottom-up pathway, a top-down pathway, and lateral connections

在這裏插入圖片描述
a.圖像金字塔,即將圖像做成不同的scale,然後不同scale的圖像生成對應的不同scale的特徵。這種方法的缺點在於增加了時間成本。有些算法會在測試時候採用圖像金字塔。
b.像SPP net,Fast RCNN,Faster RCNN是採用這種方式,即僅採用網絡最後一層的特徵。
c.像SSD(Single Shot Detector)採用這種多尺度特徵融合的方式,沒有上採樣過程,即從網絡不同層抽取不同尺度的特徵做預測,這種方式不會增加額外的計算量。作者認爲SSD算法中沒有用到足夠低層的特徵(在SSD中,最低層的特徵是VGG網絡的conv4_3),而在作者看來足夠低層的特徵對於檢測小物體是很有幫助的。
d.本文作者是採用這種方式,頂層特徵通過上採樣和低層特徵做融合,而且每層都是獨立預測的。

在這裏插入圖片描述
上面一個帶有skip connection的網絡結構在預測的時候是在finest level(自頂向下的最後一層)進行的,簡單講就是經過多次上採樣並融合特徵到最後一步,拿最後一步生成的特徵做預測。而下面一個網絡結構和上面的類似,區別在於預測是在每一層中獨立進行的。
在這裏插入圖片描述
作者的主網絡採用ResNet。一個自底向上的線路,一個自頂向下的線路,橫向連接(lateral connection)。圖中放大的區域就是橫向連接,這裏1*1的卷積核的主要作用是減少卷積核的個數,也就是減少了feature map的個數,並不改變feature map的尺寸大小。
We denote the output of these last residual blocks as {C2, C3, C4, C5} for conv2, conv3, conv4, and conv5 outputs, and note that they have strides of {4, 8, 16, 32} pixels with respect to the input image. We do not include conv1 into the pyramid due to its large memory footprint
K取2,3,4,5,也就是每個stage的特徵圖分別是原圖大小的1/2k

Fast RCNN中的FPN用來選擇用哪一層做ROI Pooling。
在這裏插入圖片描述
當w* h = 2242時,k=k0=4
當w* h=4482時,k=k0+1=5

在RPN中,每一層設置不同比例的feature map
we assign anchors of a single scale to each level. Formally, we define the anchors to have areas of {322 , 642 , 1282 , 2562 , 5122} pixels on {P2, P3, P4, P5, P6} respectively.1 As in [29] we also use anchors of multiple aspect ratios {1:2, 1:1, 2:1} at each level. So in total there are 15 anchors over the pyramid.

2.focal loss

論文地址:https://arxiv.org/pdf/1708.02002.pdf
傳統的交叉熵損失函數:
在這裏插入圖片描述
定義pt如下。
在這裏插入圖片描述
那麼公式可以改寫爲
在這裏插入圖片描述
我們可以用αt來改進交叉熵公式。
在這裏插入圖片描述
αt是個(0,1)的數,定義和pt差不多。取α爲0.25,當爲正樣本時α是0.25,權重小,負樣本時α時0.75,權重就大一些。

focal loss公式:
在這裏插入圖片描述
我猜FL是個pt的單調遞減函數。γ=1的時候可以證明。p越小FL的權重就越大。
例如當p=0.9,γ=2時,y=1,FL=1/100 * CE
當p=0.5,γ=2時,y=1,FL=0.25 * CE
當p=0.1,γ=2時,y=-1,FL=0.81 * CE

Focal Loss通過調整loss的計算公式使單級結構達到和Faster RCNN一樣的準確度,公式是Focal Loss的計算方法。pt是不同類別的分類概率,r是個大於0的值,at是個[0,1]間的小數,r和at都是固定值,不參與訓練。r和at的最優值是相互影響的,所以在評估準確度時需要把兩者組合起來調節。作者在論文中給出r=2、at=0.25時,ResNet-101+FPN作爲backbone的結構有最優的性能。

RetinaNet
RetinaNet is a single, unified network composed of a backbone network and two task-specific subnetworks.
The backbone is ResNet-FPN , construct a pyramid level with levels P3 and P7.
The subnetworks is classification and bbox regression.
Anchor; A=9 and each anchor is k+4 vector.

在這裏插入圖片描述
這個結構要注意幾點:
1、訓練時FPN每一級的所有example都被用於計算Focal Loss,loss值加到一起用來訓練;
2、測試時FPN每一級只選取score最大的1000個example來做nms;
3、整個結構不同層的head部分(圖2的c和d部分)共享參數,但分類和迴歸分支間的參數不共享;
4、分類分支的最後一級卷積的bias初始化成前面提到的-log((1-π)/π);
這個網絡在coco數據集上達到了39.1的mAP。

γ對loss的影響:
在這裏插入圖片描述
各類算法的比較:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章