您當前的位置:首頁 > 動漫

解決小目標檢測!多尺度方法彙總

作者:由 Rocky X 發表于 動漫時間:2020-05-19

關注公眾號“

AI演算法修煉營

”,選擇“

星標

”公眾號。精選作品,第一時間送達。

一、傳統的影象金字塔

最開始在深度學習方法流行之前,對於不同尺度的目標,大家普遍使用將原圖構建出不同解析度的影象金字塔,再對每層金字塔用固定輸入解析度的分類器在該層滑動來檢測目標,以求在金字塔底部檢測出小目標;或者只用一個原圖,在原圖上,

用不同解析度的分類器來檢測目標,以求在比較小的視窗分類器中檢測到小目標。

經典的

基於簡單矩形特徵(Haar)+級聯Adaboost與Hog特徵+SVM的DPM目標識別框架,均使用影象金字塔的方式處理多尺度目標

,早期的CNN目標識別框架同樣採用該方式,但對影象金字塔中的每一層分別進行CNN提取特徵,耗時與記憶體消耗均無法滿足需求。但

該方式毫無疑問仍然是最優的。

值得一提的是,其實目前大多數深度學習演算法提交結果進行排名的時候,大多使用

多尺度測試

。同時類似於SNIP使用多尺度訓練,均是影象金字塔的多尺度處理。

二、SNIP/SNIPER中的多尺度處理

SNIP:尺度歸一化

論文地址

程式碼地址

當前的物體檢測演算法通常使用微調的方法,即先在ImageNet資料集上訓練分類任務,然後再遷移到物體檢測的資料集上,如COCO來訓練檢測任務。我們可以將ImageNet的分類任務看做224×224的尺度,而COCO中的物體尺度大部分在幾十畫素的範圍內,並且包含大量小物體,物體尺度差距更大,因此兩者的樣本差距太大,會導致

對映遷移(Domain Shift)

的誤差。

SNIP是多尺度訓練(Multi-Scale Training)的改進版本。MST的思想是使用隨機取樣的多解析度影象使檢測器具有尺度不變特性。然而作者透過實驗發現,在MST中,

對於極大目標和過小目標的檢測效果並不好

,但是MST也有一些優點,比如對一張圖片會有幾種不同解析度,每個目標在訓練時都會有幾個不同的尺寸,那麼總有一個尺寸在指定的尺寸範圍內。

SNIP的做法是

只對size在指定範圍內的目標回傳損失

,即訓練過程實際上

只是針對某些特定目標進行

,這樣就能減少domain-shift帶來的影響。

SNIP的網路結構如下圖所示:

解決小目標檢測!多尺度方法彙總

具體的實現細節

(1)

3個尺度分別擁有各自的RPN模組

,並且各自預測指定範圍內的物體。

(2)對於

大尺度

的特徵圖,其RPN

只負責預測被放大的小物體

,對於

小尺度

的特徵圖,其RPN

只負責預測被縮小的大物體

,這樣真實的物體尺度分佈在較小的區間內,避免了極大或者極小的物體。

(3)在RPN階段,如果真實物體不在該RPN預測範圍內,會被判定為無效,並且與該無效物體的IoU大於0。3的Anchor也被判定為無效的Anchor。

解決小目標檢測!多尺度方法彙總

(4)在訓練時,

只對有效的Proposal進行反向傳播

。在測試階段,

對有效的預測Boxes先縮放到原圖尺度,利用Soft NMS將不同解析度的預測結果合併。

(5)實現時SNIP採用了

可變形卷積的卷積方

式,並且為了降低對於GPU的佔用,將原圖隨機裁剪為1000×1000大小的影象。使用Deformable-RFCN檢測器提取單一解析度的候選。Deformable-RFCN的主幹網路選用ResNet-101,訓練解析度為800x1200。在RPN中選用5個錨尺寸。分類時,選用沒有Deformable Position Sensitive RoIPooling的主幹網路為ResNet-50的Deformable-RFCN。使用帶有雙線性插值的Position Sensitive RoIPooling, 因為它將最後一層中的卷積核數量減少了3倍。NMS的閾值為0。3,不是端到端的訓練。

