日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于Faster R-CNN的一切——笔记3:Faster R-CNN

發布時間:2024/9/21 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于Faster R-CNN的一切——笔记3:Faster R-CNN 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
博主課題需要研究Faster RCNN,先后看了RCNN、Fast RCNN和Faster RCNN三篇paper,然而有點懵逼= =所以準備再捋一遍總結一下~
關于Faster R-CNN的一切——筆記1:R-CNN
關于Faster R-CNN的一切——筆記2:Fast R-CNN
三、Faster?R-CNN【Faster R-CNN--Towards Real-Time Object Detection with Region Proposal Networks.2015NIPS
理解了R-CNN和Fast R-CNN之后,我們終于可以昂首闊步進入Faster R-CNN的解讀啦~\(≧▽≦)/~啦啦啦
SPPnet和Fast R-CNN都加速了R-CNN的檢測過程,然而瓶頸問題:region proposal computation卻沒有考慮。因此,Faster R-CNN的核心改進就是設計了一個Region Proposal Network(RPN),在每個圖像位置輸出一個預測的object bounding box和objectness score,這個網絡與原來的Fast R-CNN共享conv feature map,所以幾乎不增加計算量。
1.什么結構
網絡輸入是一張image? 經過RPN生成一系列rectangular object proposals image和它的object proposals一起送入Fast R-CNN網絡,輸出最終的檢測結果

顯然,最重要的就是這個Region Proposal Network(RPN)怎么設計,下面分析。
  • RPN的整體結構
(1)首先生成conv feature map? ? ? ? ?? ? ? ? ? ?明確一點,RPN與原來的Fast R-CNN網絡共享從image生成conv feature map的過程。
? ? ? ? ?例如對于VGG16,結構如下:
【image→conv3-64conv3-64→pool2conv3-128conv3-128→pool2conv3-256conv3-256conv3-256→pool2 conv3-512conv3-512conv3-512→pool2conv3-512conv3-512conv3-512→pool2→FC4096→FC4096→FC1000
? ? ? ? ?那么從image到最后一個conv3-512層這13個卷積層和4個pooling層是RPN和Fast R-CNN共享的,對于VGG16,最后一個conv3-512層輸出的是512通道的W*H大小的(W和H=原圖像寬高/16,因為有4個pooling層,每次大小減半)conv feature map,接下來的RPN操作就是基于這個conv feature map。
(2)在conv feature map的每個sliding window位置上生成特征向量
? ? ? ? ?用一個n*n(本文是3*3)大小的滑動窗口(可以理解為卷積核)以1為步長在conv feature map上滑動。在每個sliding位置上,卷積核與它覆蓋的conv featue map對應元素相乘并相加輸出對應值,也就是卷積了。注意:conv feature map是3維的,對于VGG16而言是第三維是512通道,則每個通道獨立的與卷積核作用,所以最后卷積核在每個滑動窗口位置都會生成一個1*512維的向量。然后,這個1*512維的向量被送入兩個并列的FC層,一個分類的FC層輸出分類結果,一個回歸的FC層輸出box regressor也就是物體位置坐標。
? ? ? ? ?上面所說的sliding window模式,在所有的空間位置上的FC層的參數是共享的,所以這樣的結構很自然的可以被應用為一個n*n的卷積層和兩個并列的1*1的卷積層【1*1的卷積層其實就是每個卷積核通道數與輸入通道數相同,卷積核的個數就是你想要的輸出維數。例如對于VGG16,每個卷積核是512通道?!俊5亲⒁膺@樣的n*n“卷積層”和我們平常理解的不太一樣,我來解釋一下:
? ? ? ? ?我們平時理解的卷積層操作如下圖所示。例如這是一個有2個filter的卷積層(因此輸出是2通道的),每個filter是3通道的(與輸入通道數相同)。輸出volume中第1個通道里第一個位置的結果10是由filter w0的三個通道分別與輸入volume的第一個receptive field的三個通道分別相乘然后相加的結果:10=1+4+4+1bias。

? ? ? ? ?但是本文里面想表達的其實是如下圖的意思:

? ? ? ? ? ? ? ? ? ?所以如果要是想和普通的卷積層一樣的話,應該如下圖這么設置,簡單地說第i個filter只有第i個通道是n*n個系數,其他通道都全為0,每個filter的n*n個系數文章中沒有說一樣不一樣誒,可能需要實際跑一邊代碼看看了~。這樣就可以應用普通的卷積層來完成RPN想要的sliding window模式。


(3)每個sliding window位置的特征向量送入兩個并列的FC層做預測
? ? ? ? ?有了特征向量,顯然可以分類了,那么分幾類?文章說我們要在這個sliding window位置根據它的特征向量同時預測出k個region proposals,那么回歸的FC層輸出就是4k維的了,因為每個proposal有4個坐標嘛~分類的FC層輸出2k個分數來估計每個proposal是物體的概率和不是物體的概率。但是這k個proposal不是憑空整出來的,而是要相對一個參照,叫做archors,這也是RPN網絡很核心的一個概念,下面詳細說明:
  • 平移不變的Anchors
