ROI Pool和ROI Align


這里說一下ROI Pool和ROI Align的區別:

一、ROI Pool層

參考faster rcnn中的ROI Pool層,功能是將不同size的ROI區域映射到固定大小的feature map上,具體可實現可參考:https://www.cnblogs.com/zf-blog/p/7337944.html

它的缺點:由於兩次量化帶來的誤差;

(1)將候選框邊界量化為整數點坐標值。

(2)將量化后的邊界區域平均分割成 k x k 個單元(bin),對每一個單元的邊界進行量化。

下面我們用直觀的例子具體分析一下上述區域不匹配問題。如 圖1 所示,這是一個Faster-RCNN檢測框架。輸入一張800*800的圖片,圖片上有一個665*665的包圍框(框着一只狗)。圖片經過主干網絡提取特征后,特征圖縮放步長(stride)為32。因此,圖像和包圍框的邊長都是輸入時的1/32。800正好可以被32整除變為25。但665除以32以后得到20.78,帶有小數,於是ROI Pooling 直接將它量化成20。接下來需要把框內的特征池化7*7的大小,因此將上述包圍框平均分割成7*7個矩形區域。顯然,每個矩形區域的邊長為2.86,又含有小數。於是ROI Pooling 再次把它量化到2。經過這兩次量化,候選區域已經出現了較明顯的偏差(如圖中綠色部分所示)。更重要的是,該層特征圖上0.1個像素的偏差,縮放到原圖就是3.2個像素。那么0.8的偏差,在原圖上就是接近30個像素點的差別,這一差別不容小覷。

 

二、ROI Align層

為了解決ROI Pooling的上述缺點,作者提出了ROI Align這一改進的方法(如圖2)。ROI Align的思路很簡單:取消量化操作,使用雙線性內插的方法獲得坐標為浮點數的像素點上的圖像數值,從而將整個特征聚集過程轉化為一個連續的操作,。值得注意的是,在具體的算法操作上,ROI Align並不是簡單地補充出候選區域邊界上的坐標點,然后將這些坐標點進行池化,而是重新設計了一套比較優雅的流程,如 圖3 所示:

  • 遍歷每一個候選區域,保持浮點數邊界不做量化。
  • 將候選區域分割成k x k個單元,每個單元的邊界也不做量化。
  • 在每個單元中計算固定四個坐標位置,用雙線性內插的方法計算出這四個位置的值,然后進行最大池化操作。

這里對上述步驟的第三點作一些說明:這個固定位置是指在每一個矩形單元(bin)中按照固定規則確定的位置。比如,如果采樣點數是1,那么就是這個單元的中心點。如果采樣點數是4,那么就是把這個單元平均分割成四個小方塊以后它們分別的中心點。顯然這些采樣點的坐標通常是浮點數,所以需要使用插值的方法得到它的像素值。在相關實驗中,作者發現將采樣點設為4會獲得最佳性能,甚至直接設為1在性能上也相差無幾。事實上,ROI Align 在遍歷取樣點的數量上沒有ROIPooling那么多,但卻可以獲得更好的性能,這主要歸功於解決了misalignment的問題。值得一提的是,我在實驗時發現,ROI Align在VOC2007數據集上的提升效果並不如在COCO上明顯。經過分析,造成這種區別的原因是COCO上小目標的數量更多,而小目標受misalignment問題的影響更大(比如,同樣是0.5個像素點的偏差,對於較大的目標而言顯得微不足道,但是對於小目標,誤差的影響就要高很多)。

上圖為圖(3),ROI Align層要將feature map固定為2*2大小,那些藍色的點即為采樣點,然后每個bin中有4個采樣點,則這四個采樣點經過MAX得到ROI output;

它的優點:通過雙線性插值避免了量化操作,保存了原始ROI的空間分布,有效避免了誤差的產生;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM