向AI轉型的程式設計師都關注了這個號👇👇👇
機器學習AI算法工程 公眾號:datayx
圖像語義分割(Semantic Segmentation)是圖像處理和是機器視覺技術中關於圖像理解的重要一環,也是 AI 領域中一個重要的分支。語義分割即是對圖像中每一個像素點進行分類,確定每個點的類別(如屬於背景、人或車等),從而進行區域劃分。目前,語義分割已經被廣泛應用於自動駕駛、無人機落點判定等場景中。
而截止目前,CNN已經在圖像分類分方面取得了巨大的成就,湧現出如VGG和Resnet等網絡結構,並在ImageNet中取得了好成績。CNN的強大之處在於它的多層結構能自動學習特徵,並且可以學習到多個層次的特徵:
較淺的卷積層感知域較小,學習到一些局部區域的特徵;
較深的卷積層具有較大的感知域,能夠學習到更加抽象一些的特徵。
這些抽象特徵對物體的大小、位置和方向等敏感性更低,從而有助於分類性能的提高。這些抽象的特徵對分類很有幫助,可以很好地判斷出一幅圖像中包含什麼類別的物體。圖像分類是圖像級別的!
與分類不同的是,語義分割需要判斷圖像每個像素點的類別,進行精確分割。圖像語義分割是像素級別的!但是由於CNN在進行convolution和pooling過程中丟失了圖像細節,即feature map size逐漸變小,所以不能很好地指出物體的具體輪廓、指出每個像素具體屬於哪個物體,無法做到精確的分割。
針對這個問題,Jonathan Long等人提出了Fully Convolutional Networks(FCN)用於圖像語義分割。自從提出後,FCN已經成為語義分割的基本框架,後續算法其實都是在這個框架中改進而來。
FCN論文地址:FCN paper
https://arxiv.org/abs/1411.4038
FCN原作代碼:FCN github
https://github.com/shelhamer/fcn.berkeleyvision.org
1 FCN改變了什麼?對於一般的分類CNN網絡,如VGG和Resnet,都會在網絡的最後加入一些全連接層,經過softmax後就可以獲得類別概率信息。但是這個概率信息是1維的,即只能標識整個圖片的類別,不能標識每個像素點的類別,所以這種全連接方法不適用於圖像分割。
而FCN提出可以把後面幾個全連接都換成卷積,這樣就可以獲得一張2維的feature map,後接softmax獲得每個像素點的分類信息,從而解決了分割問題,如圖4。
整個FCN網絡基本原理如圖5(只是原理示意圖):
image經過多個conv和+一個max pooling變為pool1 feature,寬高變為1/2
pool1 feature再經過多個conv+一個max pooling變為pool2 feature,寬高變為1/4
pool2 feature再經過多個conv+一個max pooling變為pool3 feature,寬高變為1/8
.
直到pool5 feature,寬高變為1/32。
那麼:
對於FCN-32s,直接對pool5 feature進行32倍上採樣獲得32x upsampled feature,再對32x upsampled feature每個點做softmax prediction獲得32x upsampled feature prediction(即分割圖)。
對於FCN-16s,首先對pool5 feature進行2倍上採樣獲得2x upsampled feature,再把pool4 feature和2x upsampled feature逐點相加,然後對相加的feature進行16倍上採樣,並softmax prediction,獲得16x upsampled feature prediction。
對於FCN-8s,首先進行pool4+2x upsampled feature逐點相加,然後又進行pool3+2x upsampled逐點相加,即進行更多次特徵融合。具體過程與16s類似,不再贅述。
作者在原文種給出3種網絡結果對比,明顯可以看出效果:FCN-32s < FCN-16s < FCN-8s,即使用多層feature融合有利於提高分割準確性。
說了半天,到底什麼是上採樣?
實際上,上採樣(upsampling)一般包括2種方式:
Resize,如雙線性插值直接縮放,類似於圖像縮放(這種方法在原文中提到)
Deconvolution,也叫Transposed Convolution
什麼是Resize就不多說了,這裡解釋一下Deconvolution。
對於一般卷積,輸入藍色4x4矩陣,卷積核大小3x3。當設置卷積參數pad=0,stride=1時,卷積輸出綠色2x2矩陣,如圖6。
而對於反卷積,相當於把普通卷積反過來,輸入藍色2x2矩陣,卷積核大小還是3x3。當設置反卷積參數pad=0,stride=1時輸出綠色4x4矩陣,如圖7,這相當於完全將圖4倒過來(其他更多卷積示意圖點這裡)。
https://github.com/vdumoulin/conv_arithmetic
傳統的網絡是subsampling的,對應的輸出尺寸會降低;upsampling的意義在於將小尺寸的高維度feature map恢復回去,以便做pixelwise prediction,獲得每個點的分類信息。
上採樣在FCN網絡中的作用如圖8,明顯可以看到經過上採樣後恢復了較大的pixelwise feature map(其中最後一個層21-dim是因為PACSAL數據集有20個類別+Background)。這其實相當於一個Encode-Decode的過程。
具體的FCN網絡結構,可以在fcn caffe prototext (https://github.com/shelhamer/fcn.berkeleyvision.org/blob/master/pascalcontext-fcn8s/train.prototxt )中查到,建議使用Netscope查看網絡結構。這裡解釋裡面的難點:
U-Net原作者官網
https://link.zhihu.com/?target=https%3A//lmb.informatik.uni-freiburg.de/Publications/2015/RFB15a/
U-Net是原作者參加ISBI Challenge提出的一種分割網絡,能夠適應很小的訓練集(大約30張圖)。U-Net與FCN都是很小的分割網絡,既沒有使用空洞卷積,也沒有後接CRF,結構簡單。
整個U-Net網絡結構如圖9,類似於一個大大的U字母:首先進行Conv+Pooling下採樣;然後Deconv反卷積進行上採樣,crop之前的低層feature map,進行融合;然後再次上採樣。重複這個過程,直到獲得輸出388x388x2的feature map,最後經過softmax獲得output segment map。總體來說與FCN思路非常類似。
為何要提起U-Net?是因為U-Net採用了與FCN完全不同的特徵融合方式:拼接!
與FCN逐點相加不同,U-Net採用將特徵在channel維度拼接在一起,形成更「厚」的特徵。所以:
語義分割網絡在特徵融合時也有2種辦法:
FCN式的逐點相加,對應caffe的EltwiseLayer層,對應tensorflow的tf.add()
U-Net式的channel維度拼接融合,對應caffe的ConcatLayer層,對應tensorflow的tf.concat()
記得劃重點哦。
相比其他大型網絡,FCN/U-Net還是蠻簡單的,就不多廢話了。
總結一下,CNN圖像語義分割也就基本上是這個套路:
下採樣+上採樣:Convlution + Deconvlution/Resize
多尺度特徵融合:特徵逐點相加/特徵channel維度拼接
獲得像素級別的segement map:對每一個像素點進行判斷類別
看,即使是更複雜的DeepLab v3+依然也是這個基本套路(至於DeepLab以後再說)。
所以作為一篇入門文章,讀完後如果可以理解這3個方面,也就可以了;當然CNN圖像語義分割也算入門了。
參考連結 https://zhuanlan.zhihu.com/p/22976342
閱讀過本文的人還看了以下文章:
基於40萬表格數據集TableBank,用MaskRCNN做表格檢測
《基於深度學習的自然語言處理》中/英PDF
Deep Learning 中文版初版-周志華團隊
【全套視頻課】最全的目標檢測算法系列講解,通俗易懂!
《美團機器學習實踐》_美團算法團隊.pdf
《深度學習入門:基於Python的理論與實現》高清中文PDF+源碼
特徵提取與圖像處理(第二版).pdf
python就業班學習視頻,從入門到實戰項目
2019最新《PyTorch自然語言處理》英、中文版PDF+源碼
《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》完整版PDF+附書代碼
《深度學習之pytorch》pdf+附書源碼
PyTorch深度學習快速實戰入門《pytorch-handbook》
【下載】豆瓣評分8.1,《機器學習實戰:基於Scikit-Learn和TensorFlow》
《Python數據分析與挖掘實戰》PDF+完整源碼
汽車行業完整知識圖譜項目實戰視頻(全23課)
李沐大神開源《動手學深度學習》,加州伯克利深度學習(2019春)教材
筆記、代碼清晰易懂!李航《統計學習方法》最新資源全套!
《神經網絡與深度學習》最新2018版中英PDF+源碼
將機器學習模型部署為REST API
FashionAI服裝屬性標籤圖像識別Top1-5方案分享
重要開源!CNN-RNN-CTC 實現手寫漢字識別
yolo3 檢測出圖像中的不規則漢字
同樣是機器學習算法工程師,你的面試為什麼過不了?
前海徵信大數據算法:風險概率預測
【Keras】完整實現『交通標誌』分類、『票據』分類兩個項目,讓你掌握深度學習圖像分類
VGG16遷移學習,實現醫學圖像識別分類工程項目
特徵工程(一)
特徵工程(二) :文本數據的展開、過濾和分塊
特徵工程(三):特徵縮放,從詞袋到 TF-IDF
特徵工程(四): 類別特徵
特徵工程(五): PCA 降維
特徵工程(六): 非線性特徵提取和模型堆疊
特徵工程(七):圖像特徵提取和深度學習
如何利用全新的決策樹集成級聯結構gcForest做特徵工程並打分?
Machine Learning Yearning 中文翻譯稿
螞蟻金服2018秋招-算法工程師(共四面)通過
全球AI挑戰-場景分類的比賽源碼(多模型融合)
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(列印收藏)
python+flask搭建CNN在線識別手寫中文網站
中科院Kaggle全球文本匹配競賽華人第1名團隊-深度學習與特徵工程
不斷更新資源
深度學習、機器學習、數據分析、python
搜索公眾號添加: datayx
機大數據技術與機器學習工程
搜索公眾號添加: datanlp
長按圖片,識別二維碼