本文主要用于介紹rbg大神于2015年提出的Faster R-CNN網(wǎng)絡(luò)惹谐,該網(wǎng)絡(luò)架構(gòu)是在其前作Fast R-CNN上的升級(jí)改進(jìn)版魏蔗。本筆記主要為方便初學(xué)者快速入門砍的,以及自我回顧。
論文鏈接:https://arxiv.org/pdf/1506.01497.pdf
github主頁:https://github.com/rbgirshick/py-faster-rcnn
rbg大神個(gè)人主頁:http://www.rossgirshick.info/#girshick2014rcnn
為更好的理解該論文莺治,建議先行閱讀R-CNN廓鞠,SPPNet帚稠,F(xiàn)ast R-CNN網(wǎng)絡(luò)的相關(guān)論文,這里也附上本菇之前寫的4篇論文筆記供大家參考~
R-CNN理解
SPPNet網(wǎng)絡(luò)理解
Fast R-CNN理解
全卷積網(wǎng)絡(luò)理解
基本目錄如下:
- 摘要
- 核心思想
- 總結(jié)
------------------第一菇 - 摘要------------------
1.1 論文摘要
現(xiàn)今流行的目標(biāo)檢測(cè)網(wǎng)絡(luò)都依賴于“區(qū)域建議(region proposal)”算法來提前假設(shè)潛在的目標(biāo)區(qū)域床佳。像最新的SPPNet網(wǎng)絡(luò)滋早,F(xiàn)ast R-CNN網(wǎng)絡(luò)都已經(jīng)在檢測(cè)網(wǎng)絡(luò)上節(jié)省了大量的時(shí)間,唯一效率上的瓶頸就在于第一步砌们,候選框的提出杆麸。因此,在本論文中浪感,我們提出了一種“區(qū)域建議網(wǎng)絡(luò)(Region Proposal Network昔头,RPN)”,該網(wǎng)絡(luò)與檢測(cè)網(wǎng)絡(luò)共享卷積層參數(shù)影兽,因此使得新增的該網(wǎng)絡(luò)層的時(shí)間開銷幾乎為0揭斧。RPN的本質(zhì)就是同時(shí)計(jì)算每一個(gè)位置的目標(biāo)邊界和目標(biāo)分?jǐn)?shù)的全卷積網(wǎng)絡(luò),該網(wǎng)絡(luò)生成的候選區(qū)域框峻堰,將會(huì)輸入到后續(xù)的Fast R-CNN架構(gòu)用于目標(biāo)檢測(cè)讹开。本論文還同時(shí),將RPN網(wǎng)絡(luò)和Fast R-CNN網(wǎng)絡(luò)合并進(jìn)一個(gè)網(wǎng)絡(luò)中捐名,因此能夠共享卷積層的參數(shù)旦万,且用于提取特征的網(wǎng)絡(luò)層用了最新流行的引入“注意力”機(jī)制的網(wǎng)絡(luò)。對(duì)于那種深度模型VGG16桐筏,我們新的架構(gòu)能夠達(dá)到單GPU纸型,5fps目標(biāo)檢測(cè)速度拇砰,并且還保證了準(zhǔn)確率梅忌。在2015年的ILSVRC和COCO的目標(biāo)檢測(cè)比賽中,第一名所用模型的架構(gòu)都有我們的影子除破。
------------------第二菇 - 核心思想------------------
2.1 Faster R-CNN的網(wǎng)絡(luò)架構(gòu)圖
Fast R-CNN的提出成功解決了目標(biāo)檢測(cè)的時(shí)效性問題牧氮,并且已經(jīng)能接近達(dá)到實(shí)時(shí)的效果。但是瑰枫,F(xiàn)ast R-CNN網(wǎng)絡(luò)運(yùn)行的前提就是準(zhǔn)備好一堆候選框踱葛,之前都是采用的傳統(tǒng)圖像算法,比如Selective Search光坝。但是隨著后半部分問題的解決尸诽,前面生成候選框的時(shí)效性(主要還是想把整一套流程都放到GPU上來搞)也變的引人注目了。盯另。性含。于是rbg大神們,也就索性放棄了傳統(tǒng)圖像算法鸳惯,提出了一個(gè)新的RPN網(wǎng)絡(luò)來生成候選框商蕴,再把RPN網(wǎng)絡(luò)嵌入到Fast R-CNN中叠萍,也就是當(dāng)紅炸子雞Faster R-CNN了,這里先直接上一張論文中的網(wǎng)絡(luò)架構(gòu)圖绪商,方便大家對(duì)其有一個(gè)基本的認(rèn)知苛谷,
可以看到,紅色框的那部分(RPN)就是相比于Fast R-CNN新加的部分格郁,因此只要理解了RPN網(wǎng)絡(luò)腹殿,再加上Fast R-CNN的基礎(chǔ),那么對(duì)Faster R-CNN的整體把握就比較清晰了~所以理张,接下來我們就重點(diǎn)看一下RPN網(wǎng)絡(luò)的細(xì)節(jié)赫蛇。
2.2 理解RPN網(wǎng)絡(luò)
首先明確RPN網(wǎng)絡(luò)的作用為:輸入任意大小的圖片,輸出一系列的方形目標(biāo)候選框雾叭,每一個(gè)目標(biāo)候選框都帶有objectness分?jǐn)?shù)悟耘。該網(wǎng)絡(luò)其實(shí)是可以作為一個(gè)單獨(dú)的目標(biāo)檢測(cè)網(wǎng)絡(luò)而存在的!只不過织狐,作者將其嵌入進(jìn)了Fast R-CNN架構(gòu)中暂幼,并將整個(gè)新的架構(gòu)命名為Faster R-CNN。
(注:這里必須強(qiáng)調(diào)一下移迫,objectness想表達(dá)的意思是該候選目標(biāo)框是否含有目標(biāo)檢測(cè)物體(并不需要明確是哪一類)旺嬉,因此僅僅是一個(gè)二分類問題,含有目標(biāo)或者是背景)
其次厨埋,必須明確Faster R-CNN架構(gòu)中的RPN網(wǎng)絡(luò)層為了共享卷積層參數(shù)邪媳,會(huì)直接用前置卷積池化操作產(chǎn)生的特征圖(feature map)。有了特征圖以后荡陷,會(huì)在特征圖上的指定地方(由Anchors決定雨效,不理解Anchors沒關(guān)系,后文會(huì)解釋废赞,在這簡單理解為特征圖上的一個(gè)固定點(diǎn))滑動(dòng)一個(gè)小的神經(jīng)網(wǎng)絡(luò)(我姑且稱之為“候選生成網(wǎng)絡(luò)”徽龟,真的很小,就是由1個(gè)nn的卷積層再跟2個(gè)11卷積層的分支唉地,分別對(duì)應(yīng)分類和回歸)据悔,這個(gè)小神經(jīng)網(wǎng)絡(luò)的輸入就是一個(gè)Anchor生成的候選框,然后輸出每個(gè)候選框的分?jǐn)?shù)和位置耘沼,如果有不清楚整體架構(gòu)的极颓,直接看論文中原圖如下,應(yīng)該也就能明白整體的架構(gòu)邏輯了~
(注:比較容易搞混的可能是“滑動(dòng)一個(gè)小的神經(jīng)網(wǎng)絡(luò)”~傳統(tǒng)操作一般不都是滑動(dòng)卷積核或池化核群嗤,其實(shí)操作的本質(zhì)類似菠隆,只不過這里滑動(dòng)的是一個(gè)小的神經(jīng)網(wǎng)絡(luò),從而達(dá)到輸出多個(gè)候選框的目的)
上圖應(yīng)該來說是比較清晰了,接下來我們就再深入一些細(xì)節(jié)浸赫,加深理解闰围。
2.2.1 Anchors的理解
Anchors中文翻譯就是“錨點(diǎn)”,每一個(gè)錨點(diǎn)既峡,我們都會(huì)生成大小各異的多個(gè)候選框羡榴,這里明確一個(gè)參數(shù)的意義,运敢,就表示每一個(gè)錨點(diǎn)生成的候選框的個(gè)數(shù)校仑。
因此,上圖的意思就是传惠,每一個(gè)框都會(huì)有2個(gè)分?jǐn)?shù)(一個(gè)是:為目標(biāo)的概率迄沫;另一個(gè)是:為背景的概率),總共有
個(gè)卦方,那自然輸出是
羊瘩。同理,
就是每一個(gè)框都由4個(gè)參數(shù)來定位盼砍,總共就是
個(gè)尘吗。
論文中,作者采用的參數(shù)是9個(gè)浇坐,運(yùn)行調(diào)用作者demo中的generate_anchors.py睬捶,可以得到9個(gè)矩形共有3種形狀(如下圖,來源【1】)近刘,長寬比大約控制在擒贸,每1個(gè)ratio對(duì)應(yīng)3個(gè)scale,因此最終是9個(gè)觉渴,其本質(zhì)就是引入了檢測(cè)中常用的多尺度方法介劫。
作者也在文中強(qiáng)調(diào),該種多尺度的實(shí)現(xiàn)方法是整套的核心疆拘,
The design of multi- scale anchors is a key component for sharing features without extra cost for addressing scales.
那么在論文的參數(shù)設(shè)置下蜕猫,最終的候選框個(gè)數(shù)是多少呢寂曹?假設(shè)原圖是的哎迄,VGG下采樣16倍,每個(gè)錨點(diǎn)9個(gè)框隆圆,
再從網(wǎng)上盜一張圖漱挚,加深理解,
這里再貼一張?jiān)瓐D上的錨點(diǎn)示意圖【3】渺氧,助于理解(因?yàn)橄虏蓸恿?6倍旨涝,所以每個(gè)錨點(diǎn)在原圖上會(huì)有16個(gè)像素距離)
這么多的候選框,自然是不可能全都送到后面的網(wǎng)絡(luò)中去的侣背,訓(xùn)練程序會(huì)在合適的anchors中隨機(jī)選擇128個(gè)positive anchors + 128個(gè)negative anchors進(jìn)行訓(xùn)練白华。因?yàn)榇蟛糠智闆r下都是背景居多(negative)慨默,如果positve少于128的話,那在當(dāng)前批次里弧腥,就選取其他的negative補(bǔ)上厦取。
2.2.2 損失函數(shù)
至此,大家對(duì)整一套R(shí)PN網(wǎng)絡(luò)應(yīng)該有比較好的理解了管搪,我們?cè)偕弦粡坧ython版本中的VGG16模型中的faster_rcnn_test.pt的網(wǎng)絡(luò)結(jié)構(gòu)【1】虾攻,
上圖的表示相比于原論文,會(huì)更加清晰易懂更鲁,因此霎箍,損失函數(shù)也有2部分組成,其中一部分是分類澡为,另一部分是回歸漂坏。整個(gè)網(wǎng)絡(luò)的損失函數(shù)可以表示為(其實(shí)與Fast R-CNN真的很像),
其中媒至,
表示在一個(gè)批中的anchor的下標(biāo)
為該錨點(diǎn)是目標(biāo)的概率
為1如果是positive樊拓,為0如果是negetive
就是預(yù)測(cè)的4個(gè)用于定位的坐標(biāo)點(diǎn)
就是GT,當(dāng)然也只有是positive才會(huì)計(jì)入損失
當(dāng)然塘慕,實(shí)際的訓(xùn)練中會(huì)發(fā)現(xiàn)筋夏,和
值相差過大,通常會(huì)引入?yún)?shù)
來平衡图呢,是總的Loss能均勻考慮2種Loss条篷。
(注:推薦學(xué)有余力的同學(xué)看該博文對(duì)于回歸問題的一個(gè)細(xì)節(jié)描述,看懂了以后蛤织,再來理解文中給出的公式就不難了赴叹,簡單講一句就是,回歸分支真正要學(xué)的參數(shù)不是具體的坐標(biāo)值指蚜,而是對(duì)于每一個(gè)Anchor的平移量和變化尺度)
至此乞巧,整一套R(shí)PN網(wǎng)絡(luò)就已經(jīng)講清楚了,至于RoI在Fast R-CNN中已經(jīng)講的很清楚了摊鸡,這里就不展開了绽媒。
2.2.3 訓(xùn)練過程
接下來,還有一個(gè)難點(diǎn)免猾,就是如果訓(xùn)練整一套Faster R-CNN網(wǎng)絡(luò)是辕。文中作者給出了幾種可能的訓(xùn)練方法,
1)分開單獨(dú)訓(xùn)練猎提,即先訓(xùn)練RPN網(wǎng)絡(luò)获三,再用RPN生成的候選區(qū)域來訓(xùn)練Fast R-CNN,再用Fast R-CNN訓(xùn)練微調(diào)完的網(wǎng)絡(luò)來訓(xùn)練RPN,迭代往復(fù)疙教,這也是本文作者在做實(shí)驗(yàn)中用的訓(xùn)練方法棺聊。
2)放在一起訓(xùn)練。贞谓。躺屁。說實(shí)話,有點(diǎn)懵经宏。犀暑。。主要是我也沒想明白這個(gè)梯度更新的過程烁兰。耐亏。。
(以下內(nèi)容來自【4】)
然而沪斟,作者在源碼中的訓(xùn)練細(xì)節(jié)一共分了4步广辰,
1)用ImageNet模型初始化,獨(dú)立訓(xùn)練一個(gè)RPN網(wǎng)絡(luò)
2)仍然用ImageNet模型初始化主之,但是使用上一步RPN網(wǎng)絡(luò)產(chǎn)生的proposal作為輸入择吊,訓(xùn)練一個(gè)Fast-RCNN網(wǎng)絡(luò),至此槽奕,兩個(gè)網(wǎng)絡(luò)每一層的參數(shù)完全不共享几睛;
3)使用第二步的Fast-RCNN網(wǎng)絡(luò)參數(shù)初始化一個(gè)新的RPN網(wǎng)絡(luò),但是把RPN粤攒、Fast-RCNN共享的那些卷積層的learning rate設(shè)置為0所森,也就是不更新,僅僅更新RPN特有的那些網(wǎng)絡(luò)層夯接,重新訓(xùn)練焕济,此時(shí),兩個(gè)網(wǎng)絡(luò)已經(jīng)共享了所有公共的卷積層盔几;
4)仍然固定共享的那些網(wǎng)絡(luò)層晴弃,把Fast-RCNN特有的網(wǎng)絡(luò)層也加入進(jìn)來,形成一個(gè)unified network逊拍,繼續(xù)訓(xùn)練上鞠,fine tune Fast-RCNN特有的網(wǎng)絡(luò)層,此時(shí)顺献,該網(wǎng)絡(luò)已經(jīng)實(shí)現(xiàn)我們?cè)O(shè)想的目標(biāo)旗国,即網(wǎng)絡(luò)內(nèi)部預(yù)測(cè)proposal并實(shí)現(xiàn)檢測(cè)的功能枯怖。
以上就是訓(xùn)練的細(xì)節(jié)步驟注整。
至此,整一套Faster R-CNN算是講明白了,其余的實(shí)驗(yàn)設(shè)置和結(jié)果這邊就不展開了肿轨,有興趣的同學(xué)自己看原文就行~
------------------第三菇 - 總結(jié)------------------
3.1 總結(jié)
到這里寿冕,整篇論文的核心思想已經(jīng)說清楚了。本論文主要是提出了一種新的RPN網(wǎng)絡(luò)用于生成候選區(qū)域框椒袍,并將其嵌入到Fast R-CNN中驼唱,將其命名為Faster R-CNN,進(jìn)一步提高了目標(biāo)檢測(cè)算法的時(shí)效性驹暑,并實(shí)驗(yàn)證明其可行性玫恳,為后續(xù)發(fā)展奠定了基礎(chǔ)。
簡單總結(jié)一下本文就是先羅列了一下該論文的摘要优俘,再具體介紹了一下本文作者的思路京办,也簡單表述了一下,自己對(duì)Faster R-CNN網(wǎng)絡(luò)帆焕,尤其是其中的RPN網(wǎng)絡(luò)的理解惭婿。希望大家讀完本文后能進(jìn)一步加深對(duì)該論文的理解。有說的不對(duì)的地方也請(qǐng)大家指出叶雹,多多交流财饥,大家一起進(jìn)步~??
參考文獻(xiàn):
【1】https://zhuanlan.zhihu.com/p/31426458
【2】https://blog.csdn.net/shenziheng1/article/details/82907663
【3】https://www.jiqizhixin.com/articles/2018-02-23-3
【4】https://zhuanlan.zhihu.com/p/24916624