使用ResNet-50以及消除deformable PSRoI filters可以減少3倍的時間並且節省GPU記憶體。

訓練與測試解析度從不一致的時候效能會下降;

大解析度輸入影象雖然能提升小目標檢測效能,但同時使得大目標過大導致其很難分類,此消彼長,最終精度提升並不明顯;

多尺度訓練(Mutil-Scale training),取樣到的影象解析度很大(1400x2000),導致大目標更大,而影象解析度過小時(480x640),導致小目標更小,這些均產生了非最優的結果;

SNIP針對不同解析度挑選不同的proposal進行梯度傳播,然後將其他的設定為0。即針對每一個影象金字塔的每一個尺度進行正則化表示;

總體來說,SNIP

讓模型更專注於物體本身的檢測

,剝離了多尺度的學習難題。在網路搭建時,SNIP也使用了類似於MST的多尺度訓練方法,構建了3個尺度的影象金字塔,但在訓練時,只對指定範圍內的Proposal進行反向傳播,而忽略掉過大或者過小的Proposal。

SNIP方法雖然實現簡單,但其背後卻蘊藏深意,更深入地分析了當前檢測演算法在多尺度檢測上的問題所在,在訓練時只選擇在一定尺度範圍內的物體進行學習,在COCO資料集上有3%的檢測精度提升,可謂是大道至簡。

SNIPER:SNIP方法的改進

論文地址:

程式碼地址:

SNIPER的關鍵是減少了SNIP的計算量。SNIP借鑑了multi-scale training的思想進行訓練,multi-scale training是用影象金字塔作為模型的輸入,這種做法雖然能夠提高模型效果,但是計算量的增加也非常明顯,因為模型需要處理每個scale影象的每個畫素,而SNIPER(Scale Normalization for Image Pyramids with Efficient Resampling)演算法

以適當的比例處理ground truth(稱為chips)周圍的上下文區域

,在訓練期間

每個影象生成的chips的數量會根據場景複雜度而自適應地變化

,由於SNIPER在取樣後的低解析度的chips上執行,故其可以在訓練期間收益於Batch Normalization,而不需要在GPU之間再用同步批次標準化進行統計資訊。實驗證明,BN有助於最後效能的提升。

這些chips主要分為兩大類:

一種是

postivice chips

,這些chips包含ground truth;

另一種是

從RPN網路輸出的ROI抽樣得到的negative chips

,這些chips相當於是難分類的背景,而

那些容易分類的背景就沒必要進行多尺度訓練了。

因此模型最終

只處理這些chips

,而不是處理整張影象,這樣就達到提升效果的同時提升速度。相比於SNIP,基於Faster RCNN(ResNet101作為Backbone)的實驗結果顯示SNIPER的mAP值比SNIP演算法提升了4。6百分點,所以效果也還是非常不錯的。在單卡V100上,每秒可以處理5張影象,這個速度在two-stage的演算法中來看並不快,但是效果是非常好。

SNIPER的思路:

把圖片丟到網路中時,就會產生不同尺度的feature map。作者的想法就是

在特徵圖上的ground truth box周圍去crop一些圖片,這些圖片稱為chips。

1、如何選擇positive chips : 就是在影象金字塔的每一層中,都設定一個範圍,在該大小範圍內的目標就可以標出來作為ground truth box,然後對圖片中ground truth box所在的地方進行crop,crop出來的圖片就是chips。

選擇positive chips的一個要求就是,每一個pos chip都至少應該覆蓋一個groud-truth box,當然一個groud-truth box可以被多個pos chips包含。

2、如何選擇negative chips : 如果只基於前面的positive chip,那麼因為大量的背景區域沒有參與訓練,所以容易

誤檢

(比較高的false positive rate),傳統的multi scale訓練方式因為有大量的背景區域參與計算,所以誤檢率沒那麼高,但因為大部分背景區域都是非常容易分類的,所以這部分計算量是可以避免的,於是就有了negative chip seleciton。選擇negative chips的目的在於

要讓網路更容易去判斷出哪些是背景,而不必花費太多的時間在上面。

