1. 程式人生 > >目標檢測(二十)--Mask R-CNN

目標檢測(二十)--Mask R-CNN

大神都去哪了? Facebook AI Research (FAIR) 越來越厲害了,強強聯合

本文主要講 Faster R-CNN 拓展到影象分割上,提出了 Mask R-CNN 簡單快捷的解決 Instance segmentation,什麼是 Instance segmentation,就是將一幅影象中所有物體框出來,並將物體進行畫素級別的分割提取。如下圖示例:
這裡寫圖片描述

2 Related Work
R-CNN: 基於候選區域的物體檢測成為目標檢測演算法中最流行的的,尤其是 Faster R-CNN 效果很好。

Instance Segmentation: 受到 R-CNN 的影響,大家紛紛採用R-CNN 思路來做 分割,文獻【8】提出的 fully convolutional instance segmentation 是效果最好的。但是有明顯的問題,如下圖所示:
這裡寫圖片描述

3 Mask R-CNN
Mask R-CNN在概念上是很簡單:對於每一個候選區域 Faster R-CNN 有兩個輸出,一個類別標籤,一個矩形框座標資訊。這裡我們加了第三個分支用於輸出 object mask即分割出物體。

Faster R-CNN: 這裡簡要回顧一下 Faster R-CNN,它有兩個步驟組成,Region Proposal Network (RPN) 用於提取候區域,第二個步驟本質上和Fast R-CNN一樣,使用 RoIPool 對候選區域提取特徵進行類別分類和座標迴歸。用於兩個步驟的特徵是可以共享的,這樣可以提高速度。

Mask R-CNN: Mask R-CNN 也是採用了兩個步驟,第一個步驟就是 RPN 提取候選區域,在第二個步驟,平行於預測類別和座標資訊,對於每個 RoI, Mask R-CNN 輸出一個二值 mask。這與當前大部分系統不一樣,當前這些系統的類別分類依賴於 mask 的預測。我們還是沿襲了 Fast R-CNN 的精神,它將矩形框分類和座標迴歸並行的進行,這麼做很大的簡化了R-CNN的流程。

在訓練階段,我們對每個樣本的 RoI 定義了多工損失函式 L = L_cls + L_box + L_mask ,其中 L_cls 和 L_box 的定義和Fast R-CNN 是一樣的。在 mask 分支中對每個 RoI 的輸出是 K*m*m,表示K個 尺寸是 m*m的二值 mask,K是物體類別數目,。這裡我們使用了 per-pixel sigmoid,將 的損失函式定義為 L_mask average binary cross-entropy,我們的 L_mask 只定義對應類別的 mask損失,其他類別的mask輸出不會影響該類別的 loss。

我們定義 L_mask 的方式使得我們的網路在生成每個類別的 mask 不會受類別競爭影響,解耦了mask和類別預測。

Mask Representation: 對於每個 RoI 我們使用 一個 FCN 網路來預測 m*m mask。m*m是一個小的特徵圖尺寸,如何將這個小的特徵圖很好的對映到原始影象上?為此我們提出了一個 叫 RoIAlign 的網路層來解決該問題,它在 mask 預測中扮演了重要的角色。

RoIAlign: RoIPool 是一個標準的提特徵運算,它從每個 RoI 提取出一個小的特徵( 7×7),RoIPool 首先對浮點的 RoI 進行量化,然後再提取分塊直方圖,最後通過 最大池化 組合起來。這種分塊直方圖對於分類沒有什麼大的影響,但是對畫素級別精度的 mask 有很大影響。

為了解決上述問題,我們提出了一個 RoIAlign 網路層 解決 RoIPool 量化引入的問題,將提取的特徵和輸入合適的對應起來。我們的改變也是很簡單的:我們避免對 RoI 的邊界或 bins 進行量化。使用線性差值精確計算每個 RoI bin 最後組合起來。

Network Architecture: 為了驗證我們方法的適應性,我們在不同的網路系統中實現了 Mask R-CNN,這裡主要分別考慮了文獻【14,21]中的兩個系統,如下圖所示:
這裡寫圖片描述

其中採用 FPN 的架構在精度和速度上都更勝一籌。

3.1. Implementation Details
Training: 對於 mask loss L_mask 只在正樣本的 RoIs 上面定義。
我們採用文獻【9】的影象-中心 訓練方法。將影象長寬較小的一側歸一化到 800個畫素。在每個 mini-batch 上每個 GPU 有2個影象,每個影象 N個樣本 RoIs,正負樣本比例 1:3.其中 對於 C4 框架的 N=64, 對 FPN框架的 N=512。在8個GPU上訓練,還有其他一些引數設定。

Inference: 在測試階段,C4的候選區域個數是300, FPN 是 1000.對這些候選區域我們進行座標迴歸,再非極大值抑制。然後對前100個得分最高的檢測框進行 mask 分支運算。這樣做可以提高速度改善精度。在 mask 分支中 ,我們對每個 RoI 給出 K 個 mask預測,但是我們只使用 分類分支給出的那個類別對應的 mask。然後我們將 m×m 浮點 mask 歸一化到 RoI 尺寸,使用一個0.5閾值進行二值化。

  1. Experiments: Instance Segmentation
    更多的圖片結果:

這裡寫圖片描述

Instance segmentation:

這裡寫圖片描述

一些對比:
這裡寫圖片描述

Object detection:
這裡寫圖片描述

Human Pose Estimation:
這裡寫圖片描述

4.4. Timing
Inference:
ResNet-101-FPN model runs at 195ms per image on an Nvidia Tesla M40 GPU (plus
15ms CPU time resizing the outputs to the original resolution)

ResNet-101-C4 : ∼400ms