古詩詞大全網 - 字典詞典 - 檢測論文綜述(壹) : 從RCNN到Mask-RCNN

檢測論文綜述(壹) : 從RCNN到Mask-RCNN

對於目標檢測方向並不是特別熟悉,本文記錄壹下RCNN, fast-RCNN, faster-RCNN, mask-RCNN這4篇有關目標檢測的論文筆記和學習心得。

R-CNN的意思就是Region based,主要思路就是根據壹張圖像,提取多個region,再將每個Region輸入CNN來進行特征的提取。因此RCNN就可以分為 Region proposals , Feature extraction 兩個主要部分,提取的特征就可以輸入任意壹個分類器來進行分類。

模型的流程圖如下:

在訓練的時候,首先使用的是已經訓練好的CNN網絡作為特征提取器,但是由於預訓練是在分類數據集上,因此在應用到檢測之前要做finetune。也就是說,為了將用ImageNet數據集訓練的網絡應用到新的任務(檢測),新的數據集(region)上,作者將原來的CNN最後的1000類的fc層,更改為了 層, 代表待檢測的物體的類別數。然後,對於所有的region,如果它和ground truth的重疊率大於0.5,就認為是正類。

對於分類器的訓練,作者發現選擇多大的IoU來區分正類和負類非常關鍵。並且,對於每壹類,都會訓練壹個分類器。

框的回歸非常重要,在對每壹個region proposal使用分類器進行打分評價之後,作者使用壹個回歸器來預測壹個新的框作為結果。這個回歸器使用的特征是從CNN中提取的特征。回歸器的訓練中,輸入是 region proposal 的 和ground truth的 ,目標是學習壹種變換,使得region proposal通過該變換能夠接近ground truth。同時,希望這種變換擁有尺度不變性,也就是說尺度變化的話,變換不會改變。

如下圖所示,每壹個regressor會學習壹組參數,特征輸入是pool 5的特征輸出,擬合的目標是 。

Fast-RCNN 主要解決的問題是在RCNN中對於每壹個region proposal都進行特征提取,會產生非常多的冗余計算,因此可以先對壹張圖像進行特征提取,再根據region proposal在相應的特征上進行劃分得到對應region的特征(映射關系)。

這樣便可以實現***享計算提高速度,但是與SPPnets不同,SPPnets在壹副圖像得到對應的特征後,從這張圖像的特征上proposal對應的部分,采用空間金字塔池化,如下圖:

RoI pooling的方法很簡單,類似於空間金字塔pooling,它將proposal部分對應卷積層輸出的特征(稱之為RoI,因為用於做pooling的特征是 region of interest,也就是我們感興趣的區域)劃分成 塊,然後對每壹塊求最大值,最終得到了壹個 的特征圖。可以看出,它只是空間金字塔pooling的壹部分。

但是SPP-nets的空間金字塔也是可以求導的,那麽它到底不好在哪裏呢?因為當每壹個RoI都可能來源於不同的圖像的時候(R-CNN和SPPnets的訓練策略是從壹個batch的不同圖像中,分別挑選壹個proposal region),SPPNets的訓練非常地低效,這種低效來源於在SPPnets的訓練中,每個RoI的感受野都非常地大,很可能對應了原圖的整個圖像,因此,得到的特征也幾乎對應了整張圖像,所以輸入的圖像也就很大。

為了提高效率,Fast-RCNN首先選取 個圖像,再從每個圖像上選擇 個RoI,這樣的效率就比從每個圖像提取壹個RoI提高了 倍。

為了將分類和框回歸結合起來,作者采用了多任務的loss,來進行聯合的訓練。具體來說就是將分類的loss和框回歸的loss結合起來。網絡的設計上非常直接,就是將RoI得到的特征接幾個FC層後,分別接不同的輸出層。對應於分類部分,特征會接壹個softmax輸出,用於分類,對於框回歸部分,會接壹個輸出4維特征的輸出層,然後分別計算loss,用於反向傳播。loss的公式如下:

回歸的target可以參考前面的R-CNN部分。

notes

為什麽比fast還fast呢?主要原因是在這篇論文中提出了壹個新的層:RPN(region proposal networks)用於替代之前的selective search。這個層還可以在GPU上運算來提高速度。

RPN的目的:

為了能夠進行region proposal,作者使用了壹個小的網絡,在基礎的卷積層輸出的特征上進行滑動,這個網絡輸入大小為 ,輸入後會映射(用 的卷積)為壹個固定長度的特征向量,然後接兩個並聯的fc層(用 的卷積層代替),這兩個fc層,壹個為box-regressoin,壹個為box-classification。如下圖:

在每壹個滑動窗口(可以參考 n的任務是做instance segmentation。因此,它需要對每壹個像素點進行分類。

與Faster R-CNN不同,Faster R-CNN對每壹個候選框產生兩個輸出,壹個是類別,壹個是bounding box的offset。Mask R-CNN新增加了壹個輸出,作為物體的mask。這個mask類似於ps中的蒙版。

與Faster R-CNN類似的是,Mask R-CNN同樣采用RPN來進行Region Proposal。但是在之後,對於每壹個RoI,mask r-cnn還輸出了壹個二值化的mask。

不像類別,框回歸,輸出都可以是壹個向量,mask必須保持壹定的空間信息。因此,作者采用FCN來從每個RoI中預測壹個 的mask。

由於屬於像素級別的預測問題,就需要RoI能夠在進行特征提取的時候保持住空間信息,至少在像素級別上能夠對應起來。因此,傳統的取最大值的方法就顯得不合適。

RoI Pooling,經歷了兩個量化的過程:

第壹個:從roi proposal到feature map的映射過程。

第二個:從feature map劃分成7*7的bin,每個bin使用max pooling。

為此,作者使用了RoIAlign。如下圖

為了避免上面提到的量化過程

可以參考 /xiamentingtao/article/details/78598511

作者使用ResNet作為基礎的特征提取的網絡。

對於預測類別,回歸框,mask的網絡使用如下圖結構:

整體看完這幾篇大佬的論文,雖說沒有弄清楚每壹個實現細節,但是大體上了解了算法的思路。可以看出,出發點都源於深度神經網絡在特征提取上的卓越能力,因此壹眾大神試圖將這種能力應用在檢測問題中。從R-CNN中簡單地用於特征提取,到為了提高速度減少計算的Fast R-CNN,再到為了將region proposal集成進入整個模型中,並且利用GPU加速的RPN,也就是Faster R-CNN。再到為了應用於instance segmentation任務中,設計的RoIAlign和mask。包括bounding box regression,pooling層的設計,訓練方法的選擇,loss的設計等等細節,無壹不體現了大師們的思考和創造力。

可能在我們這些“拿來”者的眼中,這些方法都顯得“理所應當”和巧妙,好用,但是,它們背後隱藏的選擇和這些選擇的思考卻更值得我們學習。

以及,對待每壹個問題,如何設計出合理的解決方案,以及方案的效率,通用性,更是應該我們努力的方向。