1. 程式人生 > >Fast R-CNN論文詳解

Fast R-CNN論文詳解

廢話不多說,上車吧,少年


&創新點

  1. 規避R-CNN中冗餘的特徵提取操作,只對整張影象全區域進行一次特徵提取;

  2. 用RoI pooling層取代最後一層max pooling層,同時引入建議框資訊,提取相應建議框特徵;

  3. Fast R-CNN網路末尾採用並行的不同的全連線層,可同時輸出分類結果和視窗迴歸結果,實現了end-to-end的多工訓練【建議框提取除外】,也不需要額外的特徵儲存空間【R-CNN中這部分特徵是供SVM和Bounding-box regression進行訓練的】;

  4. 採用SVD對Fast R-CNN網路末尾並行的全連線層進行分解,減少計算複雜度,加快檢測速度。


&問題是什麼

  1. R-CNN網路訓練、測試速度都很慢:R-CNN網路中,一張圖經由selective search演算法提取約2k個建議框【這2k個建議框大量重疊】,而所有建議框變形後都要輸入AlexNet CNN網路提取特徵【即約2k次特徵提取】,會出現上述重疊區域多次重複提取特徵,提取特徵操作冗餘;

  2. R-CNN網路訓練、測試繁瑣:R-CNN網路訓練過程分為ILSVRC 2012樣本下有監督預訓練、PASCAL VOC 2007該特定樣本下的微調、20類即20個SVM分類器訓練、20類即20個Bounding-box 迴歸器訓練,該訓練流程繁瑣複雜;同理測試過程也包括提取建議框、提取CNN特徵、SVM分類和Bounding-box 迴歸等步驟,過於繁瑣;

  3. R-CNN網路訓練需要大量儲存空間:20類即20個SVM分類器和20類即20個Bounding-box 迴歸器在訓練過程中需要大量特徵作為訓練樣本,這部分從CNN提取的特徵會佔用大量儲存空間;

  4. R-CNN網路需要對建議框進行形變操作後【形變為227×227 size】再輸入CNN網路提取特徵,其實像AlexNet CNN等網路在提取特徵過程中對影象的大小並無要求,只是在提取完特徵進行全連線操作的時候才需要固定特徵尺寸【R-CNN中將輸入影象形變為227×227可正好滿足AlexNet CNN網路最後的特徵尺寸要求】,然後才使用SVM分類器分類,R-CNN需要進行形變操作的問題在Fast R-CNN已經不存在,具體見下。


&如何解決問題

。測試過程
Fast R-CNN的網路結構如下圖所示。

這裡寫圖片描述

  1. 任意size圖片輸入CNN網路,經過若干卷積層與池化層,得到特徵圖;

  2. 在任意size圖片上採用selective search演算法提取約2k個建議框;

  3. 根據原圖中建議框到特徵圖對映關係,在特徵圖中找到每個建議框對應的特徵框【深度和特徵圖一致】,並在RoI池化層中將每個特徵框池化到H×W【VGG-16網路是7×7】的size;

  4. 固定H×W【VGG-16網路是7×7】大小的特徵框經過全連線層得到固定大小的特徵向量;

  5. 第4步所得特徵向量經由各自的全連線層【由SVD分解實現】,分別得到兩個輸出向量:一個是softmax的分類得分,一個是Bounding-box視窗迴歸;

  6. 利用視窗得分分別對每一類物體進行非極大值抑制剔除重疊建議框,最終得到每個類別中迴歸修正後的得分最高的視窗。