? ? ? ? ?在每個sliding window·的中心,定義3種尺度和3種aspect ratio共9種anchors。對于一個大小是W*H的conv feature map,一共有W*H*9個anchors。注意,anchors是圈出原image中的某塊區域,所以按照Fast R-CNN RoI pooling層要完成的第一個任務【即把region proposal投影到conv feature map上,參考博主的Fast R-CNN筆記啦啦啦~】,我們需要把sliding window【這是在conv feature map上的啊注意了】的中心坐標投影到原image上,然后就能找到原image上這些anchors應該對應的區域。這一點文章中并沒有明確說出,但是可以推斷出來。因為首先文章中使用的anchors最小也是128*128像素的,而feature map大小在40*60,所以anchors不可能是在feature map上;然后,從archors的意義上我們來想,它是你的網絡將要預測的region proposal的參照物對吧,region proposal是在原image上的對吧,所以anchors必然是在原image上的。但是sliding window是在conv feature map上的,所以我們一定會需要conv feature map往原image位置的映射,這就和Fast R-CNN要把原image上的region proposal投影到conv feature map是一個道理,只不過過程反過來了,我說清楚了吧~#這是吐槽。。。我看paper的時候就這一點十分不解,還是看了SPPnet的文章才明白這個投影是什么鬼的,強烈譴責Faster R-CNN的作者╭(╯^╰)╮#
附上原paper的圖總結一下RPN網絡的結構:


(4)根據分類的score對region proposals進行非極大值抑制

先去掉所有IoU小于0.7的那些proposal,然后剩下的運行NMS(和以前一樣了啦不再詳細說)。然后用前N個region proposal送入Fast R-CNN進行物體檢測。

2.怎么訓練
顯然,我們需要訓練RPN和Fast R-CNN兩個網絡。首先以預訓練的VGG16為例比較兩個網絡的結構:


所以為了共享conv feature map,兩個網絡的交替訓練流程應該是:
用預訓練模型初始化網絡參數,然后fine-tune訓練RPN 用同一個預訓練模型初始化網絡參數,然后fine-tune訓練Fast R-CNN,使用RPN網絡輸出的region proposals 用Fast R-CNN初始化RPN(肯定是共有部分啦),固定共有的conv層(參數不再變化),只fine-tuned RPN獨有的層 固定共有的conv層,fine-tune Fast R-CNN的FC層

Fast R-CNN不說了,就是和原Fast R-CNN的訓練一毛一樣只不過產生region proposals的方法由selective search變成RPN網絡啦~
  • 預訓練
???????? ? ? ? ? ?用ImageNet網絡來初始化RPN和Fast R-CNN啦~比較了ZFnet和VGG16net兩個。 ?
  • RPN網絡的fine-tune
? ? ? ? ?#剛剛經歷了電梯驚魂的博主回來繼續寫了......生命苦短,要好好珍惜,好好學習T T#
? ? ? ? ?(1)首先是loss function怎么定義
? ? ? ? ?先明確一下有兩個任務:一是分類任務,即判斷這個anchor是不是物體;二是回歸任務,即給出bounding box的預測坐標。所以說這種multi task的東東,肯定有兩個loss項啦:
? ? ? ?? ? ? ? ? ?i是一個mini-batch(在本文就是一張image和它里面的所有anchor)里的anchor的index;pi是算法輸出的anchor i是物體的概率;pi*是anchor i的ground-thuth label;ti是一個四元素的向量,是算法預測的bounding box的參數化坐標;ti*是與一個正anchor相關的ground-truth box。 ?? ? ? ? ? ?分類loss是兩類上的log loss(是物體和不是物體),回歸loss和Fast R-CNN中的定義一樣。
? ? ? ? ?關于ti和ti*,都是參數化的坐標,也就是都相對于anchor而定義,如下圖,所以你可以理解為:在原image上有很多ground-truth box,現在人為的規定了很多anchor box,你的算法要做的事情其實就是把anchor box回歸到離它最近的ground-truth box那里去~ ? ? ? ? ? ? ? ?(2)anchor的標簽怎么定義
? ? ? ? ?有兩種情況anchor的標簽是正:一種是與某個ground-truth box有最大的IoU的那些;另一種是與任何ground-truth的IoU都大于0.7的那些。
? ? ? ? ?有一種情況anchor的標簽是負:與所有的gound-truth box的IoU都小于0.3。
? ? ? ? ?(3)其他訓練細節
? ? ? ? ?Mini-batch怎么采樣:先隨機采樣一張圖片,然后以1:1的比例從這張圖隨機采樣256個anchors,如果正樣本的數目少于128的話,只好用負樣本填充mini-batch啦。也就是說1個mini-batch就是1張image和它的256個正負anchors。
? ? ? ? ?新的卷積層用均值為0,標準差為0.01的高斯分布初始化,共享的那些層就用預訓練的模型初始化啦。
? ? ? ? ?前60k個mini-batch用學習率0.001,后20k個mini-batch用學習率0.0001。momentum是0.9,weight decay是0.0005.在PASCAL數據集喔~ ??? 3.怎么測試
測試就簡單啦~對于一張測試image,先運行RPN生成2000個region proposal,然后把這些region proposal投影到conv feature map上進行后續的Fast R-CNN網絡的操作就行啦。由于共享了conv feature map,一張圖只用計算一次,大的縮短時間。
來一個三個網絡的運行時間對比: ? ? ? ? R-CNN 47s/img ? ? ? ? Fast R-CNN3s/img ? ? ? ? Faster R-CNN0.2s/img


--The End?of Faster?R-CNN--

總結

以上是生活随笔為你收集整理的关于Faster R-CNN的一切——笔记3:Faster R-CNN的全部內容,希望文章能夠幫你解決所遇到的問題。

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