目標檢測經典網絡之Mask R-CNN

Mask R-CNN

Mask R-CNN是He Kaiming大神於2017年的力作,其在進行目標檢測的同時進行實例分割,取得了出色的效果,其在沒有任何trick的情況下,取得了2016年COCO比賽的冠軍,其網絡設計也比較簡單,在Faster R-CNN的網絡結構基礎上,在原本的兩個分支上(分類+迴歸)增加了一個分支進行圖像分割,如下圖所示:

摘要

  • Mask R-CNN可以看作是一個通用實例分割架構;
  • Mask R-CNN以Faster R-CNN爲原型,增加了一個mask分支做分割任務;
  • Mask R-CNN比Faster R-CNN速度慢一些,達到了5fps;
  • Mask R-CNN可用於人體姿態估計等其他任務。

Mask R-CNN詳細介紹

在介紹Mask R-CNN之前,首先了解一下什麼是分割?

  • 語義分割(semantic segmentation):對圖像中逐像素進行分類;
  • 實例分割(instance segmentation):對圖像中的object進行目標檢測,並對檢測到的object進行分割;
  • 全景分割(panopticon segmentation):對圖像中的所有物體進行描述。

下面這張圖很好的表示了這幾種分割的區別,如下圖可見,全景分割難度最大:

在這裏插入圖片描述

Mask R-CNN屬於實例分割,首先實例分割的難點在於:需要同時檢測出目標的位置並且對目標進行分割,所以這就需要結合目標檢測(bounding box位置)以及語義分割(對像素進行分類,分割出目標)方法。因此,何凱明大神結合目標檢測領域表現較好的Faster R-CNN和語義分割領域表現較好的FCN,並取得了很好的效果。

那麼Mask R-CNN是怎麼做的呢?

Mask R-CNN是建立在Faster R-CNN基礎上的,那麼我們首先回顧一下Faster R-CNN,Faster R-CNN是典型的two stage的目標檢測方法,首先生成 RPN候選區域, 然後候選區域經過Roi Pooling進行目標檢測(包括目標分類以及座標迴歸),分類與迴歸共享前面的網絡。
Mask R-CNN做了哪些改進?Mask R-CNN同樣是two-stage的,生成RPN部分與Faster R-CNN相同,然後,Mask R-CNN在Faster R-CNN的基礎上,增加了第三個支路,輸出每個ROI的Mask(這裏是區別於傳統方法的最大的不同,傳統方法一般是先利用算法生成mask然後再進行分類,這裏平行進行),還有一個改進是將Faster R-CNN的ROI pooling改爲ROI Align,使得像素更精確一些。

多任務損失函數: 
前兩個loss與Faster R-CNN相同,Mask分支每個RoI的輸出維度爲K*m*m ,表示K個分辨率爲m × m的binary masks。每個類別一個分辨率爲m × m的binary masks,K表示classes。每個像素採用sigmoid,並定義Lmask爲平均二進制交叉熵損失。ground-truth爲k的RoI,僅在第k個mask上計算Lmask(其他掩模輸出不計入損失)。

優勢:FCNs像素級softmax和multinomial交叉熵損失,masks跨類別競爭。Mask R-CNN,classification分支得到類別,像素級的sigmod和binary損失,不會垮類別競爭。這是改善實例分割結果的關鍵。

另一個創新點:ROI Align

另外由於分割需要較準確的像素位置,而Faster R-CNN方法中,在進行Roi-Pooling之前需要進行兩次量化操作(第一次是原圖像中的目標到conv5之前的縮放,比如縮放32倍,目標大小是600,結果不是整數,需要進行量化捨棄,第二次量化是比如特徵圖目標是5*5,ROI-pooling後是2*2,這裏由於5不是2的倍數,需要再一次進行量化,這樣對於Roi Pooling之後的結果就與原來的圖像位置相差比較大了),因此作者對ROI-Pooling進行了改進,提出了RoI Align方法,在下采樣的時候,對像素進行對準,使得像素更準確一些。

關於ROI Align具體是如何做的請看這篇博客《目標檢測之TROI pooling及其改進
 

發佈了28 篇原創文章 · 獲贊 19 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章