深度学习(十九)——FCN, SegNet, DeconvNet, DeepLab, ENet, GCN
前DL時代的語義分割(續)
Grab cut
Grab cut是微軟劍橋研究院于2004年提出的著名交互式圖像語義分割方法。與N-cut一樣,grab cut同樣也是基于圖劃分,不過grab cut是其改進版本,可以看作迭代式的語義分割算法。Grab cut利用了圖像中的紋理(顏色)信息和邊界(反差)信息,只要少量的用戶交互操作即可得到比較好的前后背景分割結果。
在Grab cut中,RGB圖像的前景和背景分別用一個高斯混合模型(Gaussian mixture model, GMM)來建模。兩個GMM分別用以刻畫某像素屬于前景或背景的概率,每個GMM高斯部件(Gaussian component)個數一般設為k=5。接下來,利用吉布斯能量方程(Gibbs energy function)對整張圖像進行全局刻畫,而后迭代求取使得能量方程達到最優值的參數作為兩個GMM的最優參數。GMM確定后,某像素屬于前景或背景的概率就隨之確定下來。
在與用戶交互的過程中,Grab cut提供兩種交互方式:一種以包圍框(Bounding box)為輔助信息;另一種以涂寫的線條(Scribbled line)作為輔助信息。以下圖為例,用戶在開始時提供一個包圍框,grab cut默認的認為框中像素中包含主要物體/前景,此后經過迭代圖劃分求解,即可返回扣出的前景結果,可以發現即使是對于背景稍微復雜一些的圖像,grab cut仍有不俗表現。
不過,在處理下圖時,grab cut的分割效果則不能令人滿意。此時,需要額外人為的提供更強的輔助信息:用紅色線條/點標明背景區域,同時用白色線條標明前景區域。在此基礎上,再次運行grab cut算法求取最優解即可得到較為滿意的語義分割結果。Grab cut雖效果優良,但缺點也非常明顯,一是僅能處理二類語義分割問題,二是需要人為干預而不能做到完全自動化。
不難看出,前DL時代的語義分割工作多是根據圖像像素自身的低階視覺信息(Low-level visual cues)來進行圖像分割。由于這樣的方法沒有算法訓練階段,因此往往計算復雜度不高,但是在較困難的分割任務上(如果不提供人為的輔助信息),其分割效果并不能令人滿意。
FCN
Fully Convolutional Networks是Jonathan Long和Evan Shelhamer于2015年提出的網絡結構。
論文:
《Fully Convolutional Networks for Semantic Segmentation》
代碼:
https://github.com/shelhamer/fcn.berkeleyvision.org
Jonathan Long,CMU本科(2010年)+UCB博士在讀。
個人主頁:
https://people.eecs.berkeley.edu/~jonlong/
Evan Shelhamer,UCB博士在讀。
個人主頁:
http://imaginarynumber.net/
Trevor Darrell,University of Pennsylvania本科(1988年)+MIT碩博(1992年、1996年)。MIT教授(1999~2008)。UCB教授。
個人主頁:
https://people.eecs.berkeley.edu/~trevor/
通常CNN網絡在卷積層之后會接上若干個全連接層, 將卷積層產生的特征圖(feature map)映射成一個固定長度的特征向量。以AlexNet為代表的經典CNN結構適合于圖像級的分類和回歸任務,因為它們最后都期望得到整個輸入圖像的一個數值描述(概率),比如AlexNet的ImageNet模型輸出一個1000維的向量表示輸入圖像屬于每一類的概率(softmax歸一化)。
示例:下圖中的貓, 輸入AlexNet, 得到一個長為1000的輸出向量, 表示輸入圖像屬于每一類的概率, 其中在“tabby cat”這一類統計概率最高。
然而CNN網絡的問題在于:全連接層會將原來二維的矩陣(圖片)壓扁成一維的,從而丟失了空間信息。這對于分類是沒有問題的,但對于語義分割顯然就不行了。
上圖是FCN的網絡結構圖,它的主要思想包括:
1.采用end-to-end的結構。
2.取消FC層。當圖片的feature map縮小(下采樣)到一定程度之后,進行反向的上采樣操作,以匹配圖片的語義分割標注圖。這里的上采樣所采用的方法,就是《深度學習(九)》中提到的transpose convolution。
4.由于上采樣會丟失信息。因此,為了更好的預測圖像中的細節部分,FCN還將網絡中淺層的響應也考慮進來。具體來說,就是將Pool4和Pool3的響應也拿來,分別作為模型FCN-16s和FCN-8s的輸出,與原來FCN-32s的輸出結合在一起做最終的語義分割預測(如下圖所示)。
上圖的結構在論文中被稱為Skip Layer。
參考:
http://www.cnblogs.com/gujianhan/p/6030639.html
全卷積網絡FCN詳解
https://zhuanlan.zhihu.com/p/32506912
FCN的簡單實現
SegNet
SegNet是Vijay Badrinarayanan于2015年提出的。
論文:
《SegNet: A Deep Convolutional Encoder-Decoder Architecture for Robust Semantic Pixel-Wise Labelling》
代碼:
https://github.com/alexgkendall/caffe-segnet
除此之外,還有一個demo網站:
http://mi.eng.cam.ac.uk/projects/segnet/
Vijay Badrinarayanan,印度人,班加羅爾大學本科(2001年)+Georgia理工碩士(2005年)+法國INRIA博士(2009年)。劍橋大學講師。
Alex Kendall,新西蘭奧克蘭大學本科(2014年)+劍橋大學博士在讀。本文二作,但是代碼和demo都是他寫的。
Roberto Cipolla,劍橋大學本科(1984年)+賓夕法尼亞大學碩士(1985年)+牛津大學博士(1991年)。劍橋大學教授。
相比于CNN下采樣階段的結構規整,FCN上采樣時的結構就顯得凌亂了。因此,SegNet采用了幾乎和下采樣對稱的上采樣結構。
參考:
http://blog.csdn.net/fate_fjh/article/details/53467948
SegNet
DeconvNet
DeconvNet是韓國的Hyeonwoo Noh于2015年提出的。
論文:
《Learning Deconvolution Network for Semantic Segmentation》
代碼:
https://github.com/HyeonwooNoh/DeconvNet
從上圖可見,DeconvNet和SegNet的結構非常類似,只不過DeconvNet在encoder和decoder之間使用了FC層作為中繼。
類似這樣的encoder-decoder對稱結構的還有U-Net(因為它們的形狀像U字形):
論文:
《U-Net: Convolutional Networks for Biomedical Image Segmentation》
官網:
https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/
Olaf Ronneberger,弗萊堡大學教授,DeepMind研究員。
U-Net使用center crop和concat操作實現了不同層次特征的upsample,這和后面介紹的DenseNet十分類似。
參考:
https://mp.weixin.qq.com/s/ZNNwK1pkL4e0KeYw-UycgA
Kaggle車輛邊界識別第一名解決方案:使用預訓練權重輕松改進U-Net
DeepLab
DeepLab共有3個版本,分別對應3篇論文:
《Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs》
《DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs》
《Rethinking Atrous Convolution for Semantic Image Segmentation》
Liang-Chieh(Jay) Chen,臺灣國立交通大學本科(2004年)+密歇根大學碩士(2010年)+UCLA博士(2015年)。現為Google研究員。
個人主頁:
http://liangchiehchen.com/
DeepLab針對FCN主要做了如下改進:
1.用Dilated convolution取代Pooling操作。因為前者能夠更好的保持空間結構信息。
2.使用全連接條件隨機場(Dense Conditional Random Field)替換最后的Softmax層。這里的CRF或者Softmax,也被稱為語義分割網絡的后端。
常見的后端還有Markov Random Field、Gaussian CRF等。這些都與概率圖模型(Probabilistic Graphical Models)有關。
總之,目前的主流一般是FCN+PGM的模式。然而后端的計算模式和普通的NN有所差異,因此如何將后端NN化,也是當前研究的關鍵點。
參考:
https://mp.weixin.qq.com/s/ald9Dq_VV3PYuN6JoY3E5Q
DeepLabv3+:語義分割領域的新高峰
ENet
ENet是波蘭的Adam Paszke于2016年提出的。
論文:
《ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation》
代碼:
https://github.com/TimoSaemann/ENet
ENet的網絡結構如上圖所示。其中的initial和bottleneck結構分別見下圖的(a)和(b):
從大的結構來看,ENet的設計主要參考了Resnet和SqueezeNet。
ENet對Pooling操作進行了一定的修改:
1.下采樣時,除了輸出Pooling值之外,還輸出Pooling值的位置,即所謂的Pooling Mask。
2.上采樣時,利用第1步的Pooling Mask信息,獲得更好的精確度。
顯然這個修改在思路上和Dilated convolution是非常類似的。
參考:
http://blog.csdn.net/zijinxuxu/article/details/67638290
論文中文版blog
Global Convolutional Network
Global Convolutional Network是孫劍團隊的Chao Peng于2017年提出的。
論文:
《Large Kernel Matters – Improve Semantic Segmentation by Global Convolutional Network》
孫劍,西安交通大學博士(2003年)。后一直在微軟亞洲研究院工作,擔任首席研究員。2016年7月正式加入曠視科技擔任首席科學家。
上圖是論文的關鍵結構GCN,它主要用于計算超大卷積核。這里借鑒了Separable convolution的思想(將一個k x k的卷積運算,轉換成1 x k + k x 1的卷積運算)。
然而正如我們在《深度學習(九)》中指出的,不是所有的卷積核都滿足可分離條件。單純采用先1 x k后k x 1,或者先k x 1后1 x k,效果都是不好的。而將兩者結合起來,可以有效提高計算的精度。
這是GCN提出的另一個新結構。
上圖是GCN的整體結構圖。
參考:
http://blog.csdn.net/bea_tree/article/details/60977512
曠視最新:Global Convolutional Network
語義分割的展望
俗話說,“沒有免費的午餐”(“No free lunch”)。基于深度學習的圖像語義分割技術雖然可以取得相比傳統方法突飛猛進的分割效果,但是其對數據標注的要求過高:不僅需要海量圖像數據,同時這些圖像還需提供精確到像素級別的標記信息(Semantic labels)。因此,越來越多的研究者開始將注意力轉移到弱監督(Weakly-supervised)條件下的圖像語義分割問題上。在這類問題中,圖像僅需提供圖像級別標注(如,有“人”,有“車”,無“電視”)而不需要昂貴的像素級別信息即可取得與現有方法可比的語義分割精度。
另外,示例級別(Instance level)的圖像語義分割問題也同樣熱門。該類問題不僅需要對不同語義物體進行圖像分割,同時還要求對同一語義的不同個體進行分割(例如需要對圖中出現的九把椅子的像素用不同顏色分別標示出來)。
最后,基于視頻的前景/物體分割(Video segmentation)也是今后計算機視覺語義分割領域的新熱點之一,這一設定其實更加貼合自動駕駛系統的真實應用環境。
總結
以上是生活随笔為你收集整理的深度学习(十九)——FCN, SegNet, DeconvNet, DeepLab, ENet, GCN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习(十八)——YOLOv2(2),
- 下一篇: 图像处理理论(四)——HOG, Haar