圖像分割與FCN

一. 圖像語義分割

       傳統的圖像分割方法主要包括以下幾種:

1)基於邊緣檢測

2)基於閾值分割

      比如直方圖,顏色,灰度等

3)水平集方法

        這裏我們要說的是語義分割,什麼是語義分割呢?先來看張圖:

        

       將目標按照其分類進行像素級的區分,比如區分上圖的 摩托車 和 騎手,這就是語義分割,語義分割賦予了場景理解更進一步的手段。

       我們直接跳過傳統的語義分割方法,比如 N-Cut,圖割法等,直接進入深度學習。


二. FCN 的引入

       CNN 在圖像分割中應用,起源於2015年的這篇影響深遠的文章:

       Fully Convolutional Networks for Semantic Segmentation點擊下載

       這裏提到的就是全卷積網絡,那麼這個全卷積是如何理解 和 Work 的呢?來看一個對比:

           

      上圖紅色部分 對應CNN分類網絡的最後三層,也就是 FC 全連接,通過 Softmax 得到一個1000維的向量(基於Imagenet的圖像分類),表示1000個不同的分類對應的概率,“tabby cat” 作爲概率最高的結果。

      下圖藍色部分將 分類網絡對應的最後三層全連接 替換成了 卷積。整個網絡全部通過卷積連接,so called 全卷積。這麼做的目的是什麼呢?

● 通過像素分類來定義語義分割

       全卷積網絡的輸出是一張分割圖,如何輸出這張分割圖呢? 通過卷積,圖像的分辨率逐漸降低,這裏需要 引入一個概念,就是上採樣,即將低分辨率的圖像放大到和原始圖像同分辨率上,這是一個關鍵點。比如經過5次卷積(pooling)後,圖像的分辨率依次縮小了2,4,8,16,32倍。對於最後一層的輸出圖像,需要進行32倍的上採樣,得到原圖大小一樣的圖像。

       這個上採樣是通過 反捲積(DeConvolution)實現的。來直觀看一下反捲積的過程:

        

       加上反捲積過程,整個的網絡可以描述成:

     

       由於前面採樣部分過大,有時候會導致後面進行反捲積得到的結果分辨率比較低,導致一些細節丟失,解決的一個辦法是 將 第 3|4|5 層反捲積結果疊加,結果我們就不貼了,肯定是上採樣倍數越小,結果越好,來看疊加示意圖(這種方式應該不陌生): 

        

三. FCN 的改進

       雖然 FCN引領了CNN基於語義分割的方向,但仍有很多地方需要改進,比如上採樣導致的像素分割不精細,效率也不夠快等等,我們相信一定有辦法讓其 更高效、更精細。這裏提到的一個 方法就是結合 CRF

       CRF 全稱是 Conditional Random Field,中文叫 “條件隨機場”,首先來理解什麼是隨機場,一堆隨機的樣本就可以理解爲是隨機場,假設這些樣本之間有關聯關係,就成立條件隨機場,CRF 最早在深度學習的 NLP 領域有比較多的應用,可以理解爲語境的上下文關係,可以參考下面這篇文章:

       Introduction to Conditional Random Fields

       第一個改進 來自於 UCLA 的 Liang-Chieh Chen,在像素分類後疊加了一個 Fully Connected Conditional Random Fields(全連接的條件隨機場)。

       論文地址:Semantic image segmentation with deep convolutional nets and fully connected crfs

        

       通過上圖示意可以看到,Fully Connected CRF 在前面 FCN 輸出的基礎上,以全連接的形式,實現了後處理過程,使得像素分割更加細緻,具體請參考論文。


       接下來的改進有 通過 RNN + CRF 的idea:

       參考論文:Conditional random fields as recurrent neural networks

       根據實驗對比效果來看,相當不錯(注:DeepLab 就是上面的 Full connected CRF方法): 

        

       針對FCN的改進會在近兩年一直持續,作者最關注的還是,Mask-RCNN,將目標檢測與分割一起work的方法,接下來在下一篇文章介紹!

       “桃李不言,下自成蹊”,FCN 當真是屬於這個級別的貢獻,引領了在這條道路上的每一次Follow。


四. 實例分割(Instance Segment)

       實例分割 與 語義分割的區別是要區分出每個目標(不僅僅是像素),相當於 檢測+分割,通過一張圖來直觀理解一下:

        

       關於 實例分割 的一篇典型論文 MaskRCNN,可以參考【Mask RCNN】,代碼實現可以參考【淺入淺出TensorFlow 8 - 行人分割

相關論文:

       Instace-sensitive Fully Convolutional Networks.ECCV 2016【2016.3月上傳到arxiv

       R-FCN:Object Detection via Region-based Fully Convolutional Networks.NIPS 2016【2016.7月上傳到arxiv】

       Fully Convolutional Instance-aware Semantic Segmentation.xxxx 2017【2016年11月上傳到arxiv,MSCOCO2016的第一名】


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