1. 程式人生 > >Mask R-CNN翻譯(主要技術點解析)

Mask R-CNN翻譯(主要技術點解析)

今年何凱明大神再放大招,運用不多的策略就打敗了去年例項分割的冠軍,並且在去除mask分支的基礎上達到了目標檢測(class、box)的最好成績。廢話不多說,馬上進入正題~
note:以下僅為個人理解,如有錯誤還請各位留言糾正

策略一:採用並行訓練策略

Mask R-CNN僅僅是在Faster R-CNN的基礎上添加了一個預測mask分支(FCN)掩碼的,達到畫素級別的分類目標,並且與以往的訓練方法不同,Mask R-CNN採用並行訓練的方式,mask分支不受class與box分支的影響,即他們之間沒有資訊互動。消除class與box資訊影響是由L_mask來實現的。先來看一下總損失:L=Lcls+Lbox+Lmask,其中Lcls與Lbox是Faster R-CNN定義的,文中沒有改變其定義。而Lmask是由FCN輸出的K*m*m個掩碼來定義的,這是本文的主要貢獻:

RPN預先生成的每個ROI由FCN生成K*m*m大小的feature-map。其中K為類別總數,m是超引數。可以將m*m看做為ROI壓縮後的固定大小,因為m*m的就是表示掩碼資訊,將其重新resize成ROI大小即為各個類別在該ROI上的分割畫素資訊。單層m*m的feature-map資訊如下圖所示:
這裡寫圖片描述
都是浮點數型別,表示每個畫素(壓縮過後的)為該例項的得分。之後將這些得分通過sigmoid函式壓縮至[0,1]範圍內。此時的數值可以看作為對應畫素為該類例項的概率。之後以0.5為閾值將m*m二值化為positive(正樣本)與negative(負樣本),Lmask就是計算二值化後的K*m*m大小的feature-map中的正樣本的均值交叉熵損失(注意,此時只計算正樣本)。即對每一個m*m層求算數平均交叉熵損失的輸入。可以看出,此時的Lmask與類別無關,去除了mask與class的相關性。

策略二:ROIAlign

對於ROIPOOL層,在cls與box任務中表現出色,而對於mask任務,是pixel-to-pixel,要求嚴格畫素之間的對齊,此時ROIPOOL只能被看作為粗略的空間量化,損失大量的空間資訊。為了保留精確的空間位置資訊,且保證只新增少部分計算開銷的前提下,文中提出ROIAlign層,利用雙線性插值的方法來解決對齊問題。
雙線性插值,可參考:http://blog.csdn.net/xjz18298268521/article/details/51220576