天天看點

r-cnn/fast r-cnn/ faster-rcnn/ r-fcn/mask-rcnn/grid-rcnn比較閱讀

該系列核心思想為候選區域,即先找出候選區域, 再在候選區域上進行目标檢測

http://www.telesens.co/2018/03/11/object-detection-and-classification-using-r-cnns/

1.R-CNN

基于候選區域的目标檢測

  • 通過選擇性搜尋算法, 對輸入圖像選取2000個候選區域
  • 在每一個候選區域上進行卷積提取特征
  • 對提取的特征分别做(1)svm分類, (2)線性回歸bbox
r-cnn/fast r-cnn/ faster-rcnn/ r-fcn/mask-rcnn/grid-rcnn比較閱讀

因為對每一個候選區域做重複的事情, 切選擇性搜尋, 是以速度很慢

2.Fast RCNN

r-cnn/fast r-cnn/ faster-rcnn/ r-fcn/mask-rcnn/grid-rcnn比較閱讀

相對RCNN主要做了兩個改進, 使的速度加快了.

  • 直接對輸入圖檔深層卷積提取特征, 在特征上進行選擇性搜尋擷取ROI, 這樣隻用提取一次特征, 原來需要2000次.即一次提取特征+多任務學習.
  • 使用softmax分類器替換svm, 結果沒有降低, 加快了速度

ROI pooling 用于将不同尺寸的POI通過池化後, 變成一樣的尺寸.如

r-cnn/fast r-cnn/ faster-rcnn/ r-fcn/mask-rcnn/grid-rcnn比較閱讀

未解決的問題, ROI搜尋算法

問題:多個roi池化後多任務學習怎麼進行的?

3.Faster-RCNN

主要提出了RPN網絡,用深度學習生成ROI, 取代選擇搜尋算法.可以了解為Faster-RCNN = rpn + fast-rcnn

r-cnn/fast r-cnn/ faster-rcnn/ r-fcn/mask-rcnn/grid-rcnn比較閱讀
r-cnn/fast r-cnn/ faster-rcnn/ r-fcn/mask-rcnn/grid-rcnn比較閱讀
  • 原文這個conv feature map的次元是13*13*256的;
  • 作者在文章中指出,sliding window的大小是3*3的,那麼如何得到這個256-d的向量呢? 這個很簡單了,我們隻需要一個3*3*256*256這樣的一個4維的卷積核,就可以将每一個3*3的sliding window 卷積成一個256維的向量;
  • 作者這裡畫的示意圖 僅僅是 針對一個sliding window的;在實際實作中,我們有很多個sliding window,是以得到的并不是一維的256-d向量,實際上還是一個3維的矩陣資料結構;可能寫成for循環做sliding window大家會比較清楚,當用矩陣運算的時候,會稍微繞些;
  • 然後就是k=9,是以cls layer就是18個輸出節點了,那麼在256-d和cls layer之間使用一個1*1*256*18的卷積核,就可以得到cls layer,當然這個1*1*256*18的卷積核就是大家平常了解的全連接配接;是以全連接配接隻是卷積操作的一種特殊情況(當卷積核的大小與圖檔大小相同的時候,其實所謂的卷積就是全連接配接了);
  • reg layer也是一樣了,reg layer的輸出是36個,是以對應的卷積核是1*1*256*36,這樣就可以得到reg layer的輸出了;
  • 然後cls layer 和reg layer後面都會接到自己的損失函數上,給出損失函數的值,同時會根據求導的結果,給出反向傳播的資料,這個過程讀者還是參考上面給的文檔,寫的挺清楚的

n*n*channals輸入特征, k個anchors, 那麼就會生成n*n*k個候選區域, 經過nms以及取top-N操作等, 過濾無效的區域, 剩餘(2000或者300, 原文) 就可以得到roi.

rpn網絡:https://blog.csdn.net/sloanqin/article/details/51545125 

參考:https://www.zhihu.com/question/265345106/answer/294410307

4.R-FCN

名字顧名思義, 和faster-rcnn比,主要是把ROI計算部分優化了, 之前有全連接配接層, 計算很慢,現在使用全卷積, 計算很快.同時提出位置敏感得分圖的roi池化.

r-cnn/fast r-cnn/ faster-rcnn/ r-fcn/mask-rcnn/grid-rcnn比較閱讀
r-cnn/fast r-cnn/ faster-rcnn/ r-fcn/mask-rcnn/grid-rcnn比較閱讀

