Mask R-CNN學習筆記

在閱讀Mask R-CNN論文的過程中,雖然整篇論文沒有公式,但是對于我來說還是有些難理解了,綜合性較強,里面涉及到了許多知識,需要看其它的論文才能理解,所以就將其它論文的要點一起整理在這里。

Fast R-CNN

整體架構如圖1所示:


圖1 Fast R-CNN

它是將整幅圖像和一系列的目標建議作為輸入。首先將整幅圖像通過許多卷積層和最大池化層生成一個卷積特征圖。之后對于每個目標建議,通過感興趣區域(RoI)池化層從特征圖中獲取定長的特征向量。每一個特征向量都喂給一系列的全連接層,最后分支到兩個兄弟輸出層,一個通過softmax輸出K個類別和背景的概率進行分類,另一個輸出K個類別的包圍盒位置信息的4個真實值,分別為中心坐標和它的高度和寬度。

RoI pooling layer

RoI池化層是通過最大池化將特征圖中感興趣的區域固定在固定的空間范圍H\times W(e.g 7×7),這兩個值是超參數,獨立于任何的RoI。在本文中,RoI是卷積特征圖中的一個矩形窗口,每個RoI由四元組(r,c,h,w)構成,其中(r,c)為其左上角坐標,(h,w)分別為高度和寬度。RoI最大池化,通過將h×w大小的窗口分割成H×W個子窗口,每個子窗口的大小為h/H\times w/W,之后對每個子窗口取最大值。對于特征圖的每個通道,池化操作都是獨立進行的,互不干擾。

Multi-task loss

第一個分類網絡的輸出為離散概率分布(對于每個RoI),p=(p_0,\dots,p_k),對應與k個類別加一個背景。第二個是包圍盒回歸偏移輸出為t^k=(t_x^k,t_y^k,t_h^k,t_w^k),對應于第k個類別。對于每個訓練的RoI,它的標簽為真實類別u和真實值包圍盒回歸目標v。使用多任務損失L對于每個標簽RoI協同的訓練分類和包圍盒回歸,損失函數為;

L(p,u,t^u,v)=L_{cls}(p,u)+\lambda[u\geq 1]L_{loc}(t^u,v)

其中L_{cls}=-logp_uu表示真實的類別,p_u表示預測得到的概率,取負對數表示概率越大,誤差越小。u等于0的時候代表背景,它沒有包圍盒。

L_{loc}=\sum_{i\in \{x,y,w,h \} } smooth_{L_1}(t_i^u-v_i)L_1表示1范數,它對于外翻更不敏感。

smooth_{L_1}=\begin{cases}0.5x^2 &\quad if|x|<1\\|x|-0.5 &\quad otherwise\end{cases}

Faster R-CNN

與Fast R-CNN相比,Faster R-CNN加入了區域建議網絡(RPN),與提取整幅圖像特征共享卷積層。它是端到端訓練的,輸出高質量的區域建議給Fast R-CNN用作檢測。Faster R-CNN由兩個模塊組成,第一個模塊是深度全卷積網絡提議區域,第二個模塊是Fast R-CNN檢測使用建議區域。使用流行的屬于叫做注意力機制,RPN告訴Fast R-CNN應該看向哪里。整體架構如圖2-1所示:


圖2-1 Faster R-CNN

Region Proposal Networks

區域建議網絡將任意大小的圖像作為輸入,輸出一系列矩形目標建議,每個都有目標分數。為了產生目標區域,將一個小的網絡在特征圖中滑動,該小網絡作為卷積特征圖n×n的空間窗口輸入。每個滑動窗口被映射到低維的特征(ZF為256-d,VGG-16為512-d,這里的256和512都是通道數,隨后跟著ReLU)。之后被送入到兩個兄弟全連接層——盒回歸層(reg)和盒分類層(cls),在本文中使用n=3。

FPN(Feature Pyramid Networks )

Bottom-up pathway

自底朝上的途徑是骨干卷積層的前向傳播,以2為尺度系數在不同的尺度下計算包含特征圖的特征等級。有許多層輸出的圖的尺寸是相同的,將這些層叫做同一網絡階段。在特征金字塔中,定義一個階段為一個金字塔層,選擇每一階段的最后一層輸出作為一系列特征圖的參考,這一決定是自然的,因為每個階段的最深層有最強壯的特征。

Top-down pathway and lateral connections

