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的第一名】

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM