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