1. 程式人生 > >基於深度學習的影象分割總結

基於深度學習的影象分割總結

一、影象分割類別

隨著深度學習的發展,在分割任務中出現了許多優秀的網路。根據實際分割應用任務的不同,可以大致將分割分為三個研究方向:語義分割、例項分割、全景分割。這三種分割在某種意義上是具有一定的聯絡的。

語義分割:

畫素級別的語義分割,對影象中的每個畫素都劃分出對應的類別,即實現畫素級別的分類;

例項分割:

類的具體物件,即為例項,那麼例項分割不但要進行畫素級別的分類,還需在具體的類別基礎上區別開不同的例項。

全景分割

全景分割是語義分割和例項分割的泛化,但引入了新的演算法挑戰。與語義分割不同,全景分割需要區分單個目標例項; 這對完全卷積網路提出了挑戰。與例項分割不同的是,在全景分割中目標分割中必須是非重疊的,這對獨立於操作每個目標的基於區域的方法提出了挑戰。

考慮到實際的應用研究中,幾種型別的分割均有很大的相關性,並且對於語義分割在實際的研究中產出比較多,許多的應用場景也進行了大量的嘗試,下面主要介紹關於語義分割的研究情況。

二、CNN影象語義分割基本套路:

1. 下采樣+上取樣:Convlution + Deconvlution/Resize

2. 多尺度特徵融合:特徵逐點相加/特徵channel維度拼接

3. 獲得畫素級別的segement map:對每一個畫素點進行判斷類別

影象的語義分割(Semantic Segmentation)是計算機視覺中非常重要的任務。它的目標是為影象中的每個畫素分類。如果能夠快速準去地做影象分割,很多問題將會迎刃而解。因此,它的應用領域就包括但不限於:自動駕駛、影象美化、三維重建等等。

語義分割是一個非常困難的問題,尤其是在深度學習之前。深度學習使得影象分割的準確率提高了很多,下面我們就總結一下近年來最具有代表性的方法和論文。

Fully Convolutional Networks (FCN)

我們介紹的第一篇論文是Fully Convolutional Networks for Semantic Segmentation,簡稱FCN。這篇論文是第一篇成功使用深度學習做影象語義分割的論文。論文的主要貢獻有兩點:

提出了全卷積網路。將全連線網路替換成了卷積網路,使得網路可以接受任意大小的圖片,並輸出和原圖一樣大小的分割圖。只有這樣,才能為每個畫素做分類。 使用了反捲積層(Deconvolution)。分類神經網路的特徵圖一般只有原圖的幾分之一大小。想要映射回原圖大小必須對特徵圖進行上取樣,這就是反捲積層的作用。雖然名字叫反捲積層,但其實它並不是卷積的逆操作,更合適的名字叫做轉置卷積(Transposed Convolution),作用是從小的特徵圖卷出大的特徵圖。 這是神經網路做語義分割的開山之作,需徹底理解。

DeepLab

DeepLab有v1 v2 v3,第一篇名字叫做DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs。這一系列論文引入了以下幾點比較重要的方法:

第一個是帶洞卷積,英文名叫做Dilated Convolution,或者Atrous Convolution。帶洞卷積實際上就是普通的卷積核中間插入了幾個洞。它的運算量跟普通卷積保持一樣,好處是它的“視野更大了”,比如普通3x3卷積的結果的視野是3x3,插入一個洞之後的視野是5x5。視野變大的作用是,在特徵圖縮小到同樣倍數的情況下可以掌握更多影象的全域性資訊,這在語義分割中很重要。

Pyramid Scene Parsing Network

Pyramid Scene Parsing Network的核心貢獻是Global Pyramid Pooling,翻譯成中文叫做全域性金字塔池化。它將特徵圖縮放到幾個不同的尺寸,使得特徵具有更好地全域性和多尺度資訊,這一點在準確率提升上上非常有用。

Mask R-CNN

Mask R-CNN是大神何凱明的力作,將Object Detection與Semantic Segmentation合在了一起做。它的貢獻主要是以下幾點。

