天天看點

目标檢測之Fast R-CNN通俗詳解

Fast R-CNN 介紹

R-CNN算法除了候選框選取上耗時的缺陷外,另外一個最大的缺陷就是矩形框重疊部分的特征提取存在重複計算,針對這個缺陷,R-CNN的作者繼續發力,又提出了R-CNN的快速版本,即Fast R-CNN。

Fast R-CNN就是R-CNN結合SPPNet所做的改進和優化,采用了ROI Pooling層來完成image的crop或者warp,得到固定尺寸的輸出給到fc層(這裡的ROI Pooling可以了解成單層的SPPNet);同時,Fast R-CNN還采用了多任務網絡來同時解決分類和位置回歸,替換了R-CNN中的SVM以及線性回歸,大大縮短訓練時間。

是以,總結來說,Fast R-CNN主要有兩點改進:ROI Pooling和多任務網絡。

ROI Pooling

ROI Pooling可以看成是SPPNet最簡單的一種形式,就是單層SPPNet,當然它也是池化層的一種。

大緻原理就是要實作一個proposal摳圖的過程,先把proposal摳出來,根據proposal的相對坐标摳取到feature map上所對應的的候選區域的位置,然後對摳取出的feature map進行resize到一個統一的size,通常這裡的resize我們會采用特定的pooling操作,具體操作如下:

1)根據輸入的image, 将ROI映射到feature map對應的位置:由于我們輸入的proposal的真實位置是相對于原圖的,而ROI Pooling是作用在卷積層的輸出feature map上,是以需要映射到feature map的對應位置;

2)将上面得到的位置摳取出來,并劃分為多個相同大小的block(網格結構),block數量與最後輸出的次元相同;

3)對每個block進行最大池化操作;

4)最後得到固定尺寸的輸出;

Fast R-CNN原理

目标檢測之Fast R-CNN通俗詳解

可以看到,Fast R-CNN與SPPNet的主要不同在于卷積層之後以及FC層之前的這一部分,與SPPNet不同的是,Fast R-CNN采用ROI Pooling層來得到FC層的輸入,以達到固定尺寸的目的,然後fc層的輸出分成兩部分,一部分進行bounding box的回歸,一部分進行候選框類别的判定。

總結就是:

image->CNN->SS->ROI Pooling->FC->class identification && boundingbox regression

Fast R-CNN缺點

仍然存在巨大的一個瓶頸,那就是選擇性搜尋進行候選框的提取,非常耗時,是以我們需要思考一個問題就是,我們能不能找出一個更加高效快速的方法來得到這些候選框呢?答案當然是肯定的,那就是RPN網絡(Region Proposal Network)。

與R-CNN的對比

目标檢測之Fast R-CNN通俗詳解

可以看出來,相比于R-CNN來說,Fast R-CNN實作了目标檢測算法質的飛越,可喜可賀!