自上而下的途徑有一個幻覺就是從高層的金字塔得到的特征圖產生的特征精度越高,其通過粗糙的上采樣之后,分割能力越強。這些特征與從下而上得到的特征進行橫向連接。每一個橫向連接將從上而下和從下而上得到的在相同大小下的特征進行合并。圖3展示了上下特征圖的構建。


圖3 構建塊

從上圖可以從下到上的途徑是將每個階段的卷積層結果與一個1×1的卷積核進行卷積,這是為了減少通道維數。而右邊的自上而下的操作是對上層輸出的特征圖進行以尺度系數為2的上采樣(使用最近鄰采樣),之后將兩者對應相加。這個過程是循環進行的,直到精度最高的特征圖產生。最后,在每一個合并后面加上3×3的卷積去生成最后的特征圖,這是為了減少上采樣的混疊。

比如對于ResNet共有5層,使用每一層最后殘差塊激活函數的輸出作為特征圖,將最后一層殘差塊的輸出記為jia,分別是conv2,conv3,conv4,conv5的輸出,對應于輸入圖像有步長為\{4,8,16,32  \}個像素。沒有將conv1加入,因為它的內存太大了。之后通過上-下操作產生對應的特征圖記為\{ P_2,P_3,P_4,P_5\},有相同的空間大小。且將特征的通道數都定為d=256

Applications

Feature Pyramid Networks for RPN

將特征金字塔網絡應用與Faster R-CNN中的區域建議網絡。對于傳統的區域建議網絡,它需要一個3×3的滑動窗口在特征圖中游走,后面更隨這兩個兄弟1×1卷積層用于分類和回歸,將其作為網絡的頭部(head)。有無目標和包圍盒的回歸還與一系列的參考包圍盒anchors(錨點)有關。這些錨點有預先定義的尺度和長寬比,它是為了覆蓋不同形狀的目標。

本文將FPN應用到RPN,將頭部相同的設計(3×3的滑動窗口和2個兄弟1×1的卷積)連接到特征圖中的每一層。由于頭部在特征金字塔中的所有層進行稠密的滑動,沒有必要在特定層使用多尺度的anchors,因此,在每一層只需要使用單獨尺度的anchors。正式的,定義anchors有區域\{ 32^2, 64^2,128^2,256^2,512^2\}分別在\{ P_2,P_3,P_4,P_5,P_5\}上,同時在每一層有長寬比為\{ 1:2, 1:1,2:1\},所以在整個金字塔中有共15個anchors。

將訓練標簽賦給anchors是基于與真值框的交并比(IoU)。如果一個anchor的標簽為正是與真值框有高的IoU,或者與真值框的交并比達到了0.7,標簽為負是與所欲真值框的交并比小于0.3。

Feature Pyramid Networks for Fast R-CNN

Fast R-CNN使用RoI池化進行特征提取,為了使用FPN需要對RoI進行不同尺度的賦值。本文將RoI的高度h和寬度w(與輸入圖像尺寸有關)分配給特征圖像金字塔的P_k為:

k=\lfloor k_0+\log_2(\sqrt{wh}/224)\rfloor

224是ImageNet典型的輸入尺寸。當RoI有w\times h=224^2尺寸時應該映射到k_0層上。類似的,基于ResNet的Faster R-CNN使用C_4作為單一尺度特征圖設置k_0的值為4。上面公式意味著當RoI的尺寸變得很小時,它應該被映射到高精度層上。比如說,當尺寸變為224的一半,應該映射到第3層。

將預測頭部(在Fast R-CNN中是分類和回歸)與所有層的RoI連接。不論是哪一層的頭部都是共享參數的。對于ResNet的conv5已經用于構建特征金字塔了,所以只需要從RoI池化層獲取7×7的特征,在分類和回歸之前直接與兩個全連接層(1024d)相連(每個后面都有ReLU激活函數)。這兩個全連接層是隨機初始化的,因為在ResNet中沒有預先訓練的全連接層。

Mask R-CNN

Faster R-CNN對于每一個候選對象有兩個輸出,一個是類標簽,另一個是包圍框的值。而Mask R-CNN是在Faster R-CNN的基礎上增加第三個分支輸出目標掩碼mask。

骨干架構

為了概括性的描述該方法,本文使用多種架構對Mask R-CNN進行實例化描述,架構主要是ResNet和特征金字塔網絡(FPN)。為清晰起見,將區域進行兩個劃分:

(1)卷積層的主干架構是為了從整幅圖像進行特征提取,本文將其命名為網絡深度特征(network-depth-features)

