roi align 是在mask-rcnn這篇**裡提出的一種區域特徵聚集方式, 很好地解決了roi pooling操作中兩次量化造成的區域不匹配(mis-alignment)的問題。實驗顯示,在檢測測任務中將 roi pooling 替換為 roi align 可以提公升檢測模型的準確性。
如果roi大小為(7,6),而roipooling是分成了(6,6)的部分,(7,6)到(6,6)的轉換必然帶來了邊緣某畫素的損失。而roialign利用雙線性插值,將roi(7,6)插值擴充到(12,12),此時再做(6,6)的roipooling,會提高精度,充分利用了roi的畫素。
在常見的兩級檢測框架(比如fast-rcnn,faster-rcnn,rfcn)中,roi pooling 的作用是根據預選框的位置座標在特徵圖中將相應區域池化為固定尺寸的特徵圖,以便進行後續的分類和包圍框回歸操作。由於預選框的位置通常是由模型回歸得到的,一般來講是浮點數,而池化後的特徵圖要求尺寸固定。故roi pooling這一操作存在兩次量化的過程。
事實上,經過上述兩次量化,此時的候選框已經和最開始回歸出來的位置有一定的偏差,這個偏差會影響檢測或者分割的準確度。在**裡,作者把它總結為「不匹配問題(misalignment)。
下面我們用直觀的例子具體分析一下上述區域不匹配問題。如 圖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個畫素點的差別,這一差別不容小覷。
圖 1
為了解決roi pooling的上述缺點,作者提出了roi align這一改進的方法(如圖2)。roi align的思路很簡單:取消量化操作,使用雙線性內插的方法獲得座標為浮點數的畫素點上的影象數值,從而將整個特徵聚集過程轉化為乙個連續的操作,。值得注意的是,在具體的演算法操作上,roi align並不是簡單地補充出候選區域邊界上的座標點,然後將這些座標點進行池化,而是重新設計了一套比較優雅的流程,如 圖3 所示:
這裡對上述步驟的第三點作一些說明:這個固定位置是指在每乙個矩形單元(bin)中按照固定規則確定的位置。比如,如果取樣點數是1,那麼就是這個單元的中心點。如果取樣點數是4,那麼就是把這個單元平均分割成四個小方塊以後它們分別的中心點。顯然這些取樣點的座標通常是浮點數,所以需要使用插值的方法得到它的畫素值。在相關實驗中,作者發現將取樣點設為4會獲得最佳效能,甚至直接設為1在效能上也相差無幾。事實上,roi align 在遍歷取樣點的數量上沒有roipooling那麼多,但卻可以獲得更好的效能,這主要歸功於解決了misalignment的問題。值得一提的是,在做實驗的時候發現,roi align在voc2007資料集上的提公升效果並不如在coco上明顯。經過分析為造成這種區別的原因是coco上小目標的數量更多,而小目標對misalignment問題的影響更為明顯(比如,同樣是0.5個畫素點的偏差,對於較大的目標而言顯得微不足道,但是對於小目標,誤差的影響就要高很多)
圖 2
圖 3
roi align 是在mask-rcnn這篇**裡提出的一種區域特徵聚集方式, 很好地解決了roi pooling操作中兩次量化造成的區域不匹配(mis-alignment)的問題。實驗顯示,在檢測測任務中將 roi pooling 替換為 roi align 可以提公升檢測模型的準確性。
如果roi大小為(7,6),而roipooling是分成了(6,6)的部分,(7,6)到(6,6)的轉換必然帶來了邊緣某畫素的損失。而roialign利用雙線性插值,將roi(7,6)插值擴充到(12,12),此時再做(6,6)的roipooling,會提高精度,充分利用了roi的畫素。
在常見的兩級檢測框架(比如fast-rcnn,faster-rcnn,rfcn)中,roi pooling 的作用是根據預選框的位置座標在特徵圖中將相應區域池化為固定尺寸的特徵圖,以便進行後續的分類和包圍框回歸操作。由於預選框的位置通常是由模型回歸得到的,一般來講是浮點數,而池化後的特徵圖要求尺寸固定。故roi pooling這一操作存在兩次量化的過程。
事實上,經過上述兩次量化,此時的候選框已經和最開始回歸出來的位置有一定的偏差,這個偏差會影響檢測或者分割的準確度。在**裡,作者把它總結為「不匹配問題(misalignment)。
下面我們用直觀的例子具體分析一下上述區域不匹配問題。如 圖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個畫素點的差別,這一差別不容小覷。
圖 1
為了解決roi pooling的上述缺點,作者提出了roi align這一改進的方法(如圖2)。roi align的思路很簡單:取消量化操作,使用雙線性內插的方法獲得座標為浮點數的畫素點上的影象數值,從而將整個特徵聚集過程轉化為乙個連續的操作,。值得注意的是,在具體的演算法操作上,roi align並不是簡單地補充出候選區域邊界上的座標點,然後將這些座標點進行池化,而是重新設計了一套比較優雅的流程,如 圖3 所示:
這裡對上述步驟的第三點作一些說明:這個固定位置是指在每乙個矩形單元(bin)中按照固定規則確定的位置。比如,如果取樣點數是1,那麼就是這個單元的中心點。如果取樣點數是4,那麼就是把這個單元平均分割成四個小方塊以後它們分別的中心點。顯然這些取樣點的座標通常是浮點數,所以需要使用插值的方法得到它的畫素值。在相關實驗中,作者發現將取樣點設為4會獲得最佳效能,甚至直接設為1在效能上也相差無幾。事實上,roi align 在遍歷取樣點的數量上沒有roipooling那麼多,但卻可以獲得更好的效能,這主要歸功於解決了misalignment的問題。值得一提的是,在做實驗的時候發現,roi align在voc2007資料集上的提公升效果並不如在coco上明顯。經過分析為造成這種區別的原因是coco上小目標的數量更多,而小目標對misalignment問題的影響更為明顯(比如,同樣是0.5個畫素點的偏差,對於較大的目標而言顯得微不足道,但是對於小目標,誤差的影響就要高很多)
圖 2
圖 3
目標檢測RoI Align
對於roi pooling的缺點在於兩次量化,從原圖對映到特徵圖的region proposal大概率是浮點數大小,這裡需要進行一次量化 對特徵圖上的region proposal進行分塊時也需要一次量化,方便pool操作。兩次量化使得region proposal反映射至原圖會出現誤差,誤差量與原...
目標檢測資料層引數解析(caffe)
作用 資料變換 transform param batch sampler 的額外限制條件 座標表示形式 emit constraint 資料畫素變換,資料增強 distort param 對原圖周圍用均值擴充,變成乙個大,後面縮放到特定尺寸之後,原圖目標就會縮小,目的是使網路適應小尺寸的目標,增強...
目標檢測 目標檢測通用框架總結
目標檢測框架個人總結 以下是筆記中包含的內容 目標檢測網路框架總結 yolov4中有圖 從最開始的神經網路到現在深度更深,模組更多的目標檢測深度學習神經網路,如今大致可以分為two stage detector 典型的為rcnn系列 和 one stage detector 典型為yolo系列 每個...