Object Detection系列(一)R-FCN

作者:張  旭 

編輯:祝鑫泉

640?wx_fmt=png&wxfrom=5&wx_lazy=1


Object Detection系列(一) R-FCN 

R-FCN簡介

上面這張圖在這個系列文章中都會出現,可以看到,在時間軸上R-FCN並不應該出現在第五篇中,但是R-FCN在內容上是承接Faster R-CNN的,同樣是何凱明團隊提出,所以在這裏把R-FCN移到了前面。

CNN的舊形態

用於圖像分類的基礎CNN模型,有一箇舊形態與新形態的區分,基於舊形態的CNN結構如AlexNetVGGNetwork-in-NetworkZF-Net等等,它們都有一個特點是卷積之後保留了幾層用於邏輯判斷的全連接網絡。何凱明和RBG團隊的R-CNN系列在Faster R-CNN之前都是在這種舊形態的CNN模型上改出來了,又因爲Faster R-CNN及其之前的網絡一直在解決的問題就是如何充分的利用原有模型的卷積層作共享計算呢?所以纔會有用卷積層完成整幅圖像的特徵提取,區域建議的生成等等工作。

CNN的新形態

我們都知道基礎的CNN模型,一般情況下層數越深,特徵圖的厚度也就會越大,這樣一來,爲了適應第一層的全連接的維度,往往會在最後一層特徵圖上做全尺寸的卷積,這層卷積的參數量是非常巨大的,比如AlexNet一共只有60M個參數,但是這一層卷積的參數量就會佔去一多半,所以新形態的CNN呈現全卷積化的趨勢,比如ResNetGoogleNetDenseNet等等,而且最後一層一般採用全局池化而不是全尺寸卷積,這樣一來可以在儘量減少參數的情況下增加網絡的深度。

R-CNN系列在新形態CNN下的問題

Faster R-CNN及其之前的結構都是基於舊形態CNN設計的,如果把新形態的CNN遷移到 Faster R-CNN中就會出現問題,對於這個問題,作者給出瞭如下解釋: 
1.圖片分類任務與目標檢測任務性質是有所差異的 
2.分類任務想要的是對於變換的不變性(Translation invariance),也就是說不管這個類別的東西在圖片的那個位置,對分類的結果不應該產生影響。 
3.檢測任務想要的是對於變換的敏感性(Translation variance),因爲需要知道物體到底在哪裏。 
4.但是卷積的層數越深,不變性就越強,敏感性就會變弱。所以Faster R-CNN的結構並不適合新形態的CNN 

Faster R-CNN的時候,作者是用了ResNet-101作爲基礎模型的,但是ResNet-101沒有分成98+3層,而是分爲91+10層,這個實驗的結果相比於舊形態的CNNmAP高了,但是時間也變長了,具體的值在最後的實驗結果中可以看到。通過這個實驗可以得出的結論是新形態的CNN模型,不適用於這種前幾層共享卷積計算,後幾層不共享的方式。爲了解決這個問題,就有了R-FCN這裏需要說明一點:這些觀點大多來源於論文,其實在現在的很多工程實踐中,Faster R-CNN就是在用ResNet,在這裏之所以把論文的觀點說出來主要是爲了理解作者是如何一步一步的改進,最後完成R-CNN整個系列,個人認爲這個思路的理解要比理解單個模型或者跑一遍代碼更爲重要一些。

R-FCN

R-FCN是爲了適應全卷積化的CNN結構,首先R-FCN在共享所有的卷積層的,其次爲了解決上面提到的問題,R-FCN提出了: 

1.位置敏感分值(Position-sensitive score maps) 
它用來判斷某一個框到底屬於哪一個類別 
2.位置敏感池化(Position-sensitive RoI pooling) 
在位置敏感分值圖的基礎上提出的一種池化操作。

0?wx_fmt=png

上面這張圖就是R-FCN的結構,在綠色框裏的內容就是ResNet-101模型,這部分卷積計算還是用來被RPNPosition-sensitiveNet共享的,他就相當於Faster R-CNN裏面的前五層卷積一樣;藍色的框內是RPN,它在R-FCN中的作用和在FasterR-CNN中是一樣的,負責輸出建議區域與邊界框;最重要的部分,就是紅色框內的位置敏感卷積與池化,實際上,這部分的結構在FasterR-CNN中是RoI pooling+全連接+多任務損失函數等等,在R-FCN中,這部分內容換成了對位置敏感卷積,並把RPN的建議框扣在在分值圖上做位置敏感池化。R-FCN之所以起這個名字,是因爲圖像分割任務中出現了一個FCN(全卷積網絡),而這種全卷積的說法和R-FCN想要表達的意思很契合,或許這就是爲啥這一版的名字沒有叫FastestR-CNN吧,哈哈。

CNN的舊形態

0?wx_fmt=png

上面圖中,feature maps後面那根線就是位置敏感卷積層,它的卷積核個數是K^2(C+1),其中K是超參數,在論文用的比較多的是k=3K^2Grid的個數,這個個數與位置敏感池化操作後的尺寸相關聯的。C是物體的類別數量,加1是因爲還有一個背景類。 

經過了這一層卷積之後的輸出就是位置敏感分值圖,分值圖的寬高尺寸是與feature maps的寬高一致的,分值圖的通道數就是K^2(C+1),即每一個類別都有K^2個通道。 

雖然這一層卷積操作叫位置敏感卷積,並輸出了位置敏感分值圖,但是它本質上只是一個常規的卷積,不同的地方其實在於配合它一起使用的位置敏感池化。

位置敏感卷池化

0?wx_fmt=png

位置敏感池化是在分值圖上的一種池化操作,它是RoI池化的變種,之前說分值圖的通道是K^2(C+1),每一個類別有K^2個通道,換句話說,分值圖上就有k^2C+1個通道的組合。那麼假設k=3的話,這種情況就像上面圖示的那樣,每一個顏色都有C+1個通道,RPN的區域建議扣在分值圖上後,位置敏感池化會把這個區域在每一個通道上平均分爲K^2份,然後在每一個bin內做Max pooling,但是關鍵在K*K格子的位置是和通道對應的,如上圖中深黃色的通道數有C+1個,那麼位置敏感池化操作的時候,只要深黃色通道爲左上角的bin內的值,作爲K*K格子的左上角位置的值,所以K*K格子的左上角位置也是深黃色的。 

這種對應關係就是從左到右,從上到下。這樣的話,會得到一個K*K的格子,厚度是C+1,也就是每一個通道代表一個類別。 

下面這張圖可以更直觀的說明位置敏感池化: 紅色的箭頭就說明了這種對應關係。

0?wx_fmt=png

得到K*K格子之後,再做一步全局平均池化,就得到了1*1*C+1)的特徵,剛好是C+1個,這樣一來,維度固定了,同樣實現了將不同的輸入整理成相同維度的輸出,同時維度剛好與分類數相等。

R-FCN損失函數

0?wx_fmt=png

這個損失函數,和之前的沒啥區別,同樣是一個分類+迴歸的多任務損失,最後在一個batch加和計算loss 用於分類的是還是負的概率log值; 用於迴歸的是smooth L1

關鍵的地方時,R-FCN把什麼特徵送到了Bounding box迴歸模型裏面,在Fast R-CNN裏是conv5特徵經過RoI pooling之後的特徵,在RPN裏是用一個卷積分支專門生成的特徵,在R-FCN裏面也是用一個單獨的卷積分支生成的,特徵的通道數是4K^2,方法和位置敏感卷積時一樣的,只是C+1改成了4

R-FCN訓練

R-FCN訓練的步驟與FasterR-CNN相同,同樣是分步訓練法,只是把Fast R-CNN換成了R-FCN 

此外,文章提出了一個叫做OHEM(Online Hard Example Mining)的訓練技巧: 當一個圖片生成N個區域建議後,會使用當前的網絡的參數一次性計算所有N個區域的loss,並根據loss從大到小排序建議區域,並從這N個排序後的區域中取前Batchsize個。

這是因爲,如何某區域的loss更大,那麼說明網絡中的參數並沒有照顧到這種特徵,而這種特徵是應該被學習到的,如果把本來loss就很小的特徵在送入網絡中參與訓練,對參數的更新也沒啥影響。

R-FCN性能評估

0?wx_fmt=png

上面這張圖說明了超參數k對最後的mAP的影響: 
初始的Faster R-CNN RoI poolingk選擇爲1時,mAP61.7%,選擇爲7時,mAP68.9% 

R-FCN RoI poolingk選擇爲1時是沒有位置敏感信息的,直接failk選擇爲37時,mAP分別爲75.5%76.6%

0?wx_fmt=png

上面這張圖從多個角度對比了Faster R-CNNR-FCN,其中Faster R-CNN用的是Resnet101,把前91層做共享卷積計算,後10層代替原來的3層全連接,所以這個Faster R-CNN的測試時間不是之前說的0.18s,而是mAP也不是66.9% 

關注中間一行,在使用OHEM的情況下,以ResNet-101爲初始模型的兩個結構,單張訓練時間,R-FCNFaster R-CNN3倍多,單張測試時間R-FCNFaster R-CNN2.5倍左右。而0.17s這個時間,和Faster R-CNN使用舊形態的CNN模型時間是差不多的,但是mAP確實79.5%,優於原來的69.9%


該內容是目標檢測系列的第一篇,

後續還有系列連載,

~敬請期待~


1.從AlexNet剖析—卷積網絡CNN的一般結構

2.深度神經網絡訓練的必知技巧

3.[視頻講解]史上最全面的正則化技術總結與分析



掃描個人微信號,

拉你進機器學習大牛羣。

福利滿滿,名額已不多…

640.jpeg?

80%的AI從業者已關注我們微信公衆號

0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif

0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif



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