ROI被分裂為K*K個位置, 每一類有k*k個scoremap, 分别對應不同個位置.

position-sensitive ROI-pool:在k*k上的某一個位置, 在對應的位置得分圖中ROI中的小區域,做avgpooling, 得到k*k的一個值, 最後得到k*k個值, 最後對k*k做avg, softmax得到某一類的機率.

r-cnn/fast r-cnn/ faster-rcnn/ r-fcn/mask-rcnn/grid-rcnn比較閱讀

是以一步卷積, 就得到了roi類的機率, 不用全連接配接.那麼怎麼回歸bbox呢?原文這樣說的:

r-cnn/fast r-cnn/ faster-rcnn/ r-fcn/mask-rcnn/grid-rcnn比較閱讀

作者在k*k*(C+1)并列拉了一個分支,生成通到為4*k*k的卷積層,同樣的的經過位置敏感的ROI, vote, 得到一個4維的向量. 

對比faster-rcnn:RFCN無全連接配接, 分類和回歸邊界,變為全連接配接, 考慮了位置資訊. 保證了分類的位置不變性,和回歸的位置可變性.,全卷積意味着共享計算,可以大大加快運算速度.

進一步了解https://blog.csdn.net/baidu_32173921/article/details/71741970

faster-rcnn過程:

feature_maps = process(image)
ROIs = region_proposal(feature_maps)
for ROI in ROIs
    patch = roi_pooling(feature_maps, ROI)
    class_scores, box = detector(patch)         # Expensive!
    class_probabilities = softmax(class_scores)
           

RFCN:

feature_maps = process(image)
ROIs = region_proposal(feature_maps)         
class_score_maps = compute_score_map(feature_maps)
bbox_score_maps = compute_score_map(feature_maps)
for ROI in ROIs
    class_scores = vote_position_sensetive_roi_pool(class_score_maps, ROI)     
                     # Much simpler!
    class_probabilities = softmax(class_scores)
    bbox = vote_position_sensetive_roi_pool(bbox_score_maps, ROI)   
           

參考:

https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650730940&idx=1&sn=2a6a8520176368d467ca87fbc2e04c66&chksm=871b35c2b06cbcd41593cf07aa5b7a7d0913f5d07de708fd554059b9f20f1b332190dd934025&scene=21#wechat_redirect

https://www.jiqizhixin.com/articles/2018-04-27

https://imlogm.github.io/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/rcnn/

5.maskrcnn

r-cnn/fast r-cnn/ faster-rcnn/ r-fcn/mask-rcnn/grid-rcnn比較閱讀
r-cnn/fast r-cnn/ faster-rcnn/ r-fcn/mask-rcnn/grid-rcnn比較閱讀

在faster-rcnn基礎上加一個并行的FCN, 即MASKRCNN, 右圖為兩種并行解構.本模型可以用作目标檢測, 執行個體分割,以及關鍵點檢測.把一個關鍵點作為一個one-hot mask, 即可把關鍵點任務轉化為mask任務.是以maskrcnn可以同時出檢測框以及關鍵點.nice!!!

同時本文針對roi部分提出了ROIAlign, 使得proposal的roi減小計算誤差,結果更加準确. iounet提出了新的align, 見https://blog.csdn.net/yang_daxia/article/details/94736360

簡單好用~~~, 有趣的是faster-rcnn加上了ROIalign效果也沒有faster-rcnn好, 我了解是執行個體分割的任務促進了目标檢測任務.

6.cascade rcnn

7.grid rcnn

将檢測問題轉化為關鍵點檢測問題. 即把邊界框轉化為9個網格點, 建立了,邊界框與網格點的對應關系.

r-cnn/fast r-cnn/ faster-rcnn/ r-fcn/mask-rcnn/grid-rcnn比較閱讀

是以模型前面類似maskrcnn, 後面是作者的創新點.

因為網格點互相是有空間位置關系的, 是以作者作了網格點特征融合.一階融合,選取距離為1個網格點的,特征圖, 通過連續3個conv5*5卷積, 與原來特征相加. 然後這個特征基礎上做二階特征融合, (距離為2的網格點).結果表明, 在map>0.5的時候表現很好, 在map=0.5的時候與别的方法持平.是以這是一個高精度的檢測網絡.

r-cnn/fast r-cnn/ faster-rcnn/ r-fcn/mask-rcnn/grid-rcnn比較閱讀
r-cnn/fast r-cnn/ faster-rcnn/ r-fcn/mask-rcnn/grid-rcnn比較閱讀

繼續閱讀