在Faster-RCNN中的RPN的其中一步就是,將anchor和ground truth box交併比小於0。3視為背景,全部去掉(去掉易分樣本)。然後剩下的再去掉完全覆蓋groun truth box的proposal(去掉易分樣本),大部分proposal都是具有假陽性的,也就是和ground truth 都有一部分的交集,但是比較小,我們的negative chips都從這裡來。(negative chips就是難分樣本)。這樣可以用來減少假陽率。

3、標註label:每一張chip上大概產生300個proposal,但是對這300個proposals不做限制(比如faster-rcnn會濾除掉背景部分,我們不這樣),而是對裡面的一些proposal抽出來做positive proposal。

4、模型訓練:應該是先生成chips,然後再用chips去訓練一個端到端的網路,所以其實是分開進行的。

如下圖是作者的選擇positive chips的一個示意圖:

解決小目標檢測!多尺度方法彙總

左側中,綠色框起來的就是ground truth的所在,其他顏色是生成的chips,這張圖就生成了4個chips,右側中綠色線條就是valid box,紅色的線就是invalid box。可以看出,

合適尺度內的ground truth box就是valid box(藍色和紅色框內綠線),否則就是invalid box(黃色和紫色圖中的紅線就是invalid)

(clip的尺寸要比原圖小很多,不然就起不到減少計算量的目的,對於高解析度的圖,clip可以比它小十倍不止)

下圖是作者選擇negative chips的一個示意圖:

解決小目標檢測!多尺度方法彙總

negative chips的選取

上面一行就是ground truth boxes,下面一行就是作者選擇的negative chips,比如最後兩個,negative chips都和ground truth box有一定的交集。這就是我們所需要的negative chips。第二行影象中的紅色小圓點表示沒有被positive chips(Cipos)包含的negative proposals,因為proposals較多,用框畫出來的話比較繁雜,所以用紅色小圓點表示。橘色框表示基於這些negative proposals生成的negative chips,也就是Cineg。每個negative chip是這麼得到的:對於尺度i而言,

首先移除包含在Cipos的region proposal,然後在Ri範圍內,每個chip都至少選擇M個proposal。

在訓練模型時,每一張影象的每個epoch都處理固定數量的negative chip,這些固定數量的negative chip就是從所有scale的negative chip中抽樣得到的。

優點:

1、確實可以

減少計算量

;(一張圖片可以Crop出5個512x512的chips,而且進行3個尺度的訓練,但是它的計算量只比一張800x1333的圖片進行單尺度訓練多出30%,要是800x1333也進行多尺度訓練時,訓練量可比這種方法大多了)

2、用固定大小的chips去進行訓練時,資料很容易被打包,更利於GPU的使用。(把資料丟到GPU中去訓練,這30%的差距算個毛線,GPU計算速度那麼大呢)

3、更為重要的是,可以進行多尺度訓練,設定更大的batch_size和batch normalization,而且再也不用擔心這些操作會拉低我們的速度了!

實驗細節:

用影象金字塔生成chips的時候,在不同scale的層上使用的ground truth box範圍在[0,80²]、[32²,150²]、[120², inf]。訓練RPN是為了獲取negative chips。

每一張圖上產生的chips是不同的,如果這張圖包含的目標多,產生的chips就會增多,相反則減少。

在SNIP的基礎上加了一個「positive/negative chip selection」,從實驗結果來看是非常SOTA的,可以說

碾壓了Mosaic反應出來的結果

。另外基於ResNet101的Faster RCNN架構結合SNIPER,精度超過了YOLOV4接近4個點,效果是非常好的。感興趣的朋友可以嘗試。

三、SSD中的多尺度處理

解決小目標檢測!多尺度方法彙總

SSD

以不同stride的feature map作為檢測層分別檢測不同尺度的目標,使用者可以根據自己的任務的目標尺度制定方案。

該方式尺度處理簡單有效,但存在一些缺陷:

一般使用低層檢測小目標,但低層感受野小,上下文資訊缺乏,

容易引入誤檢

使用簡單的單一檢測層多尺度資訊略顯缺乏,很多工目標尺度變化範圍十分明顯;

高層雖然感受野較大,但畢竟經過了很多次降取樣,

大目標的語義資訊是否已經丟失

