faster rcnn resnet_RCNN, Fast R-CNN 与 Faster RCNN理解及改进方法
RCNN
這個(gè)網(wǎng)絡(luò)也是目標(biāo)檢測(cè)的鼻祖了。其原理非常簡(jiǎn)單,主要通過提取多個(gè)Region Proposal(候選區(qū)域)來判斷位置,作者認(rèn)為以往的對(duì)每個(gè)滑動(dòng)窗口進(jìn)行檢測(cè)算法是一種浪費(fèi)資源的方式。在RCNN中,不再對(duì)所有的滑動(dòng)窗口跑算法,而是只選擇一些窗口,在少數(shù)窗口上運(yùn)行CNN。
流程是:
Fast R-CNN
前面聊的這個(gè)RCNN吧,有幾點(diǎn)問題:
這種情況下,二代目fast R-CNN出現(xiàn)了,它的流程是:
Fast R-CNN組合了classification和regression, 做成single Network,實(shí)現(xiàn)了端到端的訓(xùn)練,實(shí)際上它相對(duì)RCNN最大的改進(jìn)是拋棄了多個(gè)SVM分類器和bounding box回歸器的做法,一起輸出bbox和label, 很大程度上提升了原始RCNN的速度。
這里出現(xiàn)了一個(gè)新的概念,ROI Polling,很重要,是考點(diǎn),解釋一下:
ROI Pooling(Region of Interest)
它的輸入是特征圖,輸出則是大小固定的channel x H x W的vector。ROI Pooling是將一個(gè)個(gè)大小不同的region proposals,映射成大小固定的(W x H)的矩形框。它的作用是根據(jù)region proposals的位置坐標(biāo)在特征圖中將相應(yīng)區(qū)域池化為固定尺寸的特征圖,以便進(jìn)行后續(xù)的分類和輸出回歸框操作。它可以加速處理速度。這個(gè)ROI Pooling在下面的Faster RCNN也會(huì)出現(xiàn),它的作用是類似的,就是將region proposals池化成同樣大小的vector,便于傳入后續(xù)分類網(wǎng)絡(luò)。
ROI Pooling有兩個(gè)輸入,一個(gè)是圖片進(jìn)入CNN后的特征圖,另一個(gè)是區(qū)域的邊框。ROI 的輸出是一個(gè)region_nums x channels x W x H的向量。
說到這里耶解釋一下ROI Pooling的進(jìn)階版本ROI Align。
ROI Pooling在池化的時(shí)候需要對(duì)浮點(diǎn)數(shù)邊界int化,這樣會(huì)存在一定的偏差。在特征圖比原始圖片尺寸小的情況下,一點(diǎn)點(diǎn)的精度損失映射到原始圖片上就存在很大的像素點(diǎn)差別。而ROI Align就是取消了取整的操作,使用雙線性內(nèi)插的方法獲得坐標(biāo)未浮點(diǎn)數(shù)的像素點(diǎn)上的圖像數(shù)值。
Faster RCNN
在Fast RCNN的基礎(chǔ)上,Faster RCNN在性能上又有了進(jìn)步。Faster RCNN將特征抽取(feature extraction),proposal提取,bounding box regression,classification都整合在了一個(gè)網(wǎng)絡(luò)中,使得綜合性能有較大提高,在檢測(cè)速度方面尤為明顯。對(duì)比起它哥哥Fast-RCNN, 其實(shí)最重要的一點(diǎn)就是使用RPN(下面會(huì)詳細(xì)解說)來代替原來使用分割算法生成候選框的方式,極大的提升了檢測(cè)框生成速度。總地來說,Faster RCNN對(duì)Fast RCNN的改進(jìn)點(diǎn)在于獲得region proposals的速度要快很多。
具體來說,它的網(wǎng)絡(luò)結(jié)構(gòu)長(zhǎng)這樣:
具體一點(diǎn)的圖長(zhǎng)這樣:
Region Proposal Network(RPN)
Faster-RCNN的巨大優(yōu)勢(shì)主要在于第二步Region Proposal Networks(RPN)的設(shè)計(jì)。傳統(tǒng)的Selective Search方法生成檢測(cè)框都很耗時(shí)。而使用RPN生成就會(huì)快很多,我們來看看RPN的原理叭
RPN的作用是用來提取候選框的,類似于前面介紹的RCNN的第一步Selective Search。它的網(wǎng)絡(luò)結(jié)構(gòu)基于神經(jīng)網(wǎng)絡(luò),但是輸出的是包含二元softmax和bbox回歸的多任務(wù)模型。RPN網(wǎng)絡(luò)的輸入是前面CNN output的feature maps。我們?cè)趂eature map上做一個(gè)大小為3x3的滑窗操作, 得到一個(gè)channel是256維的特征圖,尺寸與input的特征圖相同,維度是256*H*W。對(duì)這個(gè)256維的向量,我們分別做兩次1x1卷積操作,一個(gè)得到2k score, 一個(gè)得到4k coordinates。這個(gè)2k score只區(qū)分是不是目標(biāo),輸出候選區(qū)域?qū)儆谇熬?#xff08;物體)和背景的分?jǐn)?shù),這里注意,這里的分類只區(qū)分是否包含目標(biāo),至于所包含目標(biāo)的類別,是Faster-RCNN最后的分類網(wǎng)絡(luò)干的事情。4k coordinates指的是對(duì)原圖坐標(biāo)的偏移。
那么這個(gè)k又是什么東西呀?這里有一個(gè)anchor的概念,也是RPN的核心之一。論文預(yù)先設(shè)定好生成9個(gè)anchors。我們前面說到對(duì)于feature map, 我們有一個(gè)3*3的滑窗操作。對(duì)于每次滑窗所劃到的3x3的區(qū)域,就以該區(qū)域中心點(diǎn)為坐標(biāo),生成9個(gè)anchor。anchor它的本質(zhì)是,將相同尺寸的輸入,得到不同尺寸的輸出。它們的中心相同,但是有不同的長(zhǎng)寬比和尺度。這9個(gè)anchor, 中心坐標(biāo)一樣,但是大小各不相同,如下圖:
而上文提到的k就是anchors的數(shù)量,所以2k個(gè)分?jǐn)?shù)就是9個(gè)anchors的共18個(gè)分?jǐn)?shù),36個(gè)坐標(biāo)。對(duì)于每個(gè)anchor, 計(jì)算anchor與ground-truth bounding boxes的IoU,大于0.7則判定為有目標(biāo),小于0.3則判定為背景,介于0.3-0.7,則設(shè)為0,不參與訓(xùn)練
這么說完可能還是有點(diǎn)模糊,我們來看看RPN的代價(jià)函數(shù):
代價(jià)函數(shù)有兩部分,對(duì)應(yīng)著RPN的兩條路線,即是否包含目標(biāo)和bbox的坐標(biāo)與anchor坐標(biāo)的回歸誤差。注意回歸誤差這一項(xiàng)中,L與p相稱,也就是說,如果anchor不包含目標(biāo),那么box輸出位置是不算誤差的,對(duì)于
,只計(jì)算 判定為有目標(biāo)的anchor。總的來說 ,就是交叉熵,分類的損失; ,計(jì)算每個(gè)anchor分配的四個(gè)坐標(biāo)和ground truth的坐標(biāo)的偏移量,用的是L1范數(shù)。看一下pytorch的官方實(shí)現(xiàn)你就懂了:self插嘴一句,我們現(xiàn)在在做目標(biāo)檢測(cè)基本是用YOLO了,賊快,Faster RCNN雖然已經(jīng)Faster了還是YOLO快!當(dāng)然region proposals的概念很值得了解,YOLO的缺點(diǎn)是在檢測(cè)小目標(biāo)時(shí)難以得到精確的定位。
Faster R_CNN改進(jìn)方法
Faster R-CNN從2015年被提出,后來也出現(xiàn)了不少改進(jìn)方法,下面列舉一些方向,有興趣可以再去深入研究:
- 提取特征網(wǎng)絡(luò)的改進(jìn):使用ResNet代替原來的VGG提取特征,效果顯著
- RPN升級(jí)版本:FPN
- ROI升級(jí):PS_RPI
- R-FCN
- Mask R-CNN
- DeepText
- 訓(xùn)練過程中的hard-example finetune,可參見:視覺分類任務(wù)中處理不平衡問題的loss比較 - Daniel2333的博客 - CSDN博客
- A-Fast-RCNN, 這篇文章引入了GAN, 在某些數(shù)據(jù)集上精度增加
參考文獻(xiàn)
曉雷:RCNN- 將CNN引入目標(biāo)檢測(cè)的開山之作
最帥的大廚:RCNN-> SPP net -> Fast RCNN -> Faster RCNN
Fast R-CNN論文詳解 - WoPawn的博客 - CSDN博客
CNN目標(biāo)檢測(cè)(一):Faster RCNN詳解
RPN 解析 - lanran2的博客 - CSDN博客
目標(biāo)檢測(cè) - Faster R-CNN 中 RPN 原理
RPN 解析 - lanran2的博客 - CSDN博客
目標(biāo)檢測(cè) - Faster R-CNN 中 RPN 原理
Faster-RCNN算法精讀 - hunterlew的專欄 - CSDN博客
詳解 ROI Align 的基本原理和實(shí)現(xiàn)細(xì)節(jié)
Faster R-CNN 深入理解 && 改進(jìn)方法匯總
總結(jié)
以上是生活随笔為你收集整理的faster rcnn resnet_RCNN, Fast R-CNN 与 Faster RCNN理解及改进方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unsigned long long 溢
- 下一篇: 遵义大数据中心项目工程概况_中策大数据: