本文主要用于介紹rbg大神于2015年提出的Fast R-CNN網(wǎng)絡(luò)扁誓,該網(wǎng)絡(luò)架構(gòu)是在其前作R-CNN上的升級(jí)改進(jìn)版邓梅。本筆記主要為方便初學(xué)者快速入門冶共,以及自我回顧乾蛤。
論文鏈接:https://arxiv.org/pdf/1504.08083.pdf
github主頁(yè):https://github.com/rbgirshick/fast-rcnn
rbg大神個(gè)人主頁(yè):http://www.rossgirshick.info/#girshick2014rcnn
為更好的理解該論文,建議先行閱讀R-CNN和SPPNet網(wǎng)絡(luò)的相關(guān)論文捅僵,這里也附上本菇之前寫的2篇論文筆記供大家參考~
R-CNN理解
SPPNet網(wǎng)絡(luò)理解
基本目錄如下:
- 摘要
- 核心思想
- 總結(jié)
------------------第一菇 - 摘要------------------
1.1 論文摘要
本論文提出了一種適用于目標(biāo)檢測(cè)的快速的基于區(qū)域候選的卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)(Fast R-CNN)家卖。在之前R-CNN的架構(gòu)基礎(chǔ)上,F(xiàn)ast R-CNN引入了深度卷積神經(jīng)網(wǎng)絡(luò)快速對(duì)R-CNN第一階段產(chǎn)生的候補(bǔ)區(qū)域進(jìn)行分類庙楚,從而在訓(xùn)練和測(cè)試的時(shí)效性上取得了很大的突破上荡,同時(shí)還提升了檢測(cè)的準(zhǔn)確率。Fast R-CNN相比R-CNN在訓(xùn)練VGG16上快了9倍馒闷,測(cè)試的時(shí)候快了213倍酪捡,而且在同一個(gè)數(shù)據(jù)集PASCAL VOC上有更高的MAP。相比于SPPnet纳账,F(xiàn)AST R-CNN在訓(xùn)練VGG16上快了3倍逛薇,測(cè)試的時(shí)候快了10倍,并且準(zhǔn)確率更高疏虫。FAST R-CNN同時(shí)有Python和C++倆個(gè)版本永罚,開(kāi)源地址:https: //github.com/rbgirshick/fast-rcnn
------------------第二菇 - 核心思想------------------
2.1 Fast R-CNN的突破點(diǎn)
再理解本文提出的新架構(gòu)之前帅涂,我們先跟著論文思路來(lái)梳理一下在目標(biāo)檢測(cè)領(lǐng)域大放異彩的R-CNN網(wǎng)絡(luò)架構(gòu)的缺陷,
1)訓(xùn)練是多階段的(Training is a multi-stage pipeline):R-CNN首先要用卷積層來(lái)訓(xùn)練提取特征尤蛮,然后再用提取出的特征來(lái)訓(xùn)練一個(gè)分類器(SVM)媳友,最后還要來(lái)回歸目標(biāo)檢測(cè)框。仔細(xì)看來(lái)产捞,整個(gè)訓(xùn)練和預(yù)測(cè)過(guò)程是剝離開(kāi)來(lái)了3個(gè)階段醇锚,且不說(shuō)實(shí)現(xiàn)上有多麻煩,整個(gè)時(shí)效性也是扛不住的坯临。
2)訓(xùn)練耗費(fèi)大量空間和時(shí)間(Training is expensive in space and time):這個(gè)已經(jīng)是顯而易見(jiàn)的焊唬,就不多說(shuō)了,畢竟候選框也多達(dá)2000多個(gè)呢看靠。赶促。。
3)預(yù)測(cè)的時(shí)間太慢了(Object detection is slow):在GPU上挟炬,也要耗費(fèi)47秒來(lái)預(yù)測(cè)一張圖片鸥滨。。谤祖。簡(jiǎn)直了婿滓。。粥喜。
SPPNet通過(guò)設(shè)計(jì)加入空間金字塔池化層凸主,解決了R-CNN中重復(fù)提取圖片特征的問(wèn)題,在一定程度上加速了訓(xùn)練和預(yù)測(cè)的時(shí)效性额湘,但是SPPNet本身并沒(méi)有改動(dòng)R-CNN的網(wǎng)絡(luò)架構(gòu)卿吐,因此仍然是多階段的,并且因?yàn)橐肓丝臻g金字塔池化層锋华,導(dǎo)致了一些預(yù)訓(xùn)練的策略無(wú)法使用嗡官,從而影響最終的結(jié)果。
因此供置,本文提出的Fast R-CNN網(wǎng)絡(luò)架構(gòu)谨湘,就是針對(duì)上面的缺陷做了重大的改進(jìn),主要的貢獻(xiàn)包括芥丧,
1)相比于R-CNN和SPPNet更好的目標(biāo)檢測(cè)質(zhì)量(map)
2)訓(xùn)練是單階段的紧阔,而不是多階段剝離開(kāi)的
3)訓(xùn)練的時(shí)候可以更新所有層的參數(shù)
4)提取出的特征無(wú)需額外的硬盤空間來(lái)存儲(chǔ)
對(duì)本文提出的Fast R-CNN了解到這一層面以后,我們?cè)俳又鴣?lái)細(xì)看其網(wǎng)絡(luò)架構(gòu)续担。
2.2 Fast R-CNN的網(wǎng)絡(luò)架構(gòu)
話不多說(shuō)擅耽,我們直接上一張?jiān)撐闹蠪ast R-CNN的網(wǎng)絡(luò)架構(gòu)圖,
首先整個(gè)網(wǎng)絡(luò)的輸入依然是整張圖片和多個(gè)候選區(qū)域框物遇,經(jīng)過(guò)一系列的卷積池化(跟之前保持一致)操作以后會(huì)生成特征圖乖仇。變化的部分是憾儒,對(duì)于每一個(gè)候選區(qū)域框,都會(huì)通過(guò)映射關(guān)系乃沙,在特征圖上找到對(duì)應(yīng)的位置起趾,并將其輸入到RoI池化層,從而生成固定維度大小的特征向量警儒。該特征向量隨后送入到連續(xù)的幾個(gè)全連接層后训裆,再接著送入到2個(gè)分支中,一個(gè)分支用于做分類蜀铲,一個(gè)分支用于做回歸边琉。至此,整一個(gè)訓(xùn)練過(guò)程就打通了记劝,而不是跟之前一樣剝離開(kāi)的3個(gè)階段变姨。
整體的架構(gòu)可以說(shuō)是非常的清晰易懂,但是其中的RoI池化層和多任務(wù)的Loss函數(shù)設(shè)計(jì)值得我們深入探討一下厌丑。
2.2.1 RoI池化層
首先明確一點(diǎn)定欧,RoI池化層的作用就是將形狀大小各異的特征圖上的候選區(qū)域,轉(zhuǎn)換為固定大小的特征向量(超參數(shù)蹄衷,)忧额,因此可以簡(jiǎn)單理解為就是SPPNet最后接的空間金字塔池化層,但RoI池化層要更簡(jiǎn)潔一些愧口。
然后明確一個(gè)目標(biāo)候選區(qū)域在特征圖上的,RoI(Region Of Interest)由1個(gè)4元組表示类茂,耍属,其中
確定了其左上角的點(diǎn)(在特征圖中),
確定了其大小巩检。
清晰上述定義后厚骗,RoI最大池化層的工作原理就是,將一個(gè)的區(qū)域均分為
兢哭,然后對(duì)其每一個(gè)網(wǎng)格取最大值池化(如果有不理解的领舰,見(jiàn)下圖),從而對(duì)任意大小的區(qū)域迟螺,我們最終得到的特征向量緯度是固定的冲秽。
至此,大家應(yīng)該理解為啥比SPPNet的金字塔池化層要簡(jiǎn)化了吧~金字塔池化還涉及多個(gè)池化核組合矩父,這里就很簡(jiǎn)單的直接輸出一個(gè)固定大小的~
RoI池化層的結(jié)構(gòu)算是講明白了锉桑,不過(guò)文中還是多提了一句,如何對(duì)RoI池化層進(jìn)行求導(dǎo)(文中說(shuō)的比較晦澀窍株,但還是要理解那個(gè)累加求和公式的意義)民轴,這里我也說(shuō)一下攻柠,我對(duì)此的理解,也是參考了這篇博文的~從該博文中盜一張圖后裸,來(lái)加深理解瑰钮,
如上圖,有2個(gè)候選區(qū)域(藍(lán)色微驶,橘色)飞涂,其中,7這個(gè)點(diǎn)祈搜,同時(shí)被2個(gè)區(qū)域所覆蓋较店,而我們知道,最大池化求導(dǎo)的時(shí)候容燕,只有那個(gè)最大值(響應(yīng)結(jié)點(diǎn))的倒數(shù)是有值的梁呈,其他的結(jié)點(diǎn)都是0,因此蘸秘,值為7的這個(gè)結(jié)點(diǎn)官卡,在倆個(gè)候選區(qū)域中都有了響應(yīng),因此醋虏,傳到該結(jié)點(diǎn)的梯度值就是2個(gè)候選區(qū)域反向傳播回來(lái)的梯度值的和寻咒,因此,文中給出的求梯度公式是求和的形式~
至此颈嚼,有關(guān)RoI池化層的內(nèi)容應(yīng)該算是講明白了毛秘,有細(xì)節(jié)不清楚的桩盲,還是應(yīng)該再翻看原論文加深理解叙量。
2.2.2 微調(diào)策略
Fast R-CNN還有一個(gè)巨大的優(yōu)勢(shì)就是能通過(guò)反向傳播算法同時(shí)更新所有層的參數(shù)冷离,而這是SPPNet所不具備的恼布。文中給出的依據(jù)是搬设,SPPNet中的空間金字塔池化層撮抓,如果訓(xùn)練樣本來(lái)源于不同的圖片教届,其訓(xùn)練是十分低效的橙困。之所以低效是每一個(gè)RoI都可能會(huì)有很大的感受野(receptive field)署驻,經(jīng)常會(huì)覆蓋到全圖奋献。因此,前向傳播就必須要處理很大的感受野旺上,從而導(dǎo)致訓(xùn)練的輸入就很大(經(jīng)常是全圖)瓶蚂。而Fast R-CNN在訓(xùn)練方法上做了一點(diǎn)改進(jìn),從而解決了這個(gè)問(wèn)題抚官。
哎扬跋,其實(shí)就是在樣本采樣上做的一點(diǎn)處理。簡(jiǎn)單講就是作者采用了分層采樣的手段凌节,確保了每一個(gè)mini-batch里面輸入的RoI都是來(lái)自于同一張圖片的钦听。洒试。。那自然朴上,每一個(gè)RoI都能共享計(jì)算的參數(shù)和存儲(chǔ)內(nèi)存了垒棋。。痪宰。雖然有違第一直覺(jué)(畢竟樣本不是要盡量打散么叼架。。衣撬。)但人家實(shí)驗(yàn)做出來(lái)乖订,效果沒(méi)毛病,那既然訓(xùn)練的速度更快了具练,何樂(lè)而不為呢~
2.2.3 多任務(wù)損失函數(shù)設(shè)計(jì)
不同前作乍构,提取出固定特征以后,就分別扔到分類器和回歸器里面去訓(xùn)練扛点,F(xiàn)ast R-CNN在后面開(kāi)了2分支哥遮,一起訓(xùn)練,因此陵究,只要定義好損失函數(shù)眠饮,那自然就行得通了。
首先铜邮,明確一下仪召,F(xiàn)ast R-CNN的輸出,因?yàn)橛?個(gè)分支牲距,所以有2個(gè)輸出返咱,
對(duì)于每一個(gè)RoI,首先有一個(gè)分類的輸出(softmax)牍鞠,假設(shè)有類,加上背景一共有
個(gè)值评姨,
其次是有一個(gè)位置框信息难述,
因此,我們也有2個(gè)損失要去求吐句,第一個(gè)是分類的損失胁后,即對(duì)真實(shí)的類別的概率取對(duì)數(shù)值。
而對(duì)于回歸的損失嗦枢,注意攀芯,只有分類對(duì)了的,才會(huì)去計(jì)算回歸的損失文虏,因此侣诺,其損失表示為(v表示gt)殖演,
其中,這里用了L1正則平滑年鸳,
因此趴久,最終的損失函數(shù)就可以表達(dá)為,
至此搔确,整一套Fast R-CNN相關(guān)的重點(diǎn)已經(jīng)講述清楚明白了~
2.3 論文小結(jié)
本文提出的Fast R-CNN毫無(wú)疑問(wèn)是R-CNN和SPPNet的簡(jiǎn)潔優(yōu)化版彼棍。作者通過(guò)大量詳細(xì)的對(duì)比實(shí)驗(yàn)發(fā)現(xiàn)了很多新的訓(xùn)練及優(yōu)化技巧,比如最后一層用softmax直接做分類效果優(yōu)于用svm的膳算,并不是越多的候選區(qū)域就越能提升最終的檢測(cè)效果座硕,更多的訓(xùn)練數(shù)據(jù)帶來(lái)更好的結(jié)果,單一尺度的輸入框經(jīng)常就能達(dá)到多尺度輸入框的效果等等(更多細(xì)節(jié)大家可以看原論文)涕蜂。其中华匾,作者也在小結(jié)中強(qiáng)調(diào)了最重要的一點(diǎn)發(fā)現(xiàn),即稀疏的候選區(qū)域?qū)ψ罱K檢測(cè)效果是有提升的宇葱,并且大大提高了時(shí)效性瘦真。當(dāng)然,日后必定還會(huì)發(fā)展出更多的小技巧來(lái)加速目標(biāo)檢測(cè)算法~
------------------第三菇 - 總結(jié)------------------
3.1 總結(jié)
到這里黍瞧,整篇論文的核心思想已經(jīng)說(shuō)清楚了诸尽。本論文主要是在R-CNN和SPPNet的基礎(chǔ)上提出了一種適用于目標(biāo)檢測(cè)的新的網(wǎng)絡(luò)架構(gòu)Fast R-CNN,并實(shí)驗(yàn)證明其可行性印颤,為后續(xù)發(fā)展奠定了基礎(chǔ)您机。
簡(jiǎn)單總結(jié)一下本文就是先羅列了一下該論文的摘要,再具體介紹了一下本文作者的思路年局,也簡(jiǎn)單表述了一下际看,自己對(duì)Fast R-CNN網(wǎng)絡(luò)的理解。希望大家讀完本文后能進(jìn)一步加深對(duì)該論文的理解矢否。有說(shuō)的不對(duì)的地方也請(qǐng)大家指出仲闽,多多交流,大家一起進(jìn)步~??