faster rcnn resnet_RCNN, Fast R-CNN 与 Faster RCNN理解及改进方法
RCNN
這個網絡也是目標檢測的鼻祖了。其原理非常簡單,主要通過提取多個Region Proposal(候選區域)來判斷位置,作者認為以往的對每個滑動窗口進行檢測算法是一種浪費資源的方式。在RCNN中,不再對所有的滑動窗口跑算法,而是只選擇一些窗口,在少數窗口上運行CNN。
流程是:
Fast R-CNN
前面聊的這個RCNN吧,有幾點問題:
這種情況下,二代目fast R-CNN出現了,它的流程是:
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的速度要快很多。
具體來說,它的網絡結構長這樣:
具體一點的圖長這樣:
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理解及改进方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unsigned long long 溢
- 下一篇: 遵义大数据中心项目工程概况_中策大数据: