Fast R-CNN整体把握
RCNN很好地解決了目標(biāo)檢測分類和定位的問題。但是缺點(diǎn)是速度太慢。
原因1:2k個(gè)候選區(qū)域都要經(jīng)過變形成統(tǒng)一的正方形才能依次輸入CNN進(jìn)行特征提取。候選區(qū)域可能是互相包含的,這就導(dǎo)致原圖同一個(gè)特征的重復(fù)提取。
原因2:RCNN的分類和回歸是分開的,耗費(fèi)時(shí)間和空間。每個(gè)候選區(qū)域都要經(jīng)過相同的CNN和分類+回歸,復(fù)雜度與候選區(qū)域數(shù)量成正比。
如下圖所示,R-CNN先得到約2000個(gè)候選區(qū)域,對每個(gè)候選區(qū)域進(jìn)行warp,特征提取,SVM分類與Bbox的位置回歸。
Ross Girshick在15年推出Fast RCNN。同樣使用最大規(guī)模的網(wǎng)絡(luò),FastRCNN和RCNN相比,訓(xùn)練時(shí)間從84小時(shí)減少為9.5小時(shí),測試時(shí)間從47秒減少為0.32秒。我們看看Fast RCNN是如何解決最開始提到的兩個(gè)問題的。
針對問題1
原始做法是先得到原始圖像的ROI,再分別送CNN,改進(jìn)思路是直接將原圖送入CNN得到feature map,然后再加入候選框的信息,在feature map上得到候選區(qū)域映射的patch。這樣就只對圖像進(jìn)行了一次卷積特征的計(jì)算,比RCNN提速100倍。
這樣做又會引入兩個(gè)新問題,原始先得到ROI可以通過warp歸一化尺寸控制到全連接時(shí)的大小,那現(xiàn)在在特征圖上怎么進(jìn)行尺寸的歸一化,總不能繼續(xù)warp吧?還有,既然是在特征圖上找ROI,那候選區(qū)域與特征圖的對應(yīng)關(guān)系如何確定呢?
關(guān)于第一點(diǎn)尺寸歸一化的問題,何愷明研究員在2014的論文中將空間金字塔池化Spatial Pyramid Pooling(SPP)結(jié)構(gòu)引入了CNN,使CNN可以處理任意size和scale的圖像。
如上圖所示,在卷積層和全連接層之間加入了SPP layer。此時(shí)網(wǎng)絡(luò)的輸入可以是任意尺度的,在SPP layer中每一個(gè)pooling的filter會根據(jù)輸入調(diào)整bin大小,從右到左三級bin的個(gè)數(shù)分別是1,4,16,這樣SPP的輸出尺度始終是固定的,是1+4+16維。提取候選區(qū)特征和構(gòu)建金字塔的過程都在ROI Pooling中完成。
為什么bin的個(gè)數(shù)之和就是輸出的維度呢?因?yàn)檫@一層使用最大池化(max pooling)來將RoI區(qū)域轉(zhuǎn)化成固定大小為HW的特征圖。如下圖,我們可以設(shè)定每個(gè)候選區(qū)域的分塊數(shù),但依然不能保證每一個(gè)bin內(nèi)的大小是一樣的,最大池化就可以簡單理解成求塊內(nèi)最大值的過程,這樣不管每一個(gè)bin是多大,最后都只輸出1個(gè)值:最大值。
Fast-RCNN就使用了SPPlayer的變種——RoI pooling層。SPP是金字塔結(jié)構(gòu),每層的最大池化結(jié)果拼接做輸出,但其實(shí)金字塔的每層都可以起到歸一化尺寸的目的。RoI pooling層就只使用了金字塔的一層,因?yàn)閷?shí)驗(yàn)表明多尺度學(xué)習(xí)只增加了一點(diǎn)點(diǎn)mAP,但是計(jì)算量成倍增加。
關(guān)于第二點(diǎn)特征圖位置與候選框位置對應(yīng)關(guān)系的問題。這里要引入感受野Receptive Field的概念,表示特征圖中每個(gè)像素點(diǎn)源自哪部分原始像素點(diǎn)的加權(quán)和。由特征圖是可以倒推出特征圖中每個(gè)像素點(diǎn)的感受野的,計(jì)算過程受到卷積核填充因子和步長的影響,為了方便計(jì)算,設(shè)定卷積核尺寸為F時(shí)填充大小為F/2,那么映射關(guān)系就只與步長S有關(guān):特征圖(0,0)位置對應(yīng)的感受野中心坐標(biāo)是(0,0);特征圖(x,y)位置對應(yīng)的感受野中心坐標(biāo)是(Sx,Sy)。但現(xiàn)在我們已知的是空域的候選框位置,怎么得到該候選框在特征圖中的位置呢,其實(shí)和感受野的顏色關(guān)系是差不多的,都是S倍的關(guān)系,只不過要根據(jù)取整的關(guān)系進(jìn)行正負(fù)1的調(diào)整:
Given a window in the image domain, we project the left (top) boundary by: x 0 = bx/Sc + 1 and the right (bottom) boundary x 0 = dx/Se ? 1.
?
針對問題2
另外,之前RCNN的處理流程是先提proposal,然后CNN提取特征,之后用SVM分類器,最后再做bbox regression,而在Fast-RCNN中,作者巧妙的把bbox regression放進(jìn)了神經(jīng)網(wǎng)絡(luò)內(nèi)部,與region分類和并成為了一個(gè)multi-task模型,損失函數(shù)使用了多任務(wù)損失函數(shù)(multi-task loss),將邊框回歸直接加入到CNN網(wǎng)絡(luò)中訓(xùn)練。實(shí)際實(shí)驗(yàn)也證明,這兩個(gè)任務(wù)能夠共享卷積特征,并相互促進(jìn)。
既然是多任務(wù),那么損失函數(shù)就由兩項(xiàng)構(gòu)成:一個(gè)是分類損失,一個(gè)是回歸損失。因?yàn)槭嵌喾诸?#xff0c;理所當(dāng)然地使用softmax得到該RoI屬于各個(gè)標(biāo)簽的概率,。但是這里沒有使用交叉熵,對于真實(shí)標(biāo)簽,
對于使用回歸來修正Bbox的定位,我們首先要以四元組的形式來表示方框的位置和大小:,回歸損失就是四個(gè)維度的損失和:
其中smooth函數(shù):
函數(shù)曲線如下:
最終的損失函數(shù):
其中用于平滑分類與回歸的權(quán)重,在實(shí)驗(yàn)中取1。[]是艾弗森括號,滿足括號內(nèi)內(nèi)容時(shí)取1,否則取0(此時(shí)RoI類別是背景,沒有定位框,忽略回歸任務(wù))。
Reference:
1.http://shartoo.github.io/RCNN-series/
2.https://blog.csdn.net/shenxiaolu1984/article/details/51036677
3.https://www.cnblogs.com/skyfsm/p/6806246.html
?
總結(jié)
以上是生活随笔為你收集整理的Fast R-CNN整体把握的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用ORB/AKAZE特征点进行图像配准
- 下一篇: 利用gitbash上传项目到github