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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Light-Head R-CNN

發布時間:2025/3/20 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Light-Head R-CNN 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 論文信息
    • two-stage 檢測器的速度瓶頸
    • 網絡架構對比
    • 主干網絡 Backbone
    • Thin feature maps for RoI warping
    • RPN
    • Light-Head R-CNN 精度提升技巧
    • Light-Head R-CNN 速度提升技巧

論文信息

原文地址:Light-Head R-CNN: In Defense of Two-Stage Object Detector

代碼實現:地址

作者:Zeming Li,Chao Peng,Gang Yu,Xiangyu Zhang,Yangdong Deng,Jian Sun

two-stage 檢測器的速度瓶頸

目標檢測(detection)主要分為兩個流派,one-stage(SSD,YOLO系列等)和 two-stage(R-CNN系列等),前者速度快,后者精度高。

two-stage的檢測框架一般將任務分為兩步:

  • 第一步:產生足夠多的候選框(proposal),作者稱之為Body(檢測器體)

  • 第二步:對候選框進行識別,作者稱為Head(檢測器頭)

通常,想要取得最好的準確率,Head的設計一般比較 Heavy,就是計算量參數較多,計算量比較大。作者發現,像 Faster RCNN 和 R-FCN 都有共同點,就是有一個非常 Heavy 的 Head 接到主體框架上:

  • Faster RCNN 在對 ResNet 的 conv5 進行 ROI Pooling 后,接了兩個全連接層。由于 ROI Pooling 后的特征非常大,所以第一個 fc 層非常耗內存,并且影響速度。每個 Region Proposal 都要經過兩個 fc 層也導致計算量非常大。

  • 在 R-FCN中,雖然少了兩個全連接層,但是需要構建一個 Classes×p×pClasses×p×pClasses×p×p 大小的Score Map( ppp 為后接的池化層的大小),也是需要非常大的內存和計算量。

由于Faster R-CNN 和 R-FCN 的重頭設計,即使換用小的主干網絡,速度也很難有較大的提升,于是作者結合兩者優點,提出如下兩點改進:

  • 使用 Large Separable Convolution 來生成一個 “Thin” 的Score Map,Score Map只有 α×p×p\alpha×p×pα×p×p 通道。在論文中,作者用了 α=10\alpha=10α=10

  • 在 ROI Pooling 后接上一個全連接層。為什么要接上這個全連接層呢?因為原來的 R-FCN 的 Score Map 是 Classes×p×pClasses×p×pClasses×p×p 通道,正好對應 Classes 的預測,現在沒有這么多個通道了,沒辦法用原來的投票方法了,所以接上一個全連接層也是為了后面能夠接上 Faster R-CNN 的回歸和分類。

Light-Head R-CNN 與其他網絡的速度對比如下圖,主干網絡分別使用 (a small Xception like network,Resnet-50,Resnet-101):

網絡架構對比

作者將Light-Head R-CNN 與 Faster R-CNN 和 R-FCN 的架構進行了對比:

  • Faster R-CNN

Faster R-CNN 在 ROI Pooling 以后要對每個 ROI 進行計算,也就是 R-CNN subnet,這部分包括兩個 fc 層,且第一個 fc 層要全連接上一層的全部channel,使用 ResNet101 作為主干網絡時,在上一層有 2048 個channel,這個計算量就很大了,所以說 ROI-wise 部分的計算太重了。

  • R-FCN

R-FCN 為了對 ROI-wise subnet 進行加速,就采用了一種全卷積的策略。R-FCN 首先為每個 region 預測一個score maps,通道數是 classes×p×pclasses × p × pclasses×p×p(p是接下來的pooling形狀),接著是沿著每個 ROI 做pool,然后 average vote 最后的預測。

采用這種方式,R-CNN subnet 其實是沒有計算量的(但是效果上不如有 ROI-wise 的 Faster R-CNN),但是要為ROI pooling生成一個大的score map, 還是挺耗時的。

(圖中 CCC 表示物體檢測的類別數,+1+1+1 表示背景類。)

  • Light-Head R-CNN