多層特徵結構,是非連續的尺度表達,是非最優的結果;

空洞卷積處理多尺度

空洞卷積

本身可以控制不同大小的感受野,也即可以處理多尺度;一般空洞率設計得越大,感受野越大(但一般空洞率不能無限擴大,網格效應問題會加劇)。

TridentNet:三叉戟網路

論文地址:

程式碼地址:

傳統的解決多尺度檢測的演算法,大都依賴於影象金字塔與特徵金字塔。與上述演算法不同,圖森組對

感受野

這一因素進行了深入的分析,並利用了

空洞卷積

這一利器,構建了簡單的三分支網路TridentNet,對於多尺度物體的檢測有了明顯的精度提升。

控制實驗證明了

感受野大小與目標尺度呈現正相關;

設計三個並行分支獲取不同大小的感受野,以分別處理不同尺度的目標,感受野使用空洞卷積表徵;每個分支採用Trident block構建,取代ResNet-res4中的多個原始的Block;

訓練類似於SNIP,三個分支分別採用不同尺度的目標訓練。

TridentNet網路的作者

將3種不同的感受野網路並行化

,提出瞭如下圖所示的檢測框架。採用ResNet作為基礎Backbone,前三個stage沿用原始的結構,在第四個stage,使用了三個感受野不同的並行網路。

解決小目標檢測!多尺度方法彙總

具體實現細節

(1)3個不同的分支

使用了空洞數不同的空洞卷積,感受野由小到大

,可以更好地覆蓋多尺度的物體分佈。

(2)由於3個分支要檢測的內容是相同的、要學習的特徵也是相同的,只不過是形成了不同的感受野來檢測不同尺度的物體,因此,

3個分支共享權重

,這樣既充分利用了樣本資訊,學習到更本質的目標檢測資訊,也減少了引數量與過擬合的風險。

(3)借鑑了SNIP的思想,

在每一個分支內只訓練一定範圍內的樣本

,避免了過大與過小的樣本對於網路引數的影響。

在訓練時,TridentNet網路的三個分支會接入三個不同的head網路進行後續損失計算。在測試時,由於沒有先驗的標籤來選擇不同的分支,因此只保留了一個分支進行前向計算,這種前向方法只有少量的精度損失。

四、FPN中的多尺度處理及其改進

自從2016年FPN網路出來後,目前各大視覺任務的baseline基本都是以backbone-FPN。

FPN以更為輕量的最近鄰插值結合側向連線實現了將高層的語義資訊逐漸傳播到低層的功能,使得尺度更為平滑,同時它可以看做是輕量級的decoder結構

。FPN看起來很完美,但仍然有一些缺陷:

在上取樣時

使用了比較粗糙的最近鄰插值,使得高層的語義資訊不一定能有效傳播;

由於經過多次下采樣,最高層的感受野雖然很豐富,但可能已經丟失了小目標的語義資訊,這樣的傳播是否還合適;

FPN的構建

只使用了backbone的4個stage的輸出,其輸出的多尺度資訊不一定足夠;

FPN中雖然傳播了強的語義資訊到其他層,但對於

不同尺度的表達能力仍然是不一樣的

,因為本身就提取了不同backbone的輸出。

4.1 PANet

論文地址:

程式碼地址:

PANet是由香港中文大學和騰訊優圖聯合提出的例項分割框架。模型不是直接實現目標檢測,但是論文的核心內容是增強FPN的多尺度融合資訊。PANet 在 COCO 2017 挑戰賽的例項分割任務中取得了第一名,在目標檢測任務中取得了第二名。

FPN的低層次的特徵(C5)對應大型目標,而高層級特徵與低層級別特徵之間路徑較長(如圖 2a所示紅色虛線),增加訪問準確定位資訊的難度。

為了縮簡訊息路徑和用低層級的準確定位資訊增強特徵金字塔,PANet在FPN基礎上建立了自下而上的路徑增強

(圖 2b)。用於縮簡訊息路徑,利用low-level 特徵中儲存的精確定位訊號,提升特徵金字塔架構。

解決小目標檢測!多尺度方法彙總

