圖像語義分割入門:FCN/U-Net網絡解析

2021-02-23 機器學習AI算法工程


向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。

2 FCN結構

整個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融合有利於提高分割準確性。

3 什麼是上採樣?

說了半天,到底什麼是上採樣?

實際上,上採樣(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查看網絡結構。這裡解釋裡面的難點:

4 U-Net

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

長按圖片,識別二維碼

相關焦點

  • 一文概覽主要語義分割網絡:FCN,SegNet,U-Net...
    /80432960圖像的語義分割是將輸入圖像中的每個像素分配一個語義類別,以得到像素化的密集分類。雖然自 2007 年以來,語義分割/場景解析一直是計算機視覺社區的一部分,但與計算機視覺中的其他領域很相似,自 2014 年 Long 等人首次使用全卷積神經網絡對自然圖像進行端到端分割,語義分割才有了重大突破。
  • 深度學習第33講:CNN圖像語義分割和實例分割綜述
    在此前的經典網絡中,經過多層卷積和池化之後輸出的特徵圖尺寸會逐漸變小,所以對於語義分割任務我們需要將逐漸變小的特徵圖給還原到輸入圖像的大小。      為了實現上述目標,現有的語義分割等圖像分割模型的一種通用做法就是採用編碼和解碼的網絡結構,此前的多層卷積和池化的過程可以視作是圖像編碼的過程,也即不斷的下採樣的過程。
  • 全卷積網絡FCN進行圖像分割
    神經網絡大神Jonathan Long發表了《Fully ConvoluTIonal Networks for SemanTIc SegmentaTIon》在圖像語義分割挖了一個坑,於是無窮無盡的人往坑裡面跳。本文引用地址:http://www.eepw.com.cn/article/201710/365497.htm
  • 圖像分割的U-Net系列方法
    該方法也在皮膚病圖像、視網膜圖像、肺部圖像等幾個公共數據集驗證了其性能,代碼連結:https://github.com/LeeJunHyun/Image_Segmentation#r2u-net從左至右分別是一幅圖像和隨著訓練次數的增加該圖像中得到的注意力權重。可見得到的注意力權重傾向於在目標器官區域取得大的值,在背景區域取得較小的值,有助於提高圖像分割的精度。
  • 語義分割網絡經典:FCN與SegNet
    作者:石文華          編輯:田  旭           語義分割網絡經典
  • FCN、Unet、Unet++:醫學圖像分割網絡一覽
    Unet在醫學圖像上的適用與CNN分割算法的簡要總結一、相關知識點解釋語義分割(Semantic Segmentation):就是對一張圖像上的所有像素點進行分類。(eg: FCN/Unet/Unet++/...)
  • [Pytorch]教程-使用 torchvision 進行語義分割
    ▌目錄:PyTorch 語義分割1. 什麼是語義分割2. 語義分割的應用3. 使用 torchvision 進行語義分割4. FCN vs DeepLabv3 模型比較1. 什麼是語義分割?語義分割是一種圖像分析過程中要用到的技術,我們通過該技術將圖像中的每個像素歸為哪一類。
  • 圖像分割中的深度學習:U-Net 體系結構
    我們將要探討的論文是U-Net:用於生物醫學圖像分割的卷積網絡(https://arxiv.org/pdf/1505.04597.pdf)。同時,目前也出現了很多利用卷積神經網絡進行分割的方法,這些方法已成為解決圖像分割中更高級任務中不可或缺的方法。在這篇文章中,我們將仔細看看一個這樣的架構:u-net。深度學習是需要數據集來訓練模型的。但是對於數據的獲取有一定難度。對於某一個對象而言,我們並沒有足夠的數據進行訓練。在這種情況下,往往需要花費時間、金錢,最重要的是硬體設備。
  • FCN、Unet、Unet++等:圖像分割那些事兒
    本文轉載自【微信公眾號:機器學習算法與Python精研 ,ID:AITop100】,經微信公眾號授權轉載,如需轉載原文作者聯繫本文先釐清了語義分割、實例分割和全景分割等定義的區別。在此基礎上,進一步分析了FCN、Unet、Unet++等算法在醫學圖像上的適用情況。
  • 語義分割入門的總結
    目的:給定一張圖像,我們要對這張圖像上的每個pixel逐一進行分類,結果展示如下圖:上圖中的實例分割是語義分割的延伸,要區別出相同類別的不同個體。這使得 CRFs 成為語義分割的理想候選者. 這裡介紹下 CRFs 在語義分割中的應用.圖像中的每個像素都是與有限的可能狀態集相關. 在語義分割中,target 類別標籤就是可能狀態集. 將一個狀態(或,label u) 分配給的單個像素 x 的成本(cost) 被稱為一元成本(unary cost).
  • 圖像語義分割
    圖像語義分割是計算機視覺中十分重要的領域。圖像語義分割是圖像處理和計算機視覺技術中關於圖像理解的重要的一環。語義分割對圖像中的每一個像素點進行分類,確定每個點的類別(如屬於背景、邊緣或身體等)需要和實例分割區分開來。語義分割沒有分離同一類的實例;它關心的只是每個像素的類別,如果輸入對象中有兩個相同類別的對象,則分割本身不會將它們區分為單獨的對象。
  • 語義分割入門的一點總結
    這使得 CRFs 成為語義分割的理想候選者. 這裡介紹下 CRFs 在語義分割中的應用.圖像中的每個像素都是與有限的可能狀態集相關. 在語義分割中,target 類別標籤就是可能狀態集. 將一個狀態(或,label u) 分配給的單個像素 x 的成本(cost) 被稱為一元成本(unary cost).
  • 語義分割+視頻分割開原始碼集合
    來源:CSDN博客(http://blog.csdn.net/zhangjunhit/article/details/78190283)
  • 10分鐘看懂全卷積神經網絡( FCN ):語義分割深度模型先驅
    語義分割簡單地說,分割就是摳圖。語義分割,就是按圖像中物體表達的含義進行摳圖。現在ps已經集成很多自動分割的功能,相比舊版本軟體,新軟體提高了美工人員的摳圖和美圖的效率。如果我們能在更複雜的環境下,完成自動分割圖像進行分析,這將降低多少人工?這類場景我們很熟悉,比如現在快速發展的自動駕駛。
  • 2019 語義分割指南
    語義分割是指將圖像中的每個像素歸於類標籤的過程,這些類標籤可以包括一個人、汽車、鮮花、一件家具等。我們可以將語義分割認為是像素級別的圖像分類。例如,在有許多汽車的圖像中,分割會將所有對象標記為汽車對象。然後,一個稱為實例分割的模型能夠標記一個出現在圖像中的物體的獨立實例。
  • 實戰 | 基於SegNet和U-Net的遙感圖像語義分割
    本文由Madcola授權轉載,禁止二次轉載原文地址:https://www.cnblogs.com/skyfsm/p/8330882.html上兩個月參加了個比賽,做的是對遙感高清圖像做語義分割,美其名曰「天空之眼」。
  • 醫學圖像分割最佳方法的全面比較:U-Net和U-Net++
    介紹語義分割是計算機視覺的一個問題,我們的任務是使用圖像作為輸入,為圖像中的每個像素分配一個類。在語義分割的情況下,我們不關心是否有同一個類的多個實例(對象),我們只是用它們的類別來標記它們。語義分割在生物醫學圖像分析中有著廣泛的應用:x射線、MRI掃描、數字病理、顯微鏡、內窺鏡等。
  • 圖像分割二十年,Mask R-CNN 影響力僅排第十?
    Mask R-CNN不僅在實例分割任務中表現優異,還是一個非常靈活的框架,可以通過增加不同的分支完成目標分類、目標檢測、語義分割、實例分割、人體姿勢識別等多種不同的任務。Thomas發布信息:2015,18th International Conference on Medical Image Computing and Computer-Assisted Intervention (MICCAI) 代碼:https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net
  • 語義分割領域開山之作:Google提出用神經網絡搜索實現語義分割
    ,他為雷鋒網(公眾號:雷鋒網) AI 科技評論撰寫了 Google 利用神經網絡搜索實現語義分割的獨家解讀。在過去的一年中,元學習(meta-learning)在大規模圖像分類問題上,性能已經實現超越人類手工設計的神經網架構。基於 NAS 的圖像分類遷移到高解析度的圖像處理(語義分割、目標識別、實例分割)有很大的挑戰:(1)神經網絡的搜索空間和基本運算單元有本質不同。(2)架構搜索必須固有地在高解析度圖像上運行,因此不能實現從低解析度圖像訓練模型遷移到高解析度圖像。
  • 入門 | 一文了解什麼是語義分割及常用的語義分割方法有哪些
    語義分割是計算機視覺中的基本任務,在語義分割中我們需要將視覺輸入分為不同的語義可解釋類別,「語義的可解釋性」即分類類別在真實世界中是有意義的。例如,我們可能需要區分圖像中屬於汽車的所有像素,並把這些像素塗成藍色。來源:Zhao 等人的 ICNet(2017):語義分割的演示視頻。