Light-Head R-CNN結合了Faster R-CNN和R-FCN的優點:

  • 對 ResNet 卷積層中 conv5 的 2048 通道輸出,使用large separable convolution 降低特征圖(feature maps)厚度并簡化計算量,生成 “薄”的 thin feature map(α×p×p\alpha×p×pα×p×pα=10\alpha=10α=10),避免了 R-FCN feature map 太大,且隨類別數 CCC 增加而增大的問題。

  • 在 thin feature map 后面接 ROI Pooling,此時得到的 ROI-wise feature map 也薄,這樣后面再接 fc 層,此時的計算量就小了,避免了Faster R-CNN 在 R-CNN subnet 的第一個 fc 層計算量過大的問題。

  • Light-Head R-CNN 將原來 R-FCN 的 score map 的職責兩步化了:thin score map 主攻位置信息,R-CNN子網絡中的 fc 主攻分類信息。另外,global average pool 的操作被去掉,用于保持精度。

    主干網絡 Backbone

    在Head小了以后,Light-Head R-CNN就可以在速度和精度之間做權衡,可以選擇性地使用大的或者小的backbone網絡了。文章中給出了兩種設置:

    • “ L” 表示使用大的 backbone network,更注重精度。這里用的 L 網絡是resnet101。

    • “S” 表示使用小的 backbone network,更注重速度。這里用的 S 網絡是Xception-like model。

    Thin feature maps for RoI warping

    使用 large separable convolution,應該是借鑒了 Inception 3 的思想,用 1×k1×k1×kk×1k×1k×1 的兩層卷積來代替 k×kk×kk×k 的卷積核,其結構如下:

    其中 kernel 大小:k=15k=15k=15,很大,所以叫 large conv,這主要是為了保證不丟失太多精度。因為這一層之前的 feature map 有2048 channel,這一層只有 490 channel,這么多channel數的減少要通過 large conv 進行一定的補償。

    另外,separate conv 能夠減少計算量,Cmid=64(forS)/256(forL)Cmid=64 (for S) / 256 (for L)Cmid=64(forS)/256(forL)Cout=10×p×pCout=10×p×pCout=10×p×p,遠小于 R-FCN 的 classes?p?pclasses*p*pclasses?p?p

    RPN

    RPN 網絡用于生成候選區域(region proposals)。通過 softmax 判斷 anchors 屬于前景(foreground)或者背景(background),同時利用bounding box regression 修正 anchors 的偏移和縮放,獲得精確的proposals。

    Light-head R-CNN中使用RPN網絡生成候選區域,具體過程如下:

    • 3×33×33×3 卷積以及生成候選框(RoI):

      在Light-head R-CNN中,使用 Resnet 的 conv4 的輸出作為 RPN 的輸入特征圖,其維度是 14×14×102414×14×102414×14×1024。對特征圖進行 3×33×33×3 卷積,并對feature map 進行滑窗操作。

      當前滑窗的中心在原像素空間的映射點稱為 anchor,以此 anchor 為中心,可以得到 15 個候選框(proposals):

      • 使用 5 種面積尺寸(scales),即{ 322,642,1282,2562,512232^2, 64^2, 128^2, 256^2, 512^2322,642,1282,2562,5122 }

      • 在每個面積尺寸下,取 3 種不同的縱橫比(Aspect Ratios): { 1:1、1:2、2:11:1、1:2、2:11:11:22:1 }。

    • 以3×3卷積核的中心點,作為 anchor 的中心點,通過滑動窗口和 anchor 機制得到圖像的多尺度候選框。

    • 使用1×1卷積核,基于 anchor 種類數量進行卷積,得到所有 anchors 的foreground softmax scores 和 bounding box regression 偏移量。

    • 根據 bounding box regression 偏移量,獲取位置修正后的 anchors。

    • 按照 foreground softmax scores 由大到小排序 anchors,提取前 6000 個 foreground anchors。

    • 限定超出圖像邊界的 foreground anchors 為圖像邊界,防止后續 RoI Pooling 時 proposal 超出圖像邊界

    • 剔除非常小(width < threshold or height < threshold)的 foreground anchors。

    • 進行非最大抑制(non maximum suppression,NMS),其中 IOUthresh=0.7IOU thresh=0.7IOUthresh=0.7

    • 再次按照 NMS 后的 foreground softmax scores 由大到小排序foreground anchors,提取前 1000 個結果作為 proposal 輸出。

    Light-Head R-CNN 精度提升技巧

    為了提升算法精度,作者又加入了其他 trick,分別是:

    • 在 PSRoI pooling 中加入RoIAlign ( Mask-RCNN ) 中的插值技術,提升了1.7%.

    • 將NMS threshold從 0.3 改成 0.5 之后,提升了0.6%.

    • 使用 multi-scale 進行training,提升1%.

    Light-Head R-CNN 速度提升技巧

    為了平衡精度與速度,作者做了如下一些改變:

    • 用 tiny Xception 代替 Resnet-101.

    • 棄用 atrous algorithm.

    • 將 RPN channel 減少一半到256.

    • Large separable convolution: kernelsize=15,Cmid=64,Cout=490(10×7×7)kernel size = 15, Cmid = 64, Cout = 490(10×7×7)kernelsize=15,Cmid=64,Cout=49010×7×7.

    • 采用 PSPooling + RoI-align. 用 alignment 技術做了 RoI warping,它能減少被 pool 的 feature map通道[ k×kk × kk×k 倍,k是 pooling size],RoI-align能提升結果。

    采用上述trick之后,能夠在COCO上達到102FPS,同時達到30.7% mmAP的精度:

    作者的測試環境:The code is tested on a server with 8 Pascal Titian XP gpu, 188.00 GB memory, and 40 core cpu.

    總結

    以上是生活随笔為你收集整理的Light-Head R-CNN的全部內容,希望文章能夠幫你解決所遇到的問題。

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