PANet建立自適應特徵池化(Adaptive feature pooling)( 圖 2c)。用於恢復每個候選區域和所有特徵層次之間被破壞的資訊路徑,聚合每個特徵層次上的每個候選區域。

PANet的目標檢測和例項分割共享網路架構的圖 2 abc三部分,使得兩者效能均有提升。

4.2 ThunderNet

論文地址:

程式碼地址:

ThunderNet是曠視提出的輕量型目標檢測框架,實現了ARM平臺上的實時檢測器,整體結構如圖 3所示。

主要簡化了FPN接面構,只使用C4/C5,同時引入gpooling操作

(Face++論文好多這麼用,確實有效),最終輸出C4解析度大小的累加特徵。ThunderNet使用320×320畫素作為網路的輸入解析度。

整體的網路結構分為兩部分:Backbone部分和Detection部分。

網路的骨幹部分為SNet(ShuffleNetV2修改版)。

網路的檢測部分,利用了壓縮的RPN網路,既

Context Enhancement Module(CEM)整合區域性和全域性特徵增強網路特徵表達能力

。並提出

Spatial Attention Module空間注意模組

,引入來自RPN的前後景資訊用以最佳化特徵分佈。

FPN的結合不同層語義資訊,但是相對而言每層均有檢測分支,對移動終端而言增加計算成本和執行時間。論文提出簡單粗暴的CEM(如圖 4所示),合併三個尺度特徵圖C4,C5和Cglb:

1、C4 1×1卷積,通道數量壓縮為α×p×p = 245

2、C5進行上取樣 + 1×1卷積,通道數量壓縮為α×p×p = 245

3、C5全域性平均池化得到Cglb,Cglb進行Broadcast + 1×1卷積,通道數量壓縮為α×p×p = 245 。

透過利用區域性和全域性資訊,CEM有效地擴大了感受野,並細化了特徵圖的表示能力。與先前的FPN接面構相比,CEM predict預測及減少fc計算,提高模型運算效率。

解決小目標檢測!多尺度方法彙總

解決小目標檢測!多尺度方法彙總

4.3 Libra R-CNN

論文地址:

程式碼地址:

Libra R-CNN是有浙江大學,香港中文大學等聯合提出目標檢測模型。無論是one-stage two-stage,都涉及選擇候選區域,特徵提取與融合、loss收斂。針對目標檢測的三個階段,論文提出三個問題:

取樣的候選區域示範具有代表性,不同level特徵如何融合,以及損失函式如何更好收斂。

論文針對三個問題提出三個改進方向:

1、IoU-balanced Sampling

M個候選框選擇N個hard negative,選中的機率就是:

解決小目標檢測!多尺度方法彙總

N個樣本透過IoU的值劃分為K個區間,每個區間中的候選取樣數為Mk,則IoU-balanced sampling的取樣公式即為:

解決小目標檢測!多尺度方法彙總

作者透過在IoU上均勻取樣, 把hard negative在IoU上均勻分佈。

2、Balanced Feature Pyramid

解決小目標檢測!多尺度方法彙總

為了更高效利用FPN特徵,論文

使用4步改進rescaling, integrating, refining,Strengthening

(如上圖所示):

a、rescaling

。把{C2,C3 ,C5}的多層特徵均rescaling到C4尺寸,做加權求平均值。得到的特徵C rescaling返回到{C2,C3 ,C5}特徵解析度。

b、Refining&strengthening

。論文使用Gaussian non-local attention 增加特徵。

c、 Indentity

,既殘差設計。

3、Balanced L1 Loss。

論文使用

修訂的loss損失函式

,改善網路的訓練過程。

參考文章

https://

zhuanlan。zhihu。com/p/93

922612

https://

blog。csdn。net/woduitaod

ong2698/article/details/86556206

https://

blog。csdn。net/u01438016

5/article/details/82284128?utm_source=blogxgwz5

https://

blog。csdn。net/Gentleman

_Qin/article/details/84789249

漲分利器!攻克目標檢測難點秘籍三,多尺度檢測

https://

zhuanlan。zhihu。com/p/63

047557

https://

zhuanlan。zhihu。com/p/70

523190

標簽: 尺度  Chips  negative  SNIP  檢測