。解釋分析

  1. 整個測試過程為什麼可以只進行一次CNN特徵提取操作?
    先看R-CNN網路,它首先採用selective search演算法提取約2k個建議框,並對所有建議框都進行了CNN特徵提取操作,會出現重疊區域多次重複提取特徵,這些操作非常耗時、耗空間。事實上我們並不需要對每個建議框都進行CNN特徵提取操作,只需要對原始的整張圖片進行1次CNN特徵提取操作即可,因為selective search演算法提取的建議框屬於整張圖片,因此對整張圖片提取出特徵圖後,再找出相應建議框在特徵圖中對應的區域,這樣就可以避免冗餘的特徵提取操作,節省大量時間。

  2. 為什麼要將每個建議框對應的特徵框池化到H×W 的size?如何實現?
    問題4中已經指出像AlexNet CNN等網路在提取特徵過程中對影象的大小並無要求,只是在提取完特徵進行全連線操作的時候才需要固定特徵尺寸,利用這一點,Fast R-CNN可輸入任意size圖片,並在全連線操作前加入RoI池化層,將建議框對應特徵圖中的特徵框池化到H×W 的size,以便滿足後續操作對size的要求;

    具體如何實現呢?
    首先假設建議框對應特徵圖中的特徵框大小為h×w,將其劃分H×W個子視窗,每個子視窗大小為h/H×w/W,然後對每個子視窗採用max pooling下采樣操作,每個子視窗只取一個最大值,則特徵框最終池化為H×W的size【特徵框各深度同理】,這將各個大小不一的特徵框轉化為大小統一的資料輸入下一層。

  3. 為什麼要採用SVD分解實現Fast R-CNN網路中最後的全連線層?具體如何實現?
    影象分類任務中,用於卷積層計算的時間比用於全連線層計算的時間多,而在目標檢測任務中,selective search演算法提取的建議框比較多【約2k】,幾乎有一半的前向計算時間被花費於全連線層,就Fast R-CNN而言,RoI池化層後的全連線層需要進行約2k次【每個建議框都要計算】,因此在Fast R-CNN中可以採用SVD分解加速全連線層計算;

    具體如何實現呢?
    ① 物體分類和視窗迴歸都是通過全連線層實現的,假設全連線層輸入資料為x,輸出資料為y,全連線層引數為W,尺寸為u×v,那麼該層全連線計算為:

    y=Wx

    計算複雜度為u×v;

    ② 若將W進行SVD分解,並用前t個特徵值近似代替,即:

    W=UVTU(u,1:t)(1:t,1:t)V(v,1:t)T

    那麼原來的前向傳播分解成兩步:

    y=Wx=U(VT)x=Uz

    計算複雜度為u×t+v×t,若t<min(u,v),則這種分解會大大減少計算量;

    在實現時,相當於把一個全連線層拆分為兩個全連線層,第一個全連線層不含偏置,第二個全連線層含偏置;實驗表明,SVD分解全連線層能使mAP只下降0.3%的情況下提升30%的速度,同時該方法也不必再執行額外的微調操作。

    這裡寫圖片描述

  4. 文中僅採用selective search演算法提取約2k個候選區域,那候選區域越多越好嗎?
    文中利用selective search演算法提取1k~10k中10種數目【1k,2k…】的候選區域進行訓練測試,發現隨著候選區域個數的增加,mAP成先增加後緩慢下滑的趨勢,這表明更多的候選區域會有損精度;與此同時,作者也做了召回率【所謂召回率即候選區域為真的視窗與Ground Truth的比值【IoU大於閾值即為真】】分析實驗,發現隨著候選區域個數的增加,召回率並沒有和mAP成很好的相關性,而是一直不斷增加,也就是說更高的召回率並不意味著更高的mAP;

    文中也以selective search演算法提取的2k個候選區域為基礎,每次增加1000 × {2, 4, 6, 8, 10, 32, 45}個密集box【滑動視窗方法】進行訓練測試,發現mAP比只有selective search方法的2k候選區域下降幅度更大,最終達到53%。

  5. 如何處理尺度不變性問題?即如何使24×24和1080×720的車輛同時在一個訓練好的網路中都能正確識別?
    文中提及兩種方式處理:brute-force(單一尺度)和image pyramids(多尺度)。單一尺度直接在訓練和測試階段將image定死為某種scale,直接輸入網路訓練就好,然後期望網路自己能夠學習到scale-invariance的表達;多尺度在訓練階段隨機從影象金字塔【縮放圖片的scale得到,相當於擴充資料集】中取樣訓練,測試階段將影象縮放為金字塔中最為相似的尺寸進行測試;

    可以看出,多尺度應該比單一尺度效果好。作者在5.2節對單一尺度和多尺度分別進行了實驗,不管哪種方式下都定義影象短邊畫素為s,單一尺度下s=600【維持長寬比進行縮放】,長邊限制為1000畫素;多尺度s={480,576,688,864,1200}【維持長寬比進行縮放】,長邊限制為2000畫素,生成影象金字塔進行訓練測試;實驗結果表明AlexNet【S for small】、VGG_CNN_M_1024【M for medium】下單一尺度比多尺度mAP差1.2%~1.5%,但測試時間上卻快不少,VGG-16【L for large】下僅單一尺度就達到了66.9%的mAP【由於GPU視訊記憶體限制多尺度無法實現】,該實驗證明了深度神經網路善於直接學習尺度不變形,對目標的scale不敏感。

  6. 為什麼不沿用R-CNN中的形式繼續採用SVM進行分類?
    為什麼R-CNN中採用SVM分類而不直接用CNN網路輸出端進行分類已經在R-CNN部落格中說明,針對Fast R-CNN,文中分別進行實驗並對比了採用SVM和採用softmax的mAP結果,不管AlexNet【S for small】、VGG_CNN_M_1024【M for medium】、VGG-16【L for large】中任意網路,採用softmax的mAP都比採用SVM的mAP高0.1%~0.8%,這是由於softmax在分類過程中引入了類間競爭,分類效果更好;

    Fast R-CNN去掉了SVM這一步,所有的特徵都暫存在視訊記憶體中,就不需要額外的磁碟空間。

