目标检测技术演化:从R-CNN到Faster R-CNN
摘要:?一文了解目標(biāo)檢測(cè)技術(shù)發(fā)展,不要錯(cuò)過(guò)喲。
目標(biāo)檢測(cè)旨在準(zhǔn)確地找到給定圖片中物體的位置,并將其正確分類。準(zhǔn)確地來(lái)講,目標(biāo)檢測(cè)需要確定目標(biāo)是什么以及對(duì)其定位。
然而,想要解決這個(gè)問(wèn)題并不容易。因?yàn)?#xff0c;目標(biāo)的大小,其在空間中的方向,其姿態(tài),以及其在圖片中的位置都是變化的。
這里有一張圖片,我們需要識(shí)別圖片中的物體,并且用方框?qū)⒃撐矬w圈出來(lái)。
圖像識(shí)別(分類)
定位:
如今大火的卷積神經(jīng)網(wǎng)絡(luò)幫助我們很好地進(jìn)行圖像識(shí)別。但是,我們?nèi)孕枰恍╊~外的功能來(lái)進(jìn)行精確定位,深度學(xué)習(xí)在這里發(fā)揮了很好的作用。
在本文中,我們將從目標(biāo)定位的角度入手探討目標(biāo)檢測(cè)技術(shù)的發(fā)展。我們將按著如下的演化順序講述:R-CNN->SPP Net->Fast R-CNN-> Faster R-CNN
在開(kāi)始前,我們將對(duì)基于區(qū)域的卷積神經(jīng)網(wǎng)絡(luò)(R-CNN)進(jìn)行簡(jiǎn)單的介紹。
將定位看作回歸問(wèn)題
如果我們將其看作是一個(gè)回歸問(wèn)題,則需要對(duì)(x,y,w,h)四個(gè)參數(shù)進(jìn)行預(yù)測(cè),從而得到方框所在位置。
步驟1
?
步驟2
?
步驟3
步驟4
接著,我們將進(jìn)行兩次微調(diào)操作。第一次在AlexNet上進(jìn)行,第二次將頭部改為回歸頭。
回歸部分加在哪里呢?
兩種解決辦法:
但是實(shí)現(xiàn)回歸操作太困難了,我們需要找到一種方法將其變?yōu)榉诸悊?wèn)題?;貧w的訓(xùn)練參數(shù)收斂的時(shí)間要長(zhǎng)得多,所以上面的網(wǎng)絡(luò)采取了用分類的網(wǎng)絡(luò)來(lái)計(jì)算網(wǎng)絡(luò)共同部分的連接權(quán)值。
取圖像窗口
?
左上角的黑框:得分0.5
右上角的黑框:得分0.75
左下角的黑框:得分0.6
右下角的黑框:得分0.8
根據(jù)這些得分,我們選擇右下角的黑框作為所要預(yù)測(cè)的目標(biāo)位置。
注:有的時(shí)候也會(huì)選擇得分最高的兩個(gè)方框,然后取兩個(gè)方框的交集作為最終需要預(yù)測(cè)的位置。
問(wèn)題:方框的大小如何確定呢?
當(dāng)取了不同的方框后,依次從左上角掃描到右下角。
總結(jié):
對(duì)第一張圖片,我們使用不同大小的方框(遍歷整張圖片)將圖片截取出來(lái),輸入到CNN,然后CNN會(huì)輸出這個(gè)框的分類以及這個(gè)框圖片對(duì)應(yīng)的(x,y,w,h)。
?
但是,這個(gè)方法太耗費(fèi)時(shí)間了,需要做一些優(yōu)化。最初的網(wǎng)絡(luò)模型如下圖所示:
?
所做優(yōu)化:將全連接層改為為卷積層以提高速度。
?
目標(biāo)檢測(cè)
當(dāng)圖中有多個(gè)物體存在的時(shí)候我們應(yīng)該如何做呢?現(xiàn)在我們所要解決的問(wèn)題就變成了:多個(gè)目標(biāo)識(shí)別+定位。
現(xiàn)在我們還能將其看作分類問(wèn)題么?
?
可是,將其看作分類問(wèn)題的話會(huì)有如下矛盾產(chǎn)生:
如果將其看作分類問(wèn)題,我們能做哪些優(yōu)化呢?我們并不想使用太多的方框在不同的位置間來(lái)回嘗試。下面,給出了一種解決方案:
首先,我們需要找出包含所有目標(biāo)的方框。其中有的方框會(huì)產(chǎn)生重疊或者互相包含,這樣我們就不用枚舉出所有的方框了。
?
對(duì)于候選框的獲取,前人發(fā)現(xiàn)了很多種方法:比如EdgeBoxes和Selective Search。以下是候選方框獲取方法的性能對(duì)比:
?
對(duì)于“選擇性搜索”是如何選出所有候選方框這個(gè)問(wèn)題,本文不作介紹,有興趣的可以對(duì)其相關(guān)論文進(jìn)行研究。
R-CNN
上述提及的思路推動(dòng)了R-CNN的面世。讓我們以同樣的圖片為例,對(duì)R-CNN進(jìn)行講解。
步驟1
下載一個(gè)分類模型(如AlexNet)
?
步驟2
對(duì)模型進(jìn)行微調(diào)
?
步驟3
特征提取:
?
步驟4
?
步驟5
使用回歸器對(duì)候選方框的位置進(jìn)行仔細(xì)校正。對(duì)于每一個(gè)分類,都需要訓(xùn)練一個(gè)線性回歸模型,用以判斷這個(gè)方框是否足夠匹配。
?
SPP Net
空間金字塔池化(SPP:Spatial Pyramid Pooling)概念的提出對(duì)R-CNN的發(fā)展有著非凡的意義。在此我們會(huì)對(duì)SPP進(jìn)行簡(jiǎn)明的介紹。
SPP有兩個(gè)特征:
1. 結(jié)合空間金字塔法,實(shí)現(xiàn)CNN的多尺度輸入
一般來(lái)說(shuō),在CNN后面會(huì)接有一個(gè)全連接層或者一個(gè)分類器。它們都需要調(diào)整至合適大小方可作為輸入,因此需要對(duì)輸入數(shù)據(jù)進(jìn)行分割和變形。然而,這些預(yù)處理可能會(huì)造成數(shù)據(jù)的丟失或幾何的失真。SPP Net的第一個(gè)貢獻(xiàn)就是將金字塔思想與CNN相結(jié)合,實(shí)現(xiàn)數(shù)據(jù)的多尺度輸入。
如下圖所示,在卷積層和全連接層之間加入一個(gè)SPP層。此時(shí),網(wǎng)絡(luò)的輸入尺度可以是任意的,在SPP層中,池化所需的過(guò)濾器會(huì)根據(jù)輸入自動(dòng)調(diào)節(jié)大小,但SPP的輸出尺度確實(shí)保持不變的。
?
2. 只對(duì)原始圖像提取一次卷積特征
在R-CNN中,每個(gè)候選框會(huì)將其尺寸調(diào)至統(tǒng)一,然后分別作為CNN的輸入,但這樣的做法降低了效率。SPP Net針對(duì)這個(gè)缺點(diǎn)做了相應(yīng)的優(yōu)化:只對(duì)原始圖像進(jìn)行一次卷積操作,得到特征圖,然后找到每個(gè)候選方框在特征圖上的映射,然后將該映射作為卷積特征輸入SPP層。這種優(yōu)化方法節(jié)約了大量的計(jì)算時(shí)間,相比 R-CNN快上百倍。
?
Fast R-CNN
SPP Net非常實(shí)用,有學(xué)者就在R-CNN的基礎(chǔ)上結(jié)合SPP Net,提出Fast R-CNN,進(jìn)一步提升了性能。
R-CNN與Fast R-CNN有什么區(qū)別呢?
首先,讓我們來(lái)看看R-CNN的不足之處。盡管它在提取潛在邊框作為輸入時(shí),使用了選擇性搜索以及其它處理方法,但是R-CNN在運(yùn)算速度上仍然遇到了瓶頸。這是由于計(jì)算機(jī)在對(duì)所有區(qū)域進(jìn)行特征提取時(shí)會(huì)進(jìn)行大量的重復(fù)計(jì)算。
為了解決這個(gè)問(wèn)題,研究學(xué)者提出了Fast R-CNN。
?
在Fast R-CNN中,有一個(gè)被稱為ROI Pooling的單層SPP網(wǎng)絡(luò)層。該網(wǎng)絡(luò)層能夠?qū)⒉煌叽绲妮斎胗成錇橐幌盗泄潭ǔ叨鹊奶卣飨蛄?#xff0c;正如我們所知,conv,pooling,relu以及一些其它操作并不需要固定尺度的輸入。因此,當(dāng)我們?cè)谠紙D片上執(zhí)行這些操作后,由于輸入圖片的尺寸不同,得到的特征圖尺寸也不一樣,不能將它們直接連接到一個(gè)全連接層上進(jìn)行分類,但是我們可以在其中加入ROI Pooling層,以一個(gè)固定尺度的特征來(lái)表示每個(gè)區(qū)域,再通過(guò)softmax進(jìn)行分類。
此外,前面所講的R-CNN需要先有一個(gè)proposal,再輸入到CNN中進(jìn)行特征提取,之后采用SVM進(jìn)行分類,最后進(jìn)行邊框回歸。但是在Fast R-CNN模型中,作者將邊框回歸引入神經(jīng)網(wǎng)絡(luò),并將其與區(qū)域分類合并,形成一個(gè)多任務(wù)模型。
實(shí)驗(yàn)證明,這兩個(gè)任務(wù)能夠共享卷積特征。Fast R-CNN的一個(gè)額外貢獻(xiàn)是使Region Proposal+CNN這一框架得以運(yùn)用,同時(shí)讓人們看到進(jìn)行多類檢測(cè)的同時(shí)仍保證精度是能夠?qū)崿F(xiàn)的。
R-CNN總結(jié):
很明顯,Fast R-CNN比R-CNN在速度上有了大幅提升;與R-CNN對(duì)每個(gè)候選方框輸入到CNN中提取特征不同的是,Fast R-CNN只對(duì)輸入的整張圖片提取一次特征,然后在第五個(gè)卷積層上提取每個(gè)候選方框的特征,此操作只需要計(jì)算一次特征,剩下的操作在第五個(gè)卷積層上完成即可。
性能的提升也十分明顯:
?
Faster R-CNN
毫無(wú)疑問(wèn),Fast R-CNN與傳統(tǒng)的CNN相比,在性能上有了大幅提升。但Fast R-CNN的一個(gè)主要問(wèn)題在于它使用選擇性搜索去找所有的候選方框,這是非常耗時(shí)的。
是否有更加高效的方法去找出所有的候選方框呢?
解決辦法:增加一個(gè)可以對(duì)邊緣進(jìn)行提取的神經(jīng)網(wǎng)絡(luò)。換句話說(shuō),利用神經(jīng)網(wǎng)絡(luò)去尋找所有的候選方框。能夠?qū)崿F(xiàn)這種操作的神經(jīng)網(wǎng)絡(luò)叫做區(qū)域生成網(wǎng)絡(luò)(RPN:Region Proposal Network)。
讓我們看看RPN有哪些提升:
?
RPN總結(jié):
?
四種損失函數(shù):
?
?
?
速度比較
Faster R-CNN的貢獻(xiàn)在于它設(shè)計(jì)了一個(gè)RPN網(wǎng)絡(luò)對(duì)候選區(qū)域進(jìn)行提取,此步驟代替了耗時(shí)過(guò)多的選擇性搜索,使速度得到大幅提升。
總結(jié)
總的來(lái)說(shuō),從R-CNN,SPP-NET,Fast R-CNN到R-CNN,基于深度學(xué)習(xí)進(jìn)行目標(biāo)檢測(cè)的步驟得到了簡(jiǎn)化,精度得到了提高,速度得到了提升??梢哉f(shuō),基于區(qū)域生成的系列R-CNN目標(biāo)檢測(cè)算法在目標(biāo)檢測(cè)領(lǐng)域已經(jīng)成為最主要的分支。
數(shù)十款阿里云產(chǎn)品限時(shí)折扣中,趕緊點(diǎn)擊領(lǐng)劵開(kāi)始云上實(shí)踐吧!
原文鏈接?
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的目标检测技术演化:从R-CNN到Faster R-CNN的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 你的专属云资源管家!阿里云正式对外发布云
- 下一篇: 阿里云携领先SDN能力,亮相全球网络技术