RCNN (論文:Rich feature hierarchies for accurate object detection and semantic segmentation) 是將CNN方法引入目標(biāo)檢測(cè)領(lǐng)域, 大大提高了目標(biāo)檢測(cè)效果梳庆,可以說(shuō)改變了目標(biāo)檢測(cè)領(lǐng)域的主要研究思路暖途, ( RCNN),Fast RCNN, Faster RCNN 代表該領(lǐng)域當(dāng)前最高水準(zhǔn)。
RCNN
https://github.com/rbgirshick/rcnn
Fast RCNN
https://github.com/rbgirshick/fast-rcnn
Faster RCNN
https://github.com/ShaoqingRen/faster_rcnn
【論文主要特點(diǎn)】(相對(duì)傳統(tǒng)方法的改進(jìn))
速度: 經(jīng)典的目標(biāo)檢測(cè)算法使用滑動(dòng)窗法依次判斷所有可能的區(qū)域膏执。本文則(采用Selective Search方法)預(yù)先提取一系列較可能是物體的候選區(qū)域驻售,之后僅在這些候選區(qū)域上(采用CNN)提取特征,進(jìn)行判斷更米。
訓(xùn)練集: 經(jīng)典的目標(biāo)檢測(cè)算法在區(qū)域中提取人工設(shè)定的特征欺栗。本文則采用深度網(wǎng)絡(luò)進(jìn)行特征提取。使用兩個(gè)數(shù)據(jù)庫(kù): 一個(gè)較大的識(shí)別庫(kù)(ImageNet ILSVC 2012):標(biāo)定每張圖片中物體的類別征峦。一千萬(wàn)圖像迟几,1000類。 一個(gè)較小的檢測(cè)庫(kù)(PASCAL VOC 2007):標(biāo)定每張圖片中栏笆,物體的類別和位置础芍,一萬(wàn)圖像刊殉,20類。 本文使用識(shí)別庫(kù)進(jìn)行預(yù)訓(xùn)練得到CNN(有監(jiān)督預(yù)訓(xùn)練)定庵,而后用檢測(cè)庫(kù)調(diào)優(yōu)參數(shù),最后在檢測(cè)庫(kù)上評(píng)測(cè)葛作。
看到這里也許你已經(jīng)對(duì)很多名詞很困惑,下面會(huì)解釋。先來(lái)看看它的基本流程:
【基本流程 ===================================】
RCNN算法分為4個(gè)步驟
候選區(qū)域生成: 一張圖像生成1K~2K個(gè)候選區(qū)域 (采用Selective Search 方法)
特征提炔旎: 對(duì)每個(gè)候選區(qū)域,使用深度卷積網(wǎng)絡(luò)提取特征 (CNN)
類別判斷: 特征送入每一類的SVM 分類器修肠,判別是否屬于該類
位置精修: 使用回歸器精細(xì)修正候選框位置
【基礎(chǔ)知識(shí) ===================================】
Selective Search 主要思想:
使用一種過(guò)分割手段贺辰,將圖像分割成小區(qū)域 (1k~2k 個(gè))
查看現(xiàn)有小區(qū)域,按照合并規(guī)則合并可能性最高的相鄰兩個(gè)區(qū)域嵌施。重復(fù)直到整張圖像合并成一個(gè)區(qū)域位置
輸出所有曾經(jīng)存在過(guò)的區(qū)域饲化,所謂候選區(qū)域
其中合并規(guī)則如下: 優(yōu)先合并以下四種區(qū)域:
顏色(顏色直方圖)相近的
紋理(梯度直方圖)相近的
合并后總面積小的: 保證合并操作的尺度較為均勻,避免一個(gè)大區(qū)域陸續(xù)“吃掉”其他小區(qū)域 (例:設(shè)有區(qū)域a-b-c-d-e-f-g-h吗伤。較好的合并方式是:ab-cd-ef-gh -> abcd-efgh -> abcdefgh吃靠。 不好的合并方法是:ab-c-d-e-f-g-h ->abcd-e-f-g-h ->abcdef-gh -> abcdefgh)
合并后,總面積在其BBOX中所占比例大的: 保證合并后形狀規(guī)則足淆。
上述四條規(guī)則只涉及區(qū)域的顏色直方圖巢块、梯度直方圖、面積和位置巧号。合并后的區(qū)域特征可以直接由子區(qū)域特征計(jì)算而來(lái)族奢,速度較快。
有監(jiān)督預(yù)訓(xùn)練與無(wú)監(jiān)督預(yù)訓(xùn)練:
(1)無(wú)監(jiān)督預(yù)訓(xùn)練(Unsupervised pre-training)
預(yù)訓(xùn)練階段的樣本不需要人工標(biāo)注數(shù)據(jù)丹鸿,所以就叫做無(wú)監(jiān)督預(yù)訓(xùn)練越走。
(2)有監(jiān)督預(yù)訓(xùn)練(Supervised pre-training)
所謂的有監(jiān)督預(yù)訓(xùn)練也可以把它稱之為遷移學(xué)習(xí)。比如你已經(jīng)有一大堆標(biāo)注好的人臉年齡分類的圖片數(shù)據(jù)靠欢,訓(xùn)練了一個(gè)CNN廊敌,用于人臉的年齡識(shí)別。然后當(dāng)你遇到新的項(xiàng)目任務(wù)時(shí):人臉性別識(shí)別门怪,那么這個(gè)時(shí)候你可以利用已經(jīng)訓(xùn)練好的年齡識(shí)別CNN模型骡澈,去掉最后一層,然后其它的網(wǎng)絡(luò)層參數(shù)就直接復(fù)制過(guò)來(lái)薪缆,繼續(xù)進(jìn)行訓(xùn)練秧廉,讓它輸出性別。這就是所謂的遷移學(xué)習(xí)拣帽,說(shuō)的簡(jiǎn)單一點(diǎn)就是把一個(gè)任務(wù)訓(xùn)練好的參數(shù)疼电,拿到另外一個(gè)任務(wù),作為神經(jīng)網(wǎng)絡(luò)的初始參數(shù)值,這樣相比于你直接采用隨機(jī)初始化的方法减拭,精度可以有很大的提高蔽豺。
對(duì)于目標(biāo)檢測(cè)問(wèn)題: 圖片分類標(biāo)注好的訓(xùn)練數(shù)據(jù)非常多,但是物體檢測(cè)的標(biāo)注數(shù)據(jù)卻很少拧粪,如何用少量的標(biāo)注數(shù)據(jù)修陡,訓(xùn)練高質(zhì)量的模型沧侥,這就是文獻(xiàn)最大的特點(diǎn),這篇論文采用了遷移學(xué)習(xí)的思想: 先用了ILSVRC2012這個(gè)訓(xùn)練數(shù)據(jù)庫(kù)(這是一個(gè)圖片分類訓(xùn)練數(shù)據(jù)庫(kù))魄鸦,先進(jìn)行網(wǎng)絡(luò)圖片分類訓(xùn)練宴杀。這個(gè)數(shù)據(jù)庫(kù)有大量的標(biāo)注數(shù)據(jù),共包含了1000種類別物體拾因,因此預(yù)訓(xùn)練階段CNN模型的輸出是1000個(gè)神經(jīng)元(當(dāng)然也直接可以采用Alexnet訓(xùn)練好的模型參數(shù))旺罢。
重疊度(IOU):
物體檢測(cè)需要定位出物體的bounding box,就像下面的圖片一樣绢记,我們不僅要定位出車輛的bounding box 我們還要識(shí)別出bounding box 里面的物體就是車輛扁达。
對(duì)于bounding box的定位精度,有一個(gè)很重要的概念: 因?yàn)槲覀兯惴ú豢赡馨俜职俑斯?biāo)注的數(shù)據(jù)完全匹配蠢熄,因此就存在一個(gè)定位精度評(píng)價(jià)公式:IOU跪解。 它定義了兩個(gè)bounding box的重疊度,如下圖所示
就是矩形框A签孔、B的重疊面積占A叉讥、B并集的面積比例。
非極大值抑制(NMS):
RCNN會(huì)從一張圖片中找出n個(gè)可能是物體的矩形框骏啰,然后為每個(gè)矩形框?yàn)樽鲱悇e分類概率:
就像上面的圖片一樣节吮,定位一個(gè)車輛抽高,最后算法就找出了一堆的方框判耕,我們需要判別哪些矩形框是沒(méi)用的。非極大值抑制的方法是:先假設(shè)有6個(gè)矩形框翘骂,根據(jù)分類器的類別分類概率做排序壁熄,假設(shè)從小到大屬于車輛的概率 分別為A、B碳竟、C草丧、D、E莹桅、F昌执。
(1)從最大概率矩形框F開(kāi)始,分別判斷A~E與F的重疊度IOU是否大于某個(gè)設(shè)定的閾值;
(2)假設(shè)B诈泼、D與F的重疊度超過(guò)閾值懂拾,那么就扔掉B、D铐达;并標(biāo)記第一個(gè)矩形框F岖赋,是我們保留下來(lái)的。
(3)從剩下的矩形框A瓮孙、C唐断、E中选脊,選擇概率最大的E,然后判斷E與A脸甘、C的重疊度恳啥,重疊度大于一定的閾值,那么就扔掉丹诀;并標(biāo)記E是我們保留下來(lái)的第二個(gè)矩形框角寸。
就這樣一直重復(fù),找到所有被保留下來(lái)的矩形框忿墅。
非極大值抑制(NMS)顧名思義就是抑制不是極大值的元素扁藕,搜索局部的極大值。這個(gè)局部代表的是一個(gè)鄰域疚脐,鄰域有兩個(gè)參數(shù)可變亿柑,一是鄰域的維數(shù),二是鄰域的大小棍弄。這里不討論通用的NMS算法望薄,而是用于在目標(biāo)檢測(cè)中用于提取分?jǐn)?shù)最高的窗口的。例如在行人檢測(cè)中呼畸,滑動(dòng)窗口經(jīng)提取特征痕支,經(jīng)分類器分類識(shí)別后,每個(gè)窗口都會(huì)得到一個(gè)分?jǐn)?shù)蛮原。但是滑動(dòng)窗口會(huì)導(dǎo)致很多窗口與其他窗口存在包含或者大部分交叉的情況卧须。這時(shí)就需要用到NMS來(lái)選取那些鄰域里分?jǐn)?shù)最高(是行人的概率最大),并且抑制那些分?jǐn)?shù)低的窗口儒陨。
VOC物體檢測(cè)任務(wù):
相當(dāng)于一個(gè)競(jìng)賽花嘶,里面包含了20個(gè)物體類別:PASCAL VOC2011 Example Images 還有一個(gè)背景,總共就相當(dāng)于21個(gè)類別蹦漠,因此一會(huì)設(shè)計(jì)fine-tuning CNN的時(shí)候椭员,我們softmax分類輸出層為21個(gè)神經(jīng)元。
【各個(gè)階段詳解 ===================================】
總體思路再回顧:
首先對(duì)每一個(gè)輸入的圖片產(chǎn)生近2000個(gè)不分種類的候選區(qū)域(region proposals)笛园,然后使用CNNs從每個(gè)候選框中提取一個(gè)固定長(zhǎng)度的特征向量(4096維度)隘击,接著對(duì)每個(gè)取出的特征向量使用特定種類的線性SVM進(jìn)行分類。也就是總個(gè)過(guò)程分為三個(gè)程序:a研铆、找出候選框埋同;b、利用CNN提取特征向量蚜印;c莺禁、利用SVM進(jìn)行特征向量分類。
候選框搜索階段:
當(dāng)我們輸入一張圖片時(shí)窄赋,我們要搜索出所有可能是物體的區(qū)域哟冬,這里采用的就是前面提到的Selective Search方法楼熄,通過(guò)這個(gè)算法我們搜索出2000個(gè)候選框。然后從上面的總流程圖中可以看到浩峡,搜出的候選框是矩形的可岂,而且是大小各不相同。然而CNN對(duì)輸入圖片的大小是有固定的翰灾,如果把搜索到的矩形選框不做處理缕粹,就扔進(jìn)CNN中,肯定不行纸淮。因此對(duì)于每個(gè)輸入的候選框都需要縮放到固定的大小平斩。下面我們講解要怎么進(jìn)行縮放處理,為了簡(jiǎn)單起見(jiàn)我們假設(shè)下一階段CNN所需要的輸入圖片大小是個(gè)正方形圖片227*227咽块。因?yàn)槲覀兘?jīng)過(guò)selective search 得到的是矩形框绘面,paper試驗(yàn)了兩種不同的處理方法:
(1)各向異性縮放
這種方法很簡(jiǎn)單,就是不管圖片的長(zhǎng)寬比例侈沪,管它是否扭曲揭璃,進(jìn)行縮放就是了,全部縮放到CNN輸入的大小227*227亭罪,如下圖(D)所示瘦馍;
(2)各向同性縮放
因?yàn)閳D片扭曲后,估計(jì)會(huì)對(duì)后續(xù)CNN的訓(xùn)練精度有影響应役,于是作者也測(cè)試了“各向同性縮放”方案情组。有兩種辦法
A、先擴(kuò)充后裁剪: 直接在原始圖片中扛吞,把bounding box的邊界進(jìn)行擴(kuò)展延伸成正方形呻惕,然后再進(jìn)行裁剪荆责;如果已經(jīng)延伸到了原始圖片的外邊界滥比,那么就用bounding box中的顏色均值填充;如上圖(B)所示;
B做院、先裁剪后擴(kuò)充:先把bounding box圖片裁剪出來(lái)盲泛,然后用固定的背景顏色填充成正方形圖片(背景顏色也是采用bounding box的像素顏色均值),如上圖(C)所示;
對(duì)于上面的異性、同性縮放键耕,文獻(xiàn)還有個(gè)padding處理寺滚,上面的示意圖中第1、3行就是結(jié)合了padding=0,第2屈雄、4行結(jié)果圖采用padding=16的結(jié)果村视。經(jīng)過(guò)最后的試驗(yàn),作者發(fā)現(xiàn)采用各向異性縮放酒奶、padding=16的精度最高蚁孔。
(備注:候選框的搜索策略作者也考慮過(guò)使用一個(gè)滑動(dòng)窗口的方法奶赔,然而由于更深的網(wǎng)絡(luò),更大的輸入圖片和滑動(dòng)步長(zhǎng)杠氢,使得使用滑動(dòng)窗口來(lái)定位的方法充滿了挑戰(zhàn)站刑。)
CNN特征提取階段:
1、算法實(shí)現(xiàn)
a鼻百、網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)階段
網(wǎng)絡(luò)架構(gòu)兩個(gè)可選方案:第一選擇經(jīng)典的Alexnet绞旅;第二選擇VGG16。經(jīng)過(guò)測(cè)試Alexnet精度為58.5%温艇,VGG16精度為66%因悲。VGG這個(gè)模型的特點(diǎn)是選擇比較小的卷積核、選擇較小的跨步勺爱,這個(gè)網(wǎng)絡(luò)的精度高囤捻,不過(guò)計(jì)算量是Alexnet的7倍。后面為了簡(jiǎn)單起見(jiàn)邻寿,我們就直接選用Alexnet蝎土,并進(jìn)行講解;Alexnet特征提取部分包含了5個(gè)卷積層绣否、2個(gè)全連接層誊涯,在Alexnet中p5層神經(jīng)元個(gè)數(shù)為9216、 f6蒜撮、f7的神經(jīng)元個(gè)數(shù)都是4096暴构,通過(guò)這個(gè)網(wǎng)絡(luò)訓(xùn)練完畢后,最后提取特征每個(gè)輸入候選框圖片都能得到一個(gè)4096維的特征向量段磨。
b取逾、網(wǎng)絡(luò)有監(jiān)督預(yù)訓(xùn)練階段 (圖片數(shù)據(jù)庫(kù):ImageNet ILSVC )
參數(shù)初始化部分:物體檢測(cè)的一個(gè)難點(diǎn)在于,物體標(biāo)簽訓(xùn)練數(shù)據(jù)少苹支,如果要直接采用隨機(jī)初始化CNN參數(shù)的方法砾隅,那么目前的訓(xùn)練數(shù)據(jù)量是遠(yuǎn)遠(yuǎn)不夠的。這種情況下债蜜,最好的是采用某些方法晴埂,把參數(shù)初始化了,然后在進(jìn)行有監(jiān)督的參數(shù)微調(diào)寻定,這里文獻(xiàn)采用的是有監(jiān)督的預(yù)訓(xùn)練儒洛。所以paper在設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)的時(shí)候,是直接用Alexnet的網(wǎng)絡(luò)狼速,然后連參數(shù)也是直接采用它的參數(shù)琅锻,作為初始的參數(shù)值,然后再fine-tuning訓(xùn)練。網(wǎng)絡(luò)優(yōu)化求解時(shí)采用隨機(jī)梯度下降法恼蓬,學(xué)習(xí)率大小為0.001沫浆;
C、fine-tuning階段 (圖片數(shù)據(jù)庫(kù): PASCAL VOC)
我們接著采用 selective search 搜索出來(lái)的候選框 (PASCAL VOC 數(shù)據(jù)庫(kù)中的圖片) 繼續(xù)對(duì)上面預(yù)訓(xùn)練的CNN模型進(jìn)行fine-tuning訓(xùn)練滚秩。假設(shè)要檢測(cè)的物體類別有N類专执,那么我們就需要把上面預(yù)訓(xùn)練階段的CNN模型的最后一層給替換掉,替換成N+1個(gè)輸出的神經(jīng)元(加1郁油,表示還有一個(gè)背景) (20 + 1bg = 21)本股,然后這一層直接采用參數(shù)隨機(jī)初始化的方法,其它網(wǎng)絡(luò)層的參數(shù)不變桐腌;接著就可以開(kāi)始繼續(xù)SGD訓(xùn)練了拄显。開(kāi)始的時(shí)候,SGD學(xué)習(xí)率選擇0.001案站,在每次訓(xùn)練的時(shí)候躬审,我們batch size大小選擇128,其中32個(gè)事正樣本蟆盐、96個(gè)事負(fù)樣本承边。
關(guān)于正負(fù)樣本問(wèn)題:
一張照片我們得到了2000個(gè)候選框。然而人工標(biāo)注的數(shù)據(jù)一張圖片中就只標(biāo)注了正確的bounding box石挂,我們搜索出來(lái)的2000個(gè)矩形框也不可能會(huì)出現(xiàn)一個(gè)與人工標(biāo)注完全匹配的候選框博助。因此在CNN階段我們需要用IOU為2000個(gè)bounding box打標(biāo)簽。如果用selective search挑選出來(lái)的候選框與物體的人工標(biāo)注矩形框(PASCAL VOC的圖片都有人工標(biāo)注)的重疊區(qū)域IoU大于0.5痹愚,那么我們就把這個(gè)候選框標(biāo)注成物體類別(正樣本)富岳,否則我們就把它當(dāng)做背景類別(負(fù)樣本)。
(備注: 如果不針對(duì)特定任務(wù)進(jìn)行fine-tuning拯腮,而是把CNN當(dāng)做特征提取器窖式,卷積層所學(xué)到的特征其實(shí)就是基礎(chǔ)的共享特征提取層,就類似于SIFT算法一樣动壤,可以用于提取各種圖片的特征萝喘,而f6、f7所學(xué)習(xí)到的特征是用于針對(duì)特定任務(wù)的特征狼电。打個(gè)比方:對(duì)于人臉性別識(shí)別來(lái)說(shuō)蜒灰,一個(gè)CNN模型前面的卷積層所學(xué)習(xí)到的特征就類似于學(xué)習(xí)人臉共性特征,然后全連接層所學(xué)習(xí)的特征就是針對(duì)性別分類的特征了)
2. 疑惑點(diǎn): CNN訓(xùn)練的時(shí)候肩碟,本來(lái)就是對(duì)bounding box的物體進(jìn)行識(shí)別分類訓(xùn)練,在訓(xùn)練的時(shí)候最后一層softmax就是分類層凸椿。那么為什么作者閑著沒(méi)事干要先用CNN做特征提认髌怼(提取fc7層數(shù)據(jù)),然后再把提取的特征用于訓(xùn)練svm分類器?
這個(gè)是因?yàn)閟vm訓(xùn)練和cnn訓(xùn)練過(guò)程的正負(fù)樣本定義方式各有不同髓抑,導(dǎo)致最后采用CNN softmax輸出比采用svm精度還低咙崎。事情是這樣的,cnn在訓(xùn)練的時(shí)候吨拍,對(duì)訓(xùn)練數(shù)據(jù)做了比較寬松的標(biāo)注褪猛,比如一個(gè)bounding box可能只包含物體的一部分,那么我也把它標(biāo)注為正樣本羹饰,用于訓(xùn)練cnn伊滋;采用這個(gè)方法的主要原因在于因?yàn)镃NN容易過(guò)擬合,所以需要大量的訓(xùn)練數(shù)據(jù)队秩,所以在CNN訓(xùn)練階段我們是對(duì)Bounding box的位置限制條件限制的比較松(IOU只要大于0.5都被標(biāo)注為正樣本了)笑旺;然而svm訓(xùn)練的時(shí)候,因?yàn)閟vm適用于少樣本訓(xùn)練馍资,所以對(duì)于訓(xùn)練樣本數(shù)據(jù)的IOU要求比較嚴(yán)格筒主,我們只有當(dāng)bounding box把整個(gè)物體都包含進(jìn)去了,我們才把它標(biāo)注為物體類別鸟蟹,然后訓(xùn)練svm乌妙,具體請(qǐng)看下文。
SVM訓(xùn)練建钥、測(cè)試階段
訓(xùn)練階段:
這是一個(gè)二分類問(wèn)題冠胯,我么假設(shè)我們要檢測(cè)車輛。我們知道只有當(dāng)bounding box把整量車都包含在內(nèi)锦针,那才叫正樣本荠察;如果bounding box 沒(méi)有包含到車輛,那么我們就可以把它當(dāng)做負(fù)樣本奈搜。但問(wèn)題是當(dāng)我們的檢測(cè)窗口只有部分包含物體悉盆,那該怎么定義正負(fù)樣本呢?作者測(cè)試了IOU閾值各種方案數(shù)值0,0.1,0.2,0.3,0.4,0.5馋吗。最后通過(guò)訓(xùn)練發(fā)現(xiàn)焕盟,如果選擇IOU閾值為0.3效果最好(選擇為0精度下降了4個(gè)百分點(diǎn),選擇0.5精度下降了5個(gè)百分點(diǎn)),即當(dāng)重疊度小于0.3的時(shí)候宏粤,我們就把它標(biāo)注為負(fù)樣本脚翘。一旦CNN f7層特征被提取出來(lái),那么我們將為每個(gè)物體類訓(xùn)練一個(gè)svm分類器绍哎。當(dāng)我們用CNN提取2000個(gè)候選框来农,可以得到2000*4096這樣的特征向量矩陣,然后我們只需要把這樣的一個(gè)矩陣與svm權(quán)值矩陣4096*N點(diǎn)乘(N為分類類別數(shù)目崇堰,因?yàn)槲覀冇?xùn)練的N個(gè)svm沃于,每個(gè)svm包含了4096個(gè)權(quán)值w)涩咖,就可以得到結(jié)果了。
得到的特征輸入到SVM進(jìn)行分類看看這個(gè)feature vector所對(duì)應(yīng)的region proposal是需要的物體還是無(wú)關(guān)的實(shí)物(background) 繁莹。 排序檩互,canny邊界檢測(cè)之后就得到了我們需要的bounding-box。
再回顧總結(jié)一下:整個(gè)系統(tǒng)分為三個(gè)部分:1.產(chǎn)生不依賴與特定類別的region proposals咨演,這些region proposals定義了一個(gè)整個(gè)檢測(cè)器可以獲得的候選目標(biāo)2.一個(gè)大的卷積神經(jīng)網(wǎng)絡(luò)闸昨,對(duì)每個(gè)region產(chǎn)生一個(gè)固定長(zhǎng)度的特征向量3.一系列特定類別的線性SVM分類器。
位置精修: 目標(biāo)檢測(cè)問(wèn)題的衡量標(biāo)準(zhǔn)是重疊面積:許多看似準(zhǔn)確的檢測(cè)結(jié)果薄风,往往因?yàn)楹蜻x框不夠準(zhǔn)確饵较,重疊面積很小。故需要一個(gè)位置精修步驟村刨。 回歸器:對(duì)每一類目標(biāo)告抄,使用一個(gè)線性脊回歸器進(jìn)行精修。正則項(xiàng)λ=10000嵌牺。 輸入為深度網(wǎng)絡(luò)pool5層的4096維特征打洼,輸出為xy方向的縮放和平移。 訓(xùn)練樣本:判定為本類的候選框中和真值重疊面積大于0.6的候選框逆粹。
測(cè)試階段:
使用selective search的方法在測(cè)試圖片上提取2000個(gè)region propasals 募疮,將每個(gè)region proposals歸一化到227x227,然后再CNN中正向傳播僻弹,將最后一層得到的特征提取出來(lái)阿浓。然后對(duì)于每一個(gè)類別,使用為這一類訓(xùn)練的SVM分類器對(duì)提取的特征向量進(jìn)行打分蹋绽,得到測(cè)試圖片中對(duì)于所有region proposals的對(duì)于這一類的分?jǐn)?shù)芭毙,再使用貪心的非極大值抑制(NMS)去除相交的多余的框。再對(duì)這些框進(jìn)行canny邊緣檢測(cè)卸耘,就可以得到bounding-box(then B-BoxRegression)退敦。
(非極大值抑制(NMS)先計(jì)算出每一個(gè)bounding box的面積,然后根據(jù)score進(jìn)行排序蚣抗,把score最大的bounding box作為選定的框侈百,計(jì)算其余bounding box與當(dāng)前最大score與box的IoU,去除IoU大于設(shè)定的閾值的bounding box翰铡。然后重復(fù)上面的過(guò)程钝域,直至候選bounding box為空,然后再將score小于一定閾值的選定框刪除得到這一類的結(jié)果(然后繼續(xù)進(jìn)行下一個(gè)分類)锭魔。作者提到花費(fèi)在region propasals和提取特征的時(shí)間是13s/張-GPU和53s/張-CPU例证,可以看出時(shí)間還是很長(zhǎng)的,不能夠達(dá)到及時(shí)性赂毯。
SPPNet-引入空間金字塔池化改進(jìn)RCNN
在RCNN中CNN階段的流程大致如下:
紅色框是selective search 輸出的可能包含物體的候選框(ROI)战虏。
一張圖圖片會(huì)有~2k個(gè)候選框拣宰,每一個(gè)都要單獨(dú)輸入CNN做卷積等操作很費(fèi)時(shí)党涕。SPP-net提出:能否在feature map上提取ROI特征烦感,這樣就只需要在整幅圖像上做一次卷積。
雖然總體流程還是 Selective Search得到候選區(qū)域->CNN提取ROI特征->類別判斷->位置精修膛堤,但是由于所有ROI的特征直接在feature map上提取手趣,大大減少了卷積操作,提高了效率肥荔。
有兩個(gè)難點(diǎn)要解決:
1. 原始圖像的ROI如何映射到特征圖(一系列卷積層的最后輸出)
2. ROI的在特征圖上的對(duì)應(yīng)的特征區(qū)域的維度不滿足全連接層的輸入要求怎么辦(又不可能像在原始ROI圖像上那樣進(jìn)行截取和縮放)绿渣?
【空間金字塔池化 (Spatial Pyramid Pooling)】
對(duì)于難點(diǎn)2我們分析一下:
這個(gè)問(wèn)題涉及的流程主要有: 圖像輸入->卷積層1->池化1->...->卷積層n->池化n->全連接層。
引發(fā)問(wèn)題的原因主要有:全連接層的輸入維度是固定死的燕耿,導(dǎo)致池化n的輸出必須與之匹配中符,繼而導(dǎo)致圖像輸入的尺寸必須固定。
不就是為了使一些列卷積層的最后輸出剛維度好是全連接層的輸入維度嗎誉帅?聰明的你有沒(méi)有好的解決辦法淀散?先思考幾秒鐘。
解決辦法可能有:
想辦法讓不同尺寸的圖像也可以使 池化n 產(chǎn)生固定的 輸出維度蚜锨。(打破圖像輸入的固定性)
想辦法讓全連接層(罪魁禍?zhǔn)祝┛梢越邮芊枪潭ǖ妮斎刖S度档插。(打破全連接層的固定性,繼而 也打破了圖像輸入的固定性)
其它方法(肯定不止這兩個(gè)解決辦法亚再,讀者有新想法歡迎交流)
以上的方法1就是SPPnet的思想郭膛。它在池化n 的地方做了一些手腳 (特殊池化手段:空間金字塔池化),使得 不同尺寸的圖像也可以使 池化n 產(chǎn)生固定的 輸出維度氛悬。
(至于方法2 其實(shí)就是全連接轉(zhuǎn)換為全卷積则剃,作用的效果等效為在原始圖像做滑窗,多個(gè)窗口并行處理如捅,具體方法日后在寫(xiě))
所謂空間金字塔池化就是沿著 金字塔的低端向頂端 一層一層做池化棍现。
假設(shè)原圖輸入是224x224,對(duì)于conv5出來(lái)后的輸出是13x13x256的伪朽,可以理解成有256個(gè)這樣的filter轴咱,每個(gè)filter對(duì)應(yīng)一張13x13的reponse map。如果像上圖那樣將reponse map分成1x1(金字塔底座)烈涮,2x2(金字塔中間)朴肺,4x4(金字塔頂座)三張子圖,分別做max pooling后坚洽,出來(lái)的特征就是(16+4+1)x256 維度戈稿。如果原圖的輸入不是224x224,出來(lái)的特征依然是(16+4+1)x256維度讶舰。這樣就實(shí)現(xiàn)了不管圖像尺寸如何 池化n 的輸出永遠(yuǎn)是 (16+4+1)x256 維度鞍盗。
實(shí)際運(yùn)用中只需要根據(jù)全連接層的輸入維度要求設(shè)計(jì)好空間金字塔即可需了。
【整幅圖像做一次卷積】
將conv5的pool層改為SPP之后就不必把每一個(gè)都ROI摳出來(lái)送給CNN做繁瑣的卷積了,整張圖像做卷積一次提取所有特征再交給SPP即可般甲。
R-CNN重復(fù)使用深層卷積網(wǎng)絡(luò)在~2k個(gè)窗口上提取特征肋乍,特征提取非常耗時(shí)。SPPNet將比較耗時(shí)的卷積計(jì)算對(duì)整幅圖像只進(jìn)行一次敷存,之后使用SPP將窗口特征圖池化為一個(gè)固定長(zhǎng)度的特征表示墓造。
via https://zhuanlan.zhihu.com/p/23006190?refer=xiaoleimlnote
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 不斷更新資源
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?搜索公眾號(hào)添加:?datayx
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?深度學(xué)習(xí)、機(jī)器學(xué)習(xí)锚烦、數(shù)據(jù)分析觅闽、python
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?長(zhǎng)按圖片,識(shí)別二維碼涮俄,點(diǎn)關(guān)注