一强窖、R-CNN(2013)
Region CNN(簡(jiǎn)稱(chēng)R-CNN)由Ross Girshick在2013.11提出蜻韭,是利用深度學(xué)習(xí)進(jìn)行目標(biāo)檢測(cè)的里程碑之作白嘁,奠定了這個(gè)子領(lǐng)域的基礎(chǔ).
1.1 創(chuàng)新點(diǎn)
- 將大型卷積神經(jīng)網(wǎng)絡(luò)(CNNs)應(yīng)用于自下而上的候選區(qū)域以定位和分割物體但惶。
- 當(dāng)帶標(biāo)簽的訓(xùn)練數(shù)據(jù)不足時(shí)枷遂,先針對(duì)輔助任務(wù)進(jìn)行有監(jiān)督預(yù)訓(xùn)練,再進(jìn)行特定任務(wù)的調(diào)優(yōu)竞川,就可以產(chǎn)生明顯的性能提升店溢。
1.2 R-CNN檢測(cè)時(shí)的主要步驟為:
- 使用Selective Search算法從待檢測(cè)圖像中提取2000個(gè)左右的區(qū)域候選框,這些候選框可能包含要檢測(cè)的目標(biāo)委乌。
- 把所有侯選框縮放成固定大写材痢(原文采用227×227)。
- 先用ImageNet中的包含1000個(gè)分類(lèi)的數(shù)據(jù)初始化AlexNet網(wǎng)絡(luò)遭贸,得到較好的訓(xùn)練參數(shù)
- 將AlexNet最后一層換成21個(gè)節(jié)點(diǎn)戈咳,用VOC(20個(gè)分類(lèi))數(shù)據(jù)fine-tune
- 訓(xùn)練樣本輸入fine-tune后的網(wǎng)絡(luò),得到固定長(zhǎng)度的特征向量壕吹。
- 把特征向量送入SVM進(jìn)行分類(lèi)得到類(lèi)別信息著蛙,送入全連接網(wǎng)絡(luò)進(jìn)行回歸得到對(duì)應(yīng)位置坐標(biāo)信息。
1.3 缺點(diǎn)與不足
- 重復(fù)計(jì)算算利。R-CNN雖然不再是窮舉,但通過(guò)Proposal(Selective Search)的方案依然有兩千個(gè)左右的候選框泳姐,這些候選框都需要單獨(dú)經(jīng)過(guò)backbone網(wǎng)絡(luò)提取特征效拭,計(jì)算量依然很大,候選框之間會(huì)有重疊,因此有不少其實(shí)是重復(fù)計(jì)算缎患。
- 訓(xùn)練測(cè)試不簡(jiǎn)潔慕的。候選區(qū)域提取、特征提取挤渔、分類(lèi)肮街、回歸都是分開(kāi)操作,中間數(shù)據(jù)還需要單獨(dú)保存判导。
- 速度慢嫉父。前面的缺點(diǎn)最終導(dǎo)致R-CNN出奇的慢,GPU上處理一張圖片需要十幾秒眼刃,CPU上則需要更長(zhǎng)時(shí)間绕辖。
- 輸入的圖片Patch必須強(qiáng)制縮放成固定大小(原文采用227×227)擂红,會(huì)造成物體形變仪际,導(dǎo)致檢測(cè)性能下降。
二昵骤、SPP-NET(2014)
Kaiming He等人在R-CNN的基礎(chǔ)上提出了SPPNet树碱,該方法雖然還依賴候選框的生成,但將提取候選框特征向量的操作轉(zhuǎn)移到卷積后的特征圖上進(jìn)行变秦,將R-CNN中的多次卷積變?yōu)橐淮尉矸e成榜,大大降低了計(jì)算量。
2.1 創(chuàng)新點(diǎn)
- SPPNet引入了Spatial Pyramid pooling層
- 不用想R-CNN那樣對(duì)每一個(gè)候選區(qū)域(Proposal伴栓、ROI), 只需要對(duì)原始圖片做卷積伦连、池化操作。最后將ROI映射到最后的feature map
2.2 SPP-Net步驟
SPPNet 是R-CNN基礎(chǔ)上發(fā)展而來(lái)钳垮,所以基本思路惑淳、步驟是一樣的。不同之處就在上面提到的兩個(gè)創(chuàng)新點(diǎn)饺窿。對(duì)任意大小的圖片做卷積歧焦、池化操作得到最后的feature map。將ROI映射到feature map的區(qū)域肚医,那么就得到每一個(gè)ROI的feature map绢馍。用空間金字塔池化得到同樣大小的feature map。其他與R-CNN無(wú)異
2.3 Spatial Pyramid pooling
金字塔池化的操作示意圖如下
說(shuō)明:任意大小的圖片經(jīng)過(guò)卷積操作得到feature map(全連接層之前)肠套,對(duì)feature map以44網(wǎng)格舰涌,22網(wǎng)格屹篓,11網(wǎng)格進(jìn)行切分驱富,那么久分別得到16灸异、4、1個(gè)特征篷角,加起來(lái)就是21維特征卑吭,實(shí)際是21N維特征(N為feature map的深度)
2.3 缺點(diǎn)與不足
- spp 層不可導(dǎo)僚焦,導(dǎo)致分類(lèi)和主干網(wǎng)的訓(xùn)練是分開(kāi)的
- proposal region 和 后面的訓(xùn)練還是分開(kāi)的
三逼侦、Fast-CNN(2015)
Ross Girshick 針對(duì)SPPNet做了進(jìn)一步改進(jìn)提出的FRCNN ,其主要?jiǎng)?chuàng)新是RoI Pooling 層鸡典,它將不同大小候選框的卷積特征圖統(tǒng)一采樣成固定大小的特征源请。ROI池化層的做法和SPP層類(lèi)似,但只使用一個(gè)尺度進(jìn)行網(wǎng)格劃分和池化彻况。該層可以直接求導(dǎo)谁尸,訓(xùn)練時(shí)直接將梯度傳導(dǎo)到backbone網(wǎng)絡(luò)進(jìn)行優(yōu)化。FRCNN針對(duì)R-CNN和SPPNet在訓(xùn)練時(shí)是多階段的和訓(xùn)練的過(guò)程中很耗費(fèi)時(shí)間空間的問(wèn)題進(jìn)行改進(jìn)疗垛。將深度網(wǎng)絡(luò)和后面的SVM分類(lèi)兩個(gè)階段整合到一起症汹,使用一個(gè)新的網(wǎng)絡(luò)直接做分類(lèi)和回歸。使得網(wǎng)絡(luò)在Pascal VOC上的訓(xùn)練時(shí)間從R-CNN的84小時(shí)縮短到9.5小時(shí)贷腕,檢測(cè)時(shí)間更是從45秒縮短到0.32秒
3.1 創(chuàng)新點(diǎn)
- 引入ROI池化(與SPP一個(gè)意思)背镇,該層可以求導(dǎo),那么分類(lèi)任務(wù)就可以和主干網(wǎng)一起訓(xùn)練泽裳,不用像Spp-Net和R-CNN那樣用svm用來(lái)分類(lèi)瞒斩,DCNN用到特征向量(兩步是分開(kāi)的)
- SVD代替全連接層, 提高速度
3.2 Fast-CNN 步驟
- Fast RCNN仍然使用selective search選取2000個(gè)建議框涮总,但是這里不是將這么多建議框都輸入卷積網(wǎng)絡(luò)中胸囱,而是將原始圖片輸入卷積網(wǎng)絡(luò)中得到特征圖,再使用建議框?qū)μ卣鲌D提取特征框瀑梗。這樣做的好處是烹笔,原來(lái)建議框重合部分非常多,卷積重復(fù)計(jì)算嚴(yán)重抛丽,而這里每個(gè)位置都只計(jì)算了一次卷積谤职,大大減少了計(jì)算量
- 由于建議框大小不一,得到的特征框需要轉(zhuǎn)化為相同大小亿鲜,這一步是通過(guò)ROI池化層來(lái)實(shí)現(xiàn)的(ROI表示region of interest即目標(biāo))
- Fast RCNN里沒(méi)有SVM分類(lèi)器和回歸器了允蜈,分類(lèi)和預(yù)測(cè)框的位置大小都是通過(guò)卷積神經(jīng)網(wǎng)絡(luò)輸出的
- 為了提高計(jì)算速度,網(wǎng)絡(luò)最后使用SVD代替全連接層
3.3 缺點(diǎn)與不足
proposal region 和 后面的訓(xùn)練還是分開(kāi)的
四蒿柳、Faster-CNN(2015)
SPPNet和Faster RCNN都需要獨(dú)立的候選區(qū)域生成模塊饶套,這個(gè)模塊計(jì)算量很大,而且不易用GPU加速垒探。針對(duì)這個(gè)問(wèn)題妓蛮,Shaoqin Ren 等人在Faster RCNN基礎(chǔ)上提出Faster R-CNN ,在主干網(wǎng)絡(luò)中增加了RPN (Region Proposal Network)網(wǎng)絡(luò)圾叼,通過(guò)一定規(guī)則設(shè)置不同尺度的錨點(diǎn)(Anchor)在RPN的卷積特征層提取候選框來(lái)代替Selective Search等傳統(tǒng)的候選框生成方法蛤克,實(shí)現(xiàn)了網(wǎng)絡(luò)的端到端訓(xùn)練扔仓。候選區(qū)域生成、候選區(qū)域特征提取咖耘、框回歸和分類(lèi)全過(guò)程一氣呵成,在訓(xùn)練過(guò)程中模型各部分不僅學(xué)習(xí)如何完成自己的任務(wù)撬码,還自主學(xué)習(xí)如何相互配合儿倒。這也是第一個(gè)真正意義上的深度學(xué)習(xí)目標(biāo)檢測(cè)算法
4.1 創(chuàng)新點(diǎn)
- 主干網(wǎng)絡(luò)中增加了RPN (Region Proposal Network)網(wǎng)絡(luò),通過(guò)一定規(guī)則設(shè)置不同尺度的錨點(diǎn)(Anchor)在RPN的卷積特征層提取候選框來(lái)代替Selective Search等傳統(tǒng)的候選框生成方法
- 正正的實(shí)現(xiàn)了網(wǎng)絡(luò)的端到端訓(xùn)練
五呜笑、原始圖片中的ROI如何映射到到feature map
SPP-Net和Fast-RCNN中都需要將ROI(Region of interest)區(qū)域映射到feature map區(qū)域夫否,這樣就不需要對(duì)每一個(gè)候選框都做很多層的卷積運(yùn)算,特別的候選框中很多都是重疊的叫胁,導(dǎo)致了很多的運(yùn)算都是重復(fù)運(yùn)算凰慈。所以能不能只對(duì)原始圖片做一個(gè)周期的卷積運(yùn)算,然后直接將ROI映射到feature map呢?Kaiming He大神團(tuán)隊(duì)給出了答案驼鹅,是可以的微谓。那么如何映射呢?請(qǐng)看下面分解输钩。
5.1 感受野(receptive field)
在卷積神經(jīng)網(wǎng)絡(luò)中豺型,感受野的定義是 卷積神經(jīng)網(wǎng)絡(luò)每一層輸出的特征圖(feature map)上的像素點(diǎn)在原始圖像上映射的區(qū)域大小。下圖是Kaiming He在iccv分享上的一張圖片买乃。
5.1.1 感受野大小計(jì)算
卷積核一般都是正方形的姻氨,所以我們以一個(gè)維度為例。
以上圖為例剪验,在第4層的一個(gè)feature 在第一層的感受野的大小是多少肴焊?先給出公式
-
對(duì)于Convolution/Pooling layer:
image.png
image.png - 對(duì)于Neuron layer(ReLU/Sigmoid/…)
image.png
我們用上面公式計(jì)算一下:
r4 = 1 (自已只能感受到自已)
r3 = s3(r4-1)+k3 = 1 * (1 - 1) + 2 = 2
r2 = s2(r3-1)+k2 = 2 * (2 - 1) + 3 = 5
r1 = s1(r2-1)+k1 = 2 * (5 - 1) + 3 = 11
所以對(duì)于第4層的一個(gè)像素點(diǎn),在第一層的感受的大小為11(實(shí)際為11 * 11)
上面的方法是從下往上計(jì)算的功戚,這篇blog中還提供了一種從上往下的計(jì)算方式娶眷,作者列子寫(xiě)的很詳細(xì),大家也可以看下疫铜,只能給出作者提供的公式如下:
image.png
兩個(gè)方式我覺(jué)得大家都應(yīng)該好好理解一下茂浮,對(duì)感受野的理解甚至對(duì)神經(jīng)網(wǎng)絡(luò)的理解都會(huì)很有幫助
5.1.2 感受野坐標(biāo)計(jì)算
通常,我們需要知道網(wǎng)絡(luò)里面任意兩個(gè)feature map之間的坐標(biāo)映射關(guān)系(一般是中心點(diǎn)之間的映射)壳咕,如下圖席揽,我們想得到map 3上的點(diǎn)p3映射回map 2所在的位置p2(橙色框的中心點(diǎn))
先給出計(jì)算公式:
上面是計(jì)算任意一個(gè)layer輸入輸出的坐標(biāo)映射關(guān)系,如果是計(jì)算任意feature map之間的關(guān)系谓厘,只需要用簡(jiǎn)單的組合就可以得到幌羞,下圖是一個(gè)簡(jiǎn)單的例子:
上面的給出的公式是從feature map 計(jì)算感受野的,但是在Spp-Net 和 Fast-Rcnn中都需要將ROI映射到feature map竟稳。那我們把上面的公式反過(guò)來(lái)就可以属桦,已知p(i)坐標(biāo)(ROI四個(gè)角點(diǎn))求p(i+1)坐標(biāo)熊痴。
何凱明在SPP-net中采用的方法。其實(shí)就是巧妙的化簡(jiǎn)一下上面的公式 聂宾。做法如下:
5.1.2.1 SPP-net的ROI映射做法詳解原博客地址
SPP-net 是把原始ROI的左上角和右下角 映射到 feature map上的兩個(gè)對(duì)應(yīng)點(diǎn)果善。 有了feature map上的兩隊(duì)角點(diǎn)就確定了 對(duì)應(yīng)的 feature map 區(qū)域(下圖中橙色)。
SPP-net 是把原始ROI的左上角和右下角 映射到 feature map上的兩個(gè)對(duì)應(yīng)點(diǎn)系谐。 有了feature map上的兩隊(duì)角點(diǎn)就確定了 對(duì)應(yīng)的 feature map 區(qū)域(下圖中橙色)巾陕。
這篇文章參考了很多其他的博客,特別是一些圖和公式纪他,所參考的資料都在下面的參考文獻(xiàn)中一一列出鄙煤。很多博客寫(xiě)的真的很詳細(xì),所以大家對(duì)同一個(gè)問(wèn)題茶袒,不妨多參考一些文章梯刚。
參考文獻(xiàn)
基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法綜述
目標(biāo)檢測(cè)最新研究、論文匯總
目標(biāo)檢測(cè)綜述(持續(xù)更新中)
深度神經(jīng)網(wǎng)絡(luò)中感受野
Convolutional Feature Maps-Kaiming He
原始圖片中的ROI如何映射到到feature map
Concepts and Tricks In CNN(長(zhǎng)期更新)
深度神經(jīng)網(wǎng)絡(luò)中的感受野(Receptive Field)