(2)包圍盒識別(分類和回歸)與mask預測是在每個RoI后面分開配置的,為網絡的head

ResNet:傳統的用ResNet實現的Faster R-CNN,它的特征是通過最后一層卷積層的第4層提取的,將這個叫做C4。一般使用的ResNet的深度為50或者是101,如果是使用50,則將這個主干架構稱為ResNet-50-C4。使用深度為50的可以從下圖看出,在提取特征之后,后面還有一層。所以在網絡的head中會包括ResNet的第5層,用于計算強度。

ResNet+FPN:使用具有橫向連接的自頂向下結構,從單一尺度輸入構建一個網絡內特征金字塔。Faster R-CNN使用FCN作為主干架構,RoI特征是根據它們的尺度從不同層的特征金字塔中提取出來的。使用ResNet-FPN進行特征提取在精度和速度上都展現了很好的效果。在網絡head中,由于FPN已經包括res5所以更有效了,后面只需要使用一些濾波器。

關于兩者的head架構如下圖所示:

Head Architecture

圖的左邊是將ResNet作為骨干架構的頭部,可以看到在輸出特征圖的后面還有一個殘差卷積層conv5。而右邊是通過ResNet+FPN得到的骨干架構,conv5已經在前面使用過了所以頭部結構就不包括它了。可以看到對應不同的骨干架構得到的mask的尺寸也不一樣。80是物體的類別數,而14×14和28×28分別是mask的精度。

Mask的表示

一個mask是對空間布局的編碼,因此不像標簽和包圍盒的值可以直接通過全連接層變為向量,由卷積得到空間架構的mask可以通過像素和像素之間的對應關系自然的進行處理。具體的,對每一個RoI通過FCN預測得到m×m掩碼。這使得mask分支的每一層都明確的保留了m×m的空間布局,不會坍塌成向量。而像素與像素之間的對應關系,這就要求得到的RoI特征需要和明確的像素之間準確的對齊,所以就引入了RoIAlign,它在mask預測分支中起到了至關重要的作用。

RoIAlign

在Fast R-CNN中的RoI池化操作是對連續的坐標x通過計算[x/16]得到的,其中16是特征圖步長,[\cdot ]是取整操作。所以如果是在不整除的情況下,最后得到的坐標與先前的坐標就不對齊了,因為存在取整操作。而且量化也在將固定空間范圍時出現(e.g.7×7)。由于這兩者的量化都使得坐標與原本的坐標不是一一對應的關系了。如下圖所示,虛線代表生成的特征圖,而實現框表示預測得到的RoI的真實坐標,但是由于量化操作,將真實值進行取整變成了在黃色區域了,又有池化操作,比如將其分成2×2的大小,由于是小數,所以取整操作,將其分割成紅線劃分的4部分了。這就是兩次量化操作的影響。

演示圖

由于量化操作因為不能整除的影響較大,所以在RoIAlign池化層中不使用取整操作,具體如下圖所示:


RoIAlign

虛線表示的是特征圖,實現表示的是預測得到RoI區域,將它分成2×2bins,在每個bin里面有規律的采樣了4個點,這四個點的值通過雙線性差值得到,箭頭表示的通過這4個點進行雙線性插值得到箭頭所指示的點的值。之后總計結果(使用最大值或者是平均值)。這樣就做到了像素的一一對應。

multi-task loss

對于每一個采樣的RoI都有損失函數L=L_{cls}+L_{box}+L_{mask},其中分類誤差L_{cls}和包圍盒損失L_{box}與Faster R-CNN定義的一樣。而Mask分支對應于每個RoI的輸出有Km^2維,K表示通道數,而m×m是每類的精度。提供單像素的sigmoid,使用二元交叉熵平均損失定義L_{mask}。對于第k類的RoI,,mask的損失只與第k類有關(其它mask損失對這個誤差影響)。定義的L_{mask}允許網絡生成每個類別的mask且不需要在類別中進行競爭。通過專門的分類分支選擇mask,這將mask和分類進行了解耦。

參考資料

Mask R-CNN Kaiming He Georgia Gkioxari Piotr Dollar Ross Girshick

Feature Pyramid Networks for Object Detection Tsung-Yi Lin, Piotr Dollar , Ross Girshick, Kaiming He, Bharath Hariharan, and Serge Belongie

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks? ?Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun

Fast R-CNN

令人拍案稱奇的Mask RCNN

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容