天天看點

10分鐘看懂全卷積神經網絡(FCN):語義分割深度模型先驅

點選關注我 然後看我資料 + 群 可以免費擷取學習資料哈

語義分割

簡單地說,分割就是摳圖。語義分割,就是按圖像中物體表達的含義進行摳圖。

現在ps已經內建很多自動分割的功能,相比舊版本軟體,新軟體提高了美勞工員的摳圖和美圖的效率。

如果我們能在更複雜的環境下,完成自動分割圖像進行分析,這将降低多少人工?這類場景我們很熟悉,比如現在快速發展的自動駕駛。

10分鐘看懂全卷積神經網絡(FCN):語義分割深度模型先驅

攝像頭采集到車前景象,通過模型分析,我們可以自動篩選出地面、交通線、人行道、行人、建築、樹、還有其他基礎設施。

相比傳統的目辨別别,語義分割它更強大。語義分割模型不僅可以識别簡單的類别,而且還可以進行多目标、多類别、複雜目标以及分割目标。

比如圖中我們可以看到路面和交通辨別線有清晰的分割,路面和人行道也同樣如此,甚至路燈和建築也可以清楚地分離出來。

這項技術在醫學上也同樣作用巨大,我們可以識别病竈并将其與正常組織分割,大腦神經系統内我們可以分離出同一組功能的神經結構,這些如何依賴人工去完成,所需的時間至少為數小時,而交給機器,那麼數秒鐘即可完成。

10分鐘看懂全卷積神經網絡(FCN):語義分割深度模型先驅

是以依靠分離模型,我們可以把重複性的勞動交給它去完成,人工隻需要對輸出結果進行二次分析和篩選,大大加快了提取過程和分析精度。

通過上面的介紹和例子,我們可以總結下優秀的語義分割摸應該具有的幾個特性:

  1. 分割出來的不同語義區域對某種性質如灰階、紋理而言具有相似性,區域内部比較平整相鄰語義區域對分割所依據的性質有明顯的差異
  2. 不同語義區域邊界上是明确和規整的
  3. 語義分割模型方法進階

圖像分割的曆史

所有的發展都是漫長的技術積累,加上一些外界條件滿足時就會産生質變。我們簡單總結了圖像分割的幾個時期:

2000年之前,數字圖像處理時我們采用方法基于幾類:門檻值分割、區域分割、邊緣分割、紋理特征、聚類等。

2000年到2010年期間, 主要方法有四類:基于圖論、聚類、分類以及聚類和分類結合。

2010年至今,神經網絡模型的崛起和深度學習的發展,主要涉及到幾種模型:

10分鐘看懂全卷積神經網絡(FCN):語義分割深度模型先驅

參考文獻:http://www/arocmag.com/article/02-2017-07-064.html

截至到2017年底,我們已經分化出了數以百計的模型結構。當然,經過從技術和原理上考究,我們發現了一個特點,那就是目前最成功的圖像分割深度學習技術都是基于一個共同的先驅:FCN(Fully Convolutional Network,全卷積神經網絡)。

10分鐘看懂全卷積神經網絡(FCN):語義分割深度模型先驅

2010年前,CNN 是非常高效的視覺處理工具,因為它能夠學習到階層化的特征。研究人員将全連接配接層替換為卷積層來輸出一種空間域映射(反卷積)而非簡單輸出類别的機率,進而将圖像分割問題轉換為端對端的圖像處理問題。

端對端

知識也是一步一步地積累的,學到這兒,我們就會産生新的疑問,什麼是端對端?

可能大家都對這個概念有一些心得,我簡單想了想大概是:解決問題時,輸入問題的原始資料,然後模型輸出所需結果,中間過程我們不加以考慮,這應該就是端對端最通俗的解釋。

我們詳細看一下模型的發展,了解下什麼是端對端,如下圖:

10分鐘看懂全卷積神經網絡(FCN):語義分割深度模型先驅

👆淺色部分人參與,深色部分是機器自動完成

效果上來說,橫軸表示效果越來越好,複雜度上看,縱軸表示模型越來越複雜。下面我們分析一下端到端的優劣之處:

端對端的好處:通過縮減人工預處理和後續處理,盡可能使模型從原始輸入到最終輸出,給模型更多可以根據資料自動調節的空間,增加模型的整體契合度。

端對端的壞處:通過大量模型的組合,增加了模型複雜度,降低了模型可解釋性。

發展曆程

  1. 2014年 FCN 模型,主要貢獻為在語義分割問題中推廣使用端對端卷積神經網絡,使用反卷積進行上采樣
  2. 2015年 U-net 模型,建構了一套完整 的編碼解碼器
  3. 2015年 SegNet 模型,将最大池化轉換為解碼器來提高分辨率
  4. 2015年 Dilated Convolutions(空洞卷積),更廣範圍内提高了内容的聚合并不降低分辨率
  5. 2016年 DeepLab v1&v2
  6. 2016年 RefineNet 使用殘差連接配接,降低了記憶體使用量,提高了子產品間的特征融合
  7. 2016年 PSPNet 模型
  8. 2017年 Large Kernel Matters
  9. 2017年 DeepLab V3

