日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

faster rcnn resnet_RCNN, Fast R-CNN 与 Faster RCNN理解及改进方法

發布時間:2025/3/11 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 faster rcnn resnet_RCNN, Fast R-CNN 与 Faster RCNN理解及改进方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

RCNN

這個網絡也是目標檢測的鼻祖了。其原理非常簡單,主要通過提取多個Region Proposal(候選區域)來判斷位置,作者認為以往的對每個滑動窗口進行檢測算法是一種浪費資源的方式。在RCNN中,不再對所有的滑動窗口跑算法,而是只選擇一些窗口,在少數窗口上運行CNN。

流程是:

  • 輸入圖像
  • 利用selective search對圖像生成1K~2K的候選區域(region proposal),這個量比傳統的算法要少得多。具體一點,選出region proposal的方法是運行圖像分割算法,對于分割算法跑出來的塊,把它作為可能的region proposal輸出。
  • 提取特征:將region proposal resize為統一大小,送進去掉了softmax的CNN,對每個候region proposal提取特征
  • 對區域進行分類:對從CNN output出來的特征向量送進每一類的SVM分類, 如果我有十個類別,那么每個region proposal要跑10個SVM,得到類別。這里為什么要用SVM而不是softmax,有一種說法是為了解決樣本不均衡的問題,另外是早期神經網絡還不如現在這樣發達,當時SVM還是比較領先的分類器。
  • 修正:對CNN output的特征向量(這個特征向量和第4步中拿去喂給SVM的是一個向量)做回歸(左上角右下角的四個坐標),修正region proposal的位置。
  • Fast R-CNN

    前面聊的這個RCNN吧,有幾點問題:

  • 可以明顯地感受到它的計算量是非常大的,畢竟要對每個候選區域都進行特征計算。
  • 冗余計算太多了,畢竟候選區域高度重疊。
  • 同時又不是端到端的訓練,還麻煩。
  • 內存占用:需要儲存多個SVM分類器和bounding box 回歸器
  • 對輸入圖片的大小有硬性要求
  • 這種情況下,二代目fast R-CNN出現了,它的流程是:

  • 將任意size的圖片輸入CNN,得到特征圖。在RCNN中,先生成region proposals再做卷積,相當于做了多次卷積,浪費時間。
  • 對原始圖片使用selective search算法得到約2k region proposals(相當于RCNN的第一步)
  • 在特征圖中找到每一個region proposals對應的特征框。在ROI池化層中將每個特征框池化到統一大小
  • 統一大小的特征框經過全連接層得到固定大小的特征向量,分別進行softmax分類(使用softmax代替了RCNN里面的多個SVM分類器)和bbox回歸
  • Fast R-CNN組合了classification和regression, 做成single Network,實現了端到端的訓練,實際上它相對RCNN最大的改進是拋棄了多個SVM分類器和bounding box回歸器的做法,一起輸出bbox和label, 很大程度上提升了原始RCNN的速度。

    這里出現了一個新的概念,ROI Polling,很重要,是考點,解釋一下:

    ROI Pooling(Region of Interest)

    它的輸入是特征圖,輸出則是大小固定的channel x H x W的vector。ROI Pooling是將一個個大小不同的region proposals,映射成大小固定的(W x H)的矩形框。它的作用是根據region proposals的位置坐標在特征圖中將相應區域池化為固定尺寸的特征圖,以便進行后續的分類和輸出回歸框操作。它可以加速處理速度。這個ROI Pooling在下面的Faster RCNN也會出現,它的作用是類似的,就是將region proposals池化成同樣大小的vector,便于傳入后續分類網絡。

    ROI Pooling有兩個輸入,一個是圖片進入CNN后的特征圖,另一個是區域的邊框。ROI 的輸出是一個region_nums x channels x W x H的向量。

    說到這里耶解釋一下ROI Pooling的進階版本ROI Align。

    ROI Pooling在池化的時候需要對浮點數邊界int化,這樣會存在一定的偏差。在特征圖比原始圖片尺寸小的情況下,一點點的精度損失映射到原始圖片上就存在很大的像素點差別。而ROI Align就是取消了取整的操作,使用雙線性內插的方法獲得坐標未浮點數的像素點上的圖像數值。

    Faster RCNN

    在Fast RCNN的基礎上,Faster RCNN在性能上又有了進步。Faster RCNN將特征抽取(feature extraction),proposal提取,bounding box regression,classification都整合在了一個網絡中,使得綜合性能有較大提高,在檢測速度方面尤為明顯。對比起它哥哥Fast-RCNN, 其實最重要的一點就是使用RPN(下面會詳細解說)來代替原來使用分割算法生成候選框的方式,極大的提升了檢測框生成速度。總地來說,Faster RCNN對Fast RCNN的改進點在于獲得region proposals的速度要快很多。

    具體來說,它的網絡結構長這樣:

  • 提取特征:輸入固定大小的圖片,進過卷積層提取特征圖feature maps
  • 生成region proposals: 然后經過Region Proposal Networks(RPN)生成region proposals。該層通過softmax判斷anchors屬于foreground或者background,再利用bounding box 回歸修正anchors獲得精確的proposals(候選區域)。
  • ROI Pooling: 該層的輸入是feature maps和proposals,綜合這些信息后提取proposal feature maps
  • Classification: 將Roi pooling生成的proposal feature maps分別傳入softmax分類和bounding box regression獲得檢測物體類別和檢測框最終的精確位置。
  • 具體一點的圖長這樣:

    Region Proposal Network(RPN)

    Faster-RCNN的巨大優勢主要在于第二步Region Proposal Networks(RPN)的設計。傳統的Selective Search方法生成檢測框都很耗時。而使用RPN生成就會快很多,我們來看看RPN的原理叭

    RPN的作用是用來提取候選框的,類似于前面介紹的RCNN的第一步Selective Search。它的網絡結構基于神經網絡,但是輸出的是包含二元softmax和bbox回歸的多任務模型。RPN網絡的輸入是前面CNN output的feature maps。我們在feature map上做一個大小為3x3的滑窗操作, 得到一個channel是256維的特征圖,尺寸與input的特征圖相同,維度是256*H*W。對這個256維的向量,我們分別做兩次1x1卷積操作,一個得到2k score, 一個得到4k coordinates。這個2k score只區分是不是目標,輸出候選區域屬于前景(物體)和背景的分數,這里注意,這里的分類只區分是否包含目標,至于所包含目標的類別,是Faster-RCNN最后的分類網絡干的事情。4k coordinates指的是對原圖坐標的偏移。

    那么這個k又是什么東西呀?這里有一個anchor的概念,也是RPN的核心之一。論文預先設定好生成9個anchors。我們前面說到對于feature map, 我們有一個3*3的滑窗操作。對于每次滑窗所劃到的3x3的區域,就以該區域中心點為坐標,生成9個anchor。anchor它的本質是,將相同尺寸的輸入,得到不同尺寸的輸出。它們的中心相同,但是有不同的長寬比和尺度。這9個anchor, 中心坐標一樣,但是大小各不相同,如下圖:

    而上文提到的k就是anchors的數量,所以2k個分數就是9個anchors的共18個分數,36個坐標。對于每個anchor, 計算anchor與ground-truth bounding boxes的IoU,大于0.7則判定為有目標,小于0.3則判定為背景,介于0.3-0.7,則設為0,不參與訓練

    這么說完可能還是有點模糊,我們來看看RPN的代價函數:

    代價函數有兩部分,對應著RPN的兩條路線,即是否包含目標和bbox的坐標與anchor坐標的回歸誤差。注意回歸誤差這一項中,L與p相稱,也就是說,如果anchor不包含目標,那么box輸出位置是不算誤差的,對于

    ,只計算 判定為有目標的anchor。總的來說 ,就是交叉熵,分類的損失; ,計算每個anchor分配的四個坐標和ground truth的坐標的偏移量,用的是L1范數。看一下pytorch的官方實現你就懂了:self

    插嘴一句,我們現在在做目標檢測基本是用YOLO了,賊快,Faster RCNN雖然已經Faster了還是YOLO快!當然region proposals的概念很值得了解,YOLO的缺點是在檢測小目標時難以得到精確的定位。

    Faster R_CNN改進方法

    Faster R-CNN從2015年被提出,后來也出現了不少改進方法,下面列舉一些方向,有興趣可以再去深入研究:

    • 提取特征網絡的改進:使用ResNet代替原來的VGG提取特征,效果顯著
    • RPN升級版本:FPN
    • ROI升級:PS_RPI
    • R-FCN
    • Mask R-CNN
    • DeepText
    • 訓練過程中的hard-example finetune,可參見:視覺分類任務中處理不平衡問題的loss比較 - Daniel2333的博客 - CSDN博客
    • A-Fast-RCNN, 這篇文章引入了GAN, 在某些數據集上精度增加

    參考文獻

    曉雷:RCNN- 將CNN引入目標檢測的開山之作

    最帥的大廚:RCNN-> SPP net -> Fast RCNN -> Faster RCNN

    Fast R-CNN論文詳解 - WoPawn的博客 - CSDN博客

    CNN目標檢測(一):Faster RCNN詳解

    RPN 解析 - lanran2的博客 - CSDN博客

    目標檢測 - Faster R-CNN 中 RPN 原理

    RPN 解析 - lanran2的博客 - CSDN博客

    目標檢測 - Faster R-CNN 中 RPN 原理

    Faster-RCNN算法精讀 - hunterlew的專欄 - CSDN博客

    詳解 ROI Align 的基本原理和實現細節

    Faster R-CNN 深入理解 && 改進方法匯總

    總結

    以上是生活随笔為你收集整理的faster rcnn resnet_RCNN, Fast R-CNN 与 Faster RCNN理解及改进方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。