。訓練過程

  1. 有監督預訓練

    樣本 來源
    正樣本 ILSVRC 20XX
    負樣本 ILSVRC 20XX


    ILSVRC 20XX樣本只有類別標籤,有1000種物體;
    文中採用AlexNet【S for small】、VGG_CNN_M_1024【M for medium】、VGG-16【L for large】這三種網路分別進行訓練測試,下面僅以VGG-16舉例。

  2. 特定樣本下的微調

    樣本 比例 來源
    正樣本 25% 與某類Ground Truth相交IoU∈[0.5,1]的候選框
    負樣本 75% 與20類Ground Truth相交IoU中最大值∈[0.1,0.5)的候選框


    PASCAL VOC資料集中既有物體類別標籤,也有物體位置標籤,有20種物體;
    正樣本僅表示前景,負樣本僅表示背景;
    迴歸操作僅針對正樣本進行;
    該階段訓練集擴充方式:50%概率水平翻轉;

    微調前,需要對有監督預訓練後的模型進行3步轉化:
    ①RoI池化層取代有監督預訓練後的VGG-16網路最後一層池化層;
    ②兩個並行層取代上述VGG-16網路的最後一層全連線層和softmax層,並行層之一是新全連線層1+原softmax層1000個分類輸出修改為21個分類輸出【20種類+背景】,並行層之二是新全連線層2+候選區域視窗迴歸層,如下圖所示;
    ③上述網路由原來單輸入:一系列影象修改為雙輸入:一系列影象和這些影象中的一系列候選區域;

    這裡寫圖片描述

    SGD超引數選擇
    除了修改增加的層,原有的層引數已經通過預訓練方式初始化;
    用於分類的全連線層以均值為0、標準差為0.01的高斯分佈初始化,用於迴歸的全連線層以均值為0、標準差為0.001的高斯分佈初始化,偏置都初始化為0;
    針對PASCAL VOC 2007和2012訓練集,前30k次迭代全域性學習率為0.001,每層權重學習率為1倍,偏置學習率為2倍,後10k次迭代全域性學習率更新為0.0001;
    動量設定為0.9,權重衰減設定為0.0005。