以上幾種模型可以按照語義分割模型的獨有方法進行分類,如專門池化(PSPNet、DeepLab),編碼器-解碼器架構(SegNet、E-Net),多尺度處理(DeepLab)、條件随機場(CRFRNN)、空洞卷積(DiatedNet、DeepLab)和跳躍連接配接(FCN)。

FCN

CNN 最後輸出的是類别的機率值。

10分鐘看懂全卷積神經網絡(FCN):語義分割深度模型先驅

CNN 的強大之處在于它的多層結構能自動學習特征,并且可以學習到多個層次的特征:較淺的卷積層感覺域較小,學習到一些局部區域的特征。

較深的卷積層具有較大的感覺域,能夠學習到更加抽象一些的特征。這些抽象特征對物體的大小、位置和方向等敏感性更低,進而有助于識别性能的提高。

什麼是FCN模型?

因為模型網絡中所有的層都是卷積層,故稱為全卷積網絡。

全卷積神經網絡主要使用了三種技術:

  1. 卷積化(Convolutional)
  2. 上采樣(Upsample)
  3. 跳躍結構(Skip Layer)
10分鐘看懂全卷積神經網絡(FCN):語義分割深度模型先驅

簡單的是就是将上述過程最後的 Fully Connected 換成了卷積,直接輸出目标物體所屬的像素範圍。

傳統 CNN 有幾個缺點:

  1. 存儲開銷大,滑動視窗較大,每個視窗都需要存儲空間來儲存特征和判别類别,而且使用全連接配接結構,最後幾層将近指數級存儲遞增
  2. 計算效率低,大量重複計算
  3. 滑動視窗大小是相對獨立的,末端使用全連接配接隻能限制局部特征。

為了解決上面的部分問題,FCN 将傳統 CNN 中的全連接配接層轉化成卷積層,對應 CNN 網絡 FCN 把最後三層全連接配接層轉換成為三層卷積層(4096,4096,1000)。

雖然通過上面兩個圖觀察,卷積核全連接配接數值沒有變化,但是卷積核全連接配接概念不一樣,是以表達的含義就截然不同。

我們不禁想問,将全連接配接層換成卷積有什麼好處呢?

這裡我們要了解一句比較專業的話:如果卷積核的 kernel_size 和輸入 feature maps 的 size 一樣,那麼相當于該卷積核計算了全部 feature maps 的資訊,則相當于是一個 kernel_size∗1 的全連接配接。

我們怎麼去了解這句話?

大概意思為:當我們輸入的圖檔大小和卷積核大小一緻時,其實等價于建立全連接配接,但是還是有差別。

全連接配接的結構是固定的,當我們訓練完時每個連接配接都是有權重的。而卷積過程我們其實為訓練連接配接結構,學習了目标和那些像素之間有關系,權重較弱的像素我們可以忽略。

全連接配接不會學習過濾,會給每個連接配接分權重并不會修改連接配接關系。卷積則是會學習有用的關系,沒用得到關系它會弱化或者直接 dropout。這樣卷積塊可以共用一套權重,減少重複計算,還可以降低模型複雜度。

反卷積

數學概念太多就不寫公式,我們直接看圖了解。

10分鐘看懂全卷積神經網絡(FCN):語義分割深度模型先驅

a 是輸入圖像,b 是經過卷積得到的特征圖,分辨率明顯下降。經過上采樣(反卷積)提升分辨率得到同時,還保證了特征所在區域的權重,最後将圖檔的分辨率提升原圖一緻後,權重高的區域則為目标所在區域。

FCN 模型處理過程也是這樣,通過卷積和反卷積我們基本能定位到目标區域,但是,我們會發現模型前期是通過卷積、池化、非線性激活函數等作用輸出了特征權重圖像,我們經過反卷積等操作輸出的圖像實際是很粗糙的,畢竟丢了很多細節。是以我們需要找到一種方式填補丢失的細節資料,是以就有了跳躍結構。

跳躍結構

我們通過回查學習過的知識,可以幫助了解目前的知識。這裡的原理也有些許類似,我們正向過程的卷積、池化等操作都會輸出每個層的特征,我們使用反卷積然後和曆史中的池化和卷積資料結合,利用它們的資料填補我們缺失的資料。

10分鐘看懂全卷積神經網絡(FCN):語義分割深度模型先驅

三個技術都已經建構如模型之中,通過一定标記資料的訓練後,模型已經學會了如何識别類别,并且能反卷積得到對應類别所在的像素區域。輸出的效果👇

10分鐘看懂全卷積神經網絡(FCN):語義分割深度模型先驅

Review

我們複習一下今天學到的内容:

卷積化:全連接配接層(6,7,8)都變成卷積層,适應任意尺寸輸入,輸出低分辨率的分割圖檔。

反卷積:低分辨率的圖像進行上采樣,輸出同分辨率的分割圖檔。

跳層結構:結合上采樣和上層卷積池化後資料,修複還原的圖像。

FCN 的缺點:

  1. 分割的結果不夠精細。圖像過于模糊或平滑,沒有分割出目标圖像的細節
  2. 因為模型是基于CNN改進而來,即便是用卷積替換了全連接配接,但是依然是獨立像素進行分類,沒有充分考慮像素與像素之間的關系
  3. 也是因為每個模型都有自己的不足,是以才會出現各式各樣的模型來解決它們的問題。大家如果能分析出每個模型的缺點,那我們也可以建構新的模型去完善他們的模型,這其實就是創新的過程