第一,神經網路有了多個分支輸出。Mask R-CNN使用類似Faster R-CNN的框架,Faster R-CNN的輸出是物體的bounding box和類別,而Mask R-CNN則多了一個分支,用來預測物體的語義分割圖。也就是說神經網路同時學習兩項任務,可以互相促進。

第二,在語義分割中使用Binary Mask。原來的語義分割預測類別需要使用0 1 2 3 4等數字代表各個類別。在Mask R-CNN中,檢測分支會預測類別。這時候分割只需要用0 1預測這個物體的形狀面具就行了。

第三,Mask R-CNN提出了RoiAlign用來替換Faster R-CNN中的RoiPooling。RoiPooling的思想是將輸入影象中任意一塊區域對應到神經網路特徵圖中的對應區域。RoiPooling使用了化整的近似來尋找對應區域,導致對應關係與實際情況有偏移。這個偏移在分類任務中可以容忍,但對於精細度更高的分割則影響較大。

為了解決這個問題,RoiAlign不再使用化整操作,而是使用線性插值來尋找更精準的對應區域。效果就是可以得到更好地對應。實驗也證明了效果不錯。下面展示了與之前方法的對比,下面的圖是Mask R-CNN,可以看出精細了很多。

U-Net

U-Net是原作者參加ISBI Challenge提出的一種分割網路,能夠適應很小的訓練集(大約30張圖)。U-Net與FCN都是很小的分割網路,既沒有使用空洞卷積,也沒有後接CRF,結構簡單。

整個U-Net網路結構類似於一個大大的U字母:首先進行Conv+Pooling下采樣;然後Deconv反捲積進行上取樣,crop之前的低層feature map,進行融合;然後再次上取樣。重複這個過程,直到獲得輸出388x388x2的feature map,最後經過softmax獲得output segment map。總體來說與FCN思路非常類似。

語義分割網路在特徵融合時也有2種辦法:

FCN式的逐點相加,對應caffe的EltwiseLayer層,對應tensorflow的tf.add()

U-Net式的channel維度拼接融合,對應caffe的ConcatLayer層,對應tensorflow的tf.concat()

三、綜述介紹

前端:FCN, SegNet/DeconvNet,DeepLab。當然還有一些其他的結構方法,比如有用RNN來做的,還有更有實際意義的weakly-supervised方法等等。

後端:全連線條件隨機場(DenseCRF)、CRFasRNN、馬爾科夫隨機場(MRF)、高斯條件隨機場(G-CRF)等類似有後處理操作。

影象分割資源總結:

基礎學習

1. A 2017 Guide to Semantic Segmentation with Deep Learning 概述——用深度學習做語義分割

2. 從全卷積網路到大型卷積核:深度學習的語義分割全指南

3. Fully Convolutional Networks

4. 語義分割中的深度學習方法全解:從FCN、SegNet到各代DeepLab

5. 語義分割實際應用

6. Segmentation Results: VOC2012 PASCAL語義分割比賽排名

7. 影象語義分割之FCN和CRF

強化學習

綜述資料

1. A Review on Deep Learning Techniques Applied to Semantic Segmentation Alberto Garcia-Garcia, Sergio Orts-Escolano, Sergiu Oprea, Victor Villena-Martinez, Jose Garcia-Rodriguez 2017

2. Computer Vision for Autonomous Vehicles: Problems, Datasets and State-of-the-Art

3。 基於內容的影象分割方法綜述 姜 楓 顧 慶 郝慧珍 李 娜 郭延文 陳道蓄 2017

視訊資料

1. CS231n: Convolutional Neural Networks for Visual Recognition Lecture 11 Detection and Segmentation

2. Machine Learning for Semantic Segmentation - Basics of Modern Image Analysis

程式碼資料:

Semantic segmentation

Instance aware segmentation

Satellite images segmentation

Video segmentation

Autonomous driving

Annotation Tools:

datasets

領域專家

1. Jonathan Long

2. Liang-Chieh Chen

3. Hyeonwoo Noh

4. Bharath Hariharan

5. Fisher Yu

6. Vijay Badrinarayanan

7. Guosheng Lin