深度学习(十六)——Faster R-CNN, YOLO
https://antkillerfarm.github.io/
Fast R-CNN(續(xù))
ROI Pooling
SPP將圖像pooling成多個(gè)固定尺度,而RoI只將圖像pooling到單個(gè)固定的尺度。(雖然多尺度學(xué)習(xí)能提高一點(diǎn)點(diǎn)mAP,不過(guò)計(jì)算量成倍的增加。)
普通pooling操作中,pooling區(qū)域的大小一旦選定,就不再變化。
而ROI Pooling中,為了將ROI區(qū)域pooling到單個(gè)固定的目標(biāo)尺度,我們需要根據(jù)ROI區(qū)域和目標(biāo)尺度的大小,動(dòng)態(tài)計(jì)算pooling區(qū)域的大小。
ROI Pooling有兩個(gè)輸入:feature map和ROI區(qū)域。Pooling方式一般為Max Pooling。Pooling的kernel形狀可以不為正方形。
Bounding-box Regression
從Fast R-CNN的結(jié)構(gòu)圖可以看出,與一般的CNN不同,它在FC之后,實(shí)際上有兩個(gè)輸出層:第一個(gè)是針對(duì)每個(gè)ROI區(qū)域的分類概率預(yù)測(cè)(上圖中的Linear+softmax),第二個(gè)則是針對(duì)每個(gè)ROI區(qū)域坐標(biāo)的偏移優(yōu)化(上圖中的Linear)。
然后,這兩個(gè)輸出層(即兩個(gè)Task)再合并為一個(gè)multi-task,并定義統(tǒng)一的loss。
由于兩個(gè)Task的信息互為補(bǔ)充,使得分類預(yù)測(cè)任務(wù)的softmax準(zhǔn)確率大為提升,SVM也就沒(méi)有存在的必要了。
全連接層提速
Fast R-CNN的論文中還提到了全連接層提速的概念。這個(gè)概念本身和Fast R-CNN倒沒(méi)有多大關(guān)系。因此,完全可以將之推廣到其他場(chǎng)合。
它的主要思路是,在兩個(gè)大的FC層(假設(shè)尺寸為u、v)之間,利用SVD算法加入一個(gè)小的FC層(假設(shè)尺寸為t),從而減少了計(jì)算量。
u×v→u×t+t×v
總結(jié)
參考:
https://zhuanlan.zhihu.com/p/24780395
Fast R-CNN
http://blog.csdn.net/shenxiaolu1984/article/details/51036677
Fast RCNN算法詳解
Faster R-CNN
Faster-RCNN是任少卿2016年在MSRA提出的新算法。Ross Girshick和何愷明也是論文的作者之一。
注:任少卿,中科大本科(2011年)+博士(2016年)。Momenta聯(lián)合創(chuàng)始人+技術(shù)總監(jiān)。
個(gè)人主頁(yè):
http://shaoqingren.com/
論文:
《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》
代碼:
https://github.com/ShaoqingRen/faster_rcnn
https://github.com/rbgirshick/py-faster-rcnn
上圖是Faster R-CNN的結(jié)構(gòu)圖。
Fast R-CNN盡管已經(jīng)很優(yōu)秀了,然而還有一個(gè)最大的問(wèn)題在于:proposal階段沒(méi)有整合到CNN中。
這個(gè)問(wèn)題帶來(lái)了兩個(gè)不良影響:
1.非end-to-end模型導(dǎo)致程序流程比較復(fù)雜。
2.隨著后續(xù)CNN步驟的簡(jiǎn)化,生成2k個(gè)候選bbox的Selective Search算法成為了整個(gè)計(jì)算過(guò)程的性能瓶頸。(無(wú)法利用GPU)
Region Proposal Networks
Faster R-CNN最重要的改進(jìn)就是使用區(qū)域生成網(wǎng)絡(luò)(Region Proposal Networks)替換Selective Search。因此,faster RCNN也可以簡(jiǎn)單地看做是“RPN+fast RCNN”。
上圖是RPN的結(jié)構(gòu)圖。和SPPNet的ROI映射做法類似,RPN直接在feature map,而不是原圖像上,生成區(qū)域。
由于Faster R-CNN最后會(huì)對(duì)bbox位置進(jìn)行精調(diào),因此這里生成區(qū)域的時(shí)候,只要大致準(zhǔn)確即可。
由于CNN所生成的feature map的尺寸,通常小于原圖像。因此將feature map的點(diǎn)映射回原圖像,就變成了上圖所示的稀疏網(wǎng)點(diǎn)。這些網(wǎng)點(diǎn)也被稱為原圖感受野的中心點(diǎn)。
把網(wǎng)點(diǎn)當(dāng)成基準(zhǔn)點(diǎn),然后圍繞這個(gè)基準(zhǔn)點(diǎn)選取k個(gè)不同scale、aspect ratio的anchor。論文中用了3個(gè)scale(三種面積
{1282,2562,5212} ,如上圖的紅綠藍(lán)三色所示),3個(gè)aspect ratio({1:1,1:2,2:1},如上圖的同色方框所示)。anchor的后處理如上圖所示。
上圖展示了Image/Feature Pyramid、Filter Pyramid和Anchor Pyramid的區(qū)別。
定義損失函數(shù)
對(duì)于每個(gè)anchor,首先在后面接上一個(gè)二分類softmax(上圖左邊的Softmax),有2個(gè)score輸出用以表示其是一個(gè)物體的概率與不是一個(gè)物體的概率 (
pi )。這個(gè)概率也可以理解為前景與后景,或者物體和背景的概率。然后再接上一個(gè)bounding box的regressor輸出代表這個(gè)anchor的4個(gè)坐標(biāo)位置(
ti ),因此RPN的總體Loss函數(shù)可以定義為 :L({pi},{ti})=1Ncls∑iLcls(pi,p?i)+λ1Nreg∑ip?iLreg(ti,t?i)
該公式的含義和計(jì)算都比較復(fù)雜,這里不再贅述。
上圖中,二分類softmax前后各添加了一個(gè)reshape layer,是什么原因呢?
這與caffe的實(shí)現(xiàn)的有關(guān)。bg/fg anchors的矩陣,其在caffe blob中的存儲(chǔ)形式為[batch size, 2x9, H, W]。這里的2代表二分類,9是anchor的個(gè)數(shù)。因?yàn)檫@里的softmax只分兩類,所以在進(jìn)行計(jì)算之前需要將blob變?yōu)閇batch size, 2, 9xH, W]。之后再reshape回復(fù)原狀。
RPN和Fast R-CNN協(xié)同訓(xùn)練
我們知道,如果是分別訓(xùn)練兩種不同任務(wù)的網(wǎng)絡(luò)模型,即使它們的結(jié)構(gòu)、參數(shù)完全一致,但各自的卷積層內(nèi)的卷積核也會(huì)向著不同的方向改變,導(dǎo)致無(wú)法共享網(wǎng)絡(luò)權(quán)重,論文作者提出了幾種可能的方式。
Alternating training
此方法其實(shí)就是一個(gè)不斷迭代的訓(xùn)練過(guò)程,既然分別訓(xùn)練RPN和Fast-RCNN可能讓網(wǎng)絡(luò)朝不同的方向收斂:
a)那么我們可以先獨(dú)立訓(xùn)練RPN,然后用這個(gè)RPN的網(wǎng)絡(luò)權(quán)重對(duì)Fast-RCNN網(wǎng)絡(luò)進(jìn)行初始化并且用之前RPN輸出proposal作為此時(shí)Fast-RCNN的輸入訓(xùn)練Fast R-CNN。
b) 用Fast R-CNN的網(wǎng)絡(luò)參數(shù)去初始化RPN。之后不斷迭代這個(gè)過(guò)程,即循環(huán)訓(xùn)練RPN、Fast-RCNN。
Approximate joint training or Non-approximate training
這兩種方式,不再是串行訓(xùn)練RPN和Fast-RCNN,而是嘗試把二者融入到一個(gè)網(wǎng)絡(luò)內(nèi)訓(xùn)練。融合方式和上面的Faster R-CNN結(jié)構(gòu)圖類似。細(xì)節(jié)不再贅述。
4-Step Alternating Training
這是作者發(fā)布的源代碼中采用的方法。
第一步:用ImageNet模型初始化,獨(dú)立訓(xùn)練一個(gè)RPN網(wǎng)絡(luò);
第二步:仍然用ImageNet模型初始化,但是使用上一步RPN網(wǎng)絡(luò)產(chǎn)生的proposal作為輸入,訓(xùn)練一個(gè)Fast-RCNN網(wǎng)絡(luò),至此,兩個(gè)網(wǎng)絡(luò)每一層的參數(shù)完全不共享;
第三步:使用第二步的Fast-RCNN網(wǎng)絡(luò)參數(shù)初始化一個(gè)新的RPN網(wǎng)絡(luò),但是把RPN、Fast-RCNN共享的那些卷積層的learning rate設(shè)置為0,也就是不更新,僅僅更新RPN特有的那些網(wǎng)絡(luò)層,重新訓(xùn)練,此時(shí),兩個(gè)網(wǎng)絡(luò)已經(jīng)共享了所有公共的卷積層;
第四步:仍然固定共享的那些網(wǎng)絡(luò)層,把Fast-RCNN特有的網(wǎng)絡(luò)層也加入進(jìn)來(lái),形成一個(gè)unified network,繼續(xù)訓(xùn)練,fine tune Fast-RCNN特有的網(wǎng)絡(luò)層,此時(shí),該網(wǎng)絡(luò)已經(jīng)實(shí)現(xiàn)我們?cè)O(shè)想的目標(biāo),即網(wǎng)絡(luò)內(nèi)部預(yù)測(cè)proposal并實(shí)現(xiàn)檢測(cè)的功能。
總結(jié)
參考:
https://zhuanlan.zhihu.com/p/24916624
Faster R-CNN
http://blog.csdn.net/shenxiaolu1984/article/details/51152614
Faster RCNN算法詳解
https://mp.weixin.qq.com/s/VKQufVUQ3TP5m7_2vOxnEQ
通過(guò)Faster R-CNN實(shí)現(xiàn)當(dāng)前最佳的目標(biāo)計(jì)數(shù)
http://blog.csdn.net/zy1034092330/article/details/62044941
Faster RCNN詳解
https://mp.weixin.qq.com/s/IZ9Q3fDJVawiEbD6x9WRLg
Object Detection系列(三)Fast R-CNN
YOLO
YOLO: Real-Time Object Detection,是一個(gè)基于神經(jīng)網(wǎng)絡(luò)的實(shí)時(shí)對(duì)象檢測(cè)軟件。它的原理基于Joseph Chet Redmon 2016年的論文:
《You Only Look Once: Unified, Real-Time Object Detection》
這也是Ross Girshick去Facebook之后,參與的又一力作。
官網(wǎng):
https://pjreddie.com/darknet/yolo/
注:Joseph Chet Redmon,Middlebury College本科+華盛頓大學(xué)博士(在讀)。網(wǎng)名:pjreddie。
pjreddie不僅是個(gè)算法達(dá)人,也是個(gè)造輪子的高手。YOLO的原始代碼基于他本人編寫(xiě)的DL框架——darknet。
darknet代碼:
https://github.com/pjreddie/darknet/
YOLO的caffe版本有很多(當(dāng)然都是非官方的),這里推薦:
https://github.com/yeahkun/caffe-yolo
概述
從R-CNN到Fast R-CNN一直采用的思路是proposal+分類(proposal提供位置信息,分類提供類別信息),這也被稱作two-stage cascade。
YOLO不僅是end-to-end,而且還提供了另一種更為直接的思路:直接在輸出層回歸bounding box的位置和bounding box所屬的類別(整張圖作為網(wǎng)絡(luò)的輸入,把Object Detection的問(wèn)題轉(zhuǎn)化成一個(gè)Regression問(wèn)題)。
上圖是YOLO的大致流程:
Step 1:Resize成448x448,圖片分割得到7x7網(wǎng)格(cell)。
Step 2:CNN提取特征和預(yù)測(cè):卷積部分負(fù)責(zé)提特征。全連接部分負(fù)責(zé)預(yù)測(cè)。
a) 7x7x2=98個(gè)bounding box(bbox) 的坐標(biāo)
xcenter,ycenter,w,h 和是否有物體的confidence。b) 7x7=49個(gè)cell所屬20個(gè)物體分類的概率。
上圖是YOLO的網(wǎng)絡(luò)結(jié)構(gòu)圖,它采用經(jīng)過(guò)修改的GoogLeNet作為base CNN。
從表面看,YOLO的輸出只有一個(gè),似乎比Faster RCNN兩個(gè)輸出少一個(gè),然而這個(gè)輸出本身,實(shí)際上要復(fù)雜的多。
YOLO的輸出是一個(gè)7x7x30的tensor,其中7x7對(duì)應(yīng)圖片分割的7x7網(wǎng)格。30表明每個(gè)網(wǎng)格對(duì)應(yīng)一個(gè)30維的向量。
上圖是這個(gè)30維向量的編碼方式:2個(gè)bbox+confidence是5x2=10維,20個(gè)物體分類的概率占其余20維。
總結(jié)一下,輸出tersor的維度是:
S×S×(B×5+C)這里的confidence代表了所預(yù)測(cè)的box中含有object的置信度和這個(gè)box預(yù)測(cè)的有多準(zhǔn)兩重信息:
confidence=Pr(Object)?IOUtruthpred
在loss函數(shù)設(shè)計(jì)方面,簡(jiǎn)單的把結(jié)果堆在一起,然后認(rèn)為它們的重要程度都一樣,這顯然是不合理的,每個(gè)loss項(xiàng)之前的參數(shù)
λ 就是用來(lái)設(shè)定權(quán)重的。Step 3:過(guò)濾bbox(通過(guò)NMS)。
上圖是Test階段的NMS的過(guò)程示意圖。
參考
https://zhuanlan.zhihu.com/p/24916786
圖解YOLO
https://mp.weixin.qq.com/s/n51XtGAsaDDAatXYychXrg
YOLO比R-CNN快1000倍,比Fast R-CNN快100倍的實(shí)時(shí)對(duì)象檢測(cè)!
http://blog.csdn.net/tangwei2014/article/details/50915317
論文閱讀筆記:You Only Look Once: Unified, Real-Time Object Detection
https://mp.weixin.qq.com/s/Wqj6EM33p-rjPIHnFKtmCw
計(jì)算機(jī)是怎樣快速看懂圖片的:比R-CNN快1000倍的YOLO算法
http://lanbing510.info/2017/08/28/YOLO-SSD.html
目標(biāo)檢測(cè)之YOLO,SSD
http://www.yeahkun.com/2016/09/06/object-detection-you-only-look-once-caffe-shi-xian/
Object detection: You Look Only Once(YOLO)
http://blog.csdn.net/zy1034092330/article/details/72807924
YOLO
https://mp.weixin.qq.com/s/c9yagjJIe-m07twPvIoPJA
YOLO算法的原理與實(shí)現(xiàn)
總結(jié)
以上是生活随笔為你收集整理的深度学习(十六)——Faster R-CNN, YOLO的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 深度学习(十五)——SPPNet, Fa
- 下一篇: 深度学习(十七)——SSD, YOLOv