。解釋分析

  1. Fast R-CNN如何取樣進行SGD訓練,和R-CNN、SPPnet中SGD取樣方式有什麼區別和優勢?
    R-CNN和SPPnet中採用RoI-centric sampling:從所有圖片的所有候選區域中均勻取樣,這樣每個SGD的mini-batch中包含了不同影象的樣本,不同影象之間不能共享卷積計算和記憶體,運算開銷大;
    Fast R-CNN中採用image-centric sampling: mini-batch採用層次取樣,即先對影象取樣【N個】,再在取樣到的影象中對候選區域取樣【每個影象中取樣R/N個,一個mini-batch共計R個候選區域樣本】,同一影象的候選區域卷積共享計算和記憶體,降低了運算開銷;
    image-centric sampling方式取樣的候選區域來自於同一影象,相互之間存在相關性,可能會減慢訓練收斂的速度,但是作者在實際實驗中並沒有出現這樣的擔憂,反而使用N=2,R=128的RoI-centric sampling方式比R-CNN收斂更快。

    這裡解釋一下為什麼SPPnet不能更新spatial pyramid pooling層前面的卷積層,而只能更新後面的全連線層?
    博主沒有看過SPPnet的論文,有網友解釋說卷積特徵是線下計算的,從而無法在微調階段反向傳播誤差;另一種解釋是,反向傳播需要計算每一個RoI感受野的卷積層梯度,通常所有RoI會覆蓋整個影象,如果用RoI-centric sampling方式會由於計算too much整幅影象梯度而變得又慢又耗記憶體。

  2. 訓練資料越多效果越好嗎?

    實驗 訓練集 測試集 mAP
    實驗1 VOC 2007訓練集 VOC 2007測試集 66.9%
    實驗1 VOC 2007+VOC 2012訓練集 VOC 2007測試集 70.0%
    實驗2 VOC 2012訓練集 VOC 2010測試集 66.1%
    實驗2 VOC 2007+VOC 2012訓練集+VOC2007測試集 VOC 2010測試集 68.8%
    實驗3 VOC 2012訓練集 VOC 2012測試集 65.7%
    實驗3 VOC 2007+VOC 2012訓練集+VOC2007測試集 VOC 2012測試集 68.4%


    文中分別在VOC 2007、VOC 2010、VOC 2012測試集上測試,發現訓練資料越多,效果確實更好。這裡微調時採用100k次迭代,每40k次迭代學習率都縮小10倍。

  3. 哪些層引數需要被微調?
    SPPnet論文中採用ZFnet【AlexNet的改進版】這樣的小網路,其在微調階段僅對全連線層進行微調,就足以保證較高的精度,作者文中採用VGG-16【L for large】網路,若僅僅只對全連線層進行微調,mAP會從66.9%降低到61.4%, 所以文中也需要對RoI池化層之前的卷積層進行微調;

    那麼問題來了?向前微調多少層呢?所有的卷積層都需要微調嗎?
    作者經過實驗發現僅需要對conv3_1及以後卷積層【即9-13號卷積層】進行微調,才使得mAP、訓練速度、訓練時GPU佔用視訊記憶體三個量得以權衡;
    作者說明所有AlexNet【S for small】、VGG_CNN_M_1024【M for medium】的實驗結果都是從conv2往後微調,所有VGG-16【L for large】的實驗結果都是從conv3_1往後微調。

  4. Fast R-CNN如何進行多工訓練?多工訓練有效果嗎?
    Fast R-CNN網路分類損失和迴歸損失如下圖所示【僅針對一個RoI即一類物體說明】,黃色框表示訓練資料,綠色框表示輸入目標:

    這裡寫圖片描述

    -cls_score層用於分類,輸出K+1維陣列p,表示屬於K類物體和背景的概率;
    -bbox_predict層用於調整候選區域位置,輸出4*K維陣列,也就是說對於每個類別都會訓練一個單獨的迴歸器;
    -loss_cls層評估分類代價,由真實分類u對應的概率決定:

    Lcls(p,u)=logpu

    -loss_bbox評估迴歸損失代價,比較真實分類u對應的預測平移縮放參數tu=(tux,tuy,tuwtuh)和真實平移縮放參數v=(vx,vy,vw,vh)的差距:

    Lloc(tu,v)=i{x,y,w,h}smoothL1(tuivi) smoothL1(x)={0.5x2,|x|0.5,|x|<1otherwise

    smooth L1損失函式曲線如下圖所示,相比於L2損失函式,其對離群點、異常值不敏感,可控制梯度的量級使訓練時不容易跑飛;

這裡寫圖片描述

結合分類損失和迴歸損失,Fast R-CNN微調階段總的損失函式為:

L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v) [u1]={1,0,u>1otherwise

約定u=0為背景分類,那麼

相關推薦

Fast R-CNN論文

廢話不多說,上車吧,少年 &創新點 規避R-CNN中冗餘的特徵提取操作,只對整張影象全區域進行一次特徵提取; 用RoI pooling層取代最後一層max pooling層,同時引入建議框資訊,提取相應建議框特徵; Fast R-CNN網路

R-CNN論文(學習筆記)

R-CNN:基於候選區域的目標檢測 Region proposals 基本概念(看論文前需要掌握的): 1.cnn(卷積神經網路):CNN從入門到精通(初學者) 2.Selective search:選擇性搜素 3.warp:圖形region變換 4.Supervised pre-t

R-CNN論文

廢話不多說,上車吧,少年 &創新點 採用CNN網路提取影象特徵,從經驗驅動的人造特徵正規化HOG、SIFT到資料驅動的表示學習正規化,提高特徵對樣本的表示能力; 採用大樣本下有監督

Faster R-CNN論文

廢話不多說,上車吧,少年 &創新點 設計Region Proposal Networks【RPN】,利用CNN卷積操作後的特徵圖生成region proposals,代替了Selective Search、EdgeBoxes等方法,速度上提

Faster R-CNN目標檢測的實現過程

最大的 中心 width 小數據 等等 eat tar 優先 博文 本文詳細解釋了 Faster R-CNN 的網絡架構和工作流,一步步帶領讀者理解目標檢測的工作原理,作者本人也提供了 Luminoth 實現,供大家參考。 Luminoth 實現:h

Fast R-CNN論文學習

R-CNN論文學習 Abstract 1. Introduction 1.1 R-CNN 和 SPPnet R-CNN的問題 SPPnet的改進和問題 1.2 本論文的貢獻

Fast R-CNN論文筆記

本文分兩個部分,第一個部分是論文的筆記,第二個部分是結合程式碼來看fast-RCNN。 論文部分: 主要是為了對RCNN,SPPnet的效果上的改進,下面簡述了一些RCNN的缺點: Training is a multi-stage pipeline Training

Faster R-CNN網路的另一種優化思路:cascade R-CNN網路

論文:Cascade R-CNN: Delving into High Quality Object Detection 論文地址:https://arxiv.org/pdf/1712.00726.pdf Github專案地址:https://github.com/zhaoweicai/

R-CNN演算法

這是一篇比較早的Object Detection演算法,發表在2014年的CVPR,也是R-CNN系列演算法的開山之作,網上可以搜到很多相關的部落格講解,本篇博文沒有按論文順序來講述,而是結合自己經驗來看這個演算法,希望給初學者一個直觀的感受,細節方面不需要太糾

Face Paper: R-FCN論文

本篇部落格一方面介紹R-FCN演算法(NISP2016文章),該演算法改進了Faster RCNN,另一方面介紹其Caffe程式碼,這樣對演算法的認識會更加深入。要解決的問題:這篇論文提出一種基於region的object detection演算法:R-FCN(Region-

cascade R-CNN演算法

cascade R-CNN演算法詳解 演算法背景 問題 解決方案 演算法介紹 演算法結構 邊界框迴歸 分類 檢測質量 級聯損失函式 實驗

深度學習 + 論文Fast R-CNN 原理與優勢

論文連結p.s. 鑑於斯坦福大學公開課裡面模糊的 R-CNN 描述,這邊決定精讀對應的論文並把心得和摘要記錄於此。前言在機器視覺領域的物體識別分支中,有兩個主要的兩大難題需要解決:目標圖片裡面含了幾種“物體”,幾個“物體”?該些物體分別坐落於圖片的哪個位置?而 R-CNN 的

例項分割模型Mask R-CNN:從R-CNNFast R-CNN,Faster R-CNN再到Mask R-CNN

   Mask R-CNN是ICCV 2017的best paper,彰顯了機器學習計算機視覺領域在2017年的最新成果。在機器學習2017年的最新發展中,單任務的網路結構已經逐漸不再引人矚目,取而代之

論文閱讀筆記二十五:Fast R-CNN (ICCV2015)

  論文源址:https://arxiv.org/abs/1504.08083 參考部落格:https://blog.csdn.net/shenxiaolu1984/article/details/51036677 摘要        該文提出了一

論文筆記 《Fast R-CNN

轉載自http://zhangliliang.com/2015/05/17/paper-note-fast-rcnn/ R-CNN的進化版,0.3s一張圖片,VOC07有70的mAP,可謂又快又強。 而且rbg的程式碼一般寫得很好看,應該會是個很值得學習的專案。

論文筆記:目標檢測演算法(R-CNNFast R-CNN,Faster R-CNN,YOLOv1-v3)

R-CNN(Region-based CNN) motivation:之前的視覺任務大多數考慮使用SIFT和HOG特徵,而近年來CNN和ImageNet的出現使得影象分類問題取得重大突破,那麼這方面的成功能否遷移到PASCAL VOC的目標檢測任務上呢?基於這個問題,論文提出了R-CNN。 基本步驟:如下圖

論文翻譯】Fast R-CNN

Fast R-CNN Ross Girshick Microsoft Research [email protected] 摘要 本文提出了一種快速的基於區域的卷積網路方法(fast R-CNN)用於目標檢測。Fast R-CNN建立在以

[論文翻譯] Fast R-CNN

摘要 本文提出了一種快速的基於區域的卷積網路方法(fast R-CNN)用於目標檢測。Fast R-CNN建立在以前使用的深卷積網路有效地分類目標的成果上。相比於之前的成果,Fast R-CNN採用了多項創新提高訓練和測試速度來提高檢測精度。Fast R-CN

CVPR 2018 | 騰訊AI Lab入選21篇論文

騰訊 AI CVPR 近十年來在國際計算機視覺領域最具影響力、研究內容最全面的頂級學術會議CVPR,近日揭曉2018年收錄論文名單,騰訊AI Lab共有21篇論文入選,位居國內企業前列,我們將在下文進行詳解,歡迎交流與討論。 去年CVPR的論文錄取率為29%,騰訊AI Lab 共有6篇論文入選,點

Fast R-CNN(RoI)簡介

fas 兩張 The 獨立 gin 意思 需要 完整 鏡像   Fast R-CNN是一個基於區域的目標檢測算法。Fast R-CNN建立在先前的工作之上,並有效地使用卷積網絡分類目標建議框。與先前的工作相比,使用幾點創新改善了訓練和測試時間並增加了檢測準確率。 2. Fa