DeepLabV1 原理詳解篇

語義分割存在的問題及解決方法

在論文中,作者提出了將 DCNN 運用到語義分割任務中存在的兩個技術障礙,如下圖所示:

翻譯過來什麼意思呢,即存在信號下采樣和空間不變性這兩個問題,那麼爲什麼會出現這樣的現象呢?又該怎麼解決呢?論文中也給出了相關解釋:

爲什麼?🔐🔐🔐

  • 信號下采樣:這是指卷積神經網絡重複的使用下采樣 max-pooling,從而導致圖像分辨率不斷降低。🍊🍊🍊

  • 空間不變性:論文中解釋爲與從分類器中獲得以物體爲中心的決策需要空間轉換的不變性有關,這本質上限制了 DCNN 模型的空間精度。說實話,聽不懂。🎄🎄🎄其實啊,這裏就是說像圖像分類、目標檢測這些 High-Level 的視覺任務(以獲取圖像中物體爲核心的任務)需要空間不變性,也就是說對目標檢測這類任務而言,對於同一張圖片進行空間變換其圖像分類的結果是不變的;而像語義分割這些 Low-Level 視覺任務,對於一張圖片進行空間變換後,其結果就會發生變化,這就導致 DCNN 做語義分割時定位精準度不夠。🍉🍉🍉

怎麼辦?🔑🔑🔑

  • 信號下采樣:既然重複使用了下采樣 max-pooling,那麼我們自然會想到少使用幾次下采樣或者降低 stride 步長,但是這樣會使得感受野變小,這是我們不希望看到的。那麼是否有什麼方法可以既不用不斷下采樣降低分辨率,又能保持感受野不變呢?這就要我們的空洞卷積上場了,它可以增大我們的感受野。

  • 空間不變性:爲了解決這個問題,作者採用了 fully-connected CRF(全連接條件隨機場)方法,對 DCNN 得到的分割結果進行細節上的調整。這個方法在 DeepLabV1 和 DeepLabV2 中都使用了,但是在 DeepLabV3 中就不在使用了,自己看了看,公式怪多的,有點頭大,後面也用不到,就沒有深入學習了

DeepLabV1 網絡結構

論文中給出了 DeepLabV1 網絡的三點優勢,如下圖所示:

DeepLabV1 網絡優勢

前面已經爲大家簡單介紹了一下 DeepLabV1 網絡的一些模塊和優勢,下面就來爲大家來講講 DeepLabV1 的網絡結構。我打算採用總 - 分結構爲大家敘述,先和大家嘮嘮 DeepLabV1 中幾個關鍵模塊,然後再爲大家介紹 DeepLabV1 的整體網絡結構。

LargeFOV 模塊

首先需要說明的是 DeepLabV1 的框架是基於 VGG16 實現的,對 VGG16 不熟悉的可以看一下我的這篇博客:深度學習經典網絡模型彙總 2——VGGNet🩸🩸🩸(https://juejin.cn/post/7085522905064275981)爲了方便大家閱讀,這裏貼出 VGG16 的網絡結構圖,如下:

那麼這個 LargeFOV 模塊是什麼呢?又作用在什麼位置呢?其實呀,這個 LargeFOV 模塊就是我們在前面說到的空洞卷積,作者將 VGG16 的第一個全連接層換成了空洞卷積,保證了網絡在 mIOU 不降低的前提下,減少參數量,加快速度。

全連接層換成了空洞卷積?怎麼換的呢?或許你會有這樣的疑問,我們一起來學習一下。首先將全連接層換成普通卷積這種操作大家是否瞭解呢,比如在 FCN 中就將 VGG16 的第一個全連接層換成了卷積核大小爲 7×7,卷積核個數爲 4096 的卷積層,對此不瞭解的可以點擊深度學習語義分割篇——FCN 原理詳解篇(https://juejin.cn/post/7163126966558654501)瞭解詳情。🌱🌱🌱知道了如何將全連接層轉換成普通卷積,那剩下的就是將普通卷積變成空洞卷積了,這就沒什麼好說的了,不瞭解空洞卷積的點擊 Dilated Convolution(空洞卷積、膨脹卷積) 詳解(https://juejin.cn/post/7139695199214649358)爲自己賦能喔。🥗🥗🥗

論文中也做了一系列不同 kernel size 和 input stride(膨脹因子)的對比實驗,如下圖所示:

根據實驗效果,最終作者選擇了採用卷積核大小爲 3×3,input strede 爲 12 的空洞卷積。【最後一行感受野大,參數量小,mean IOU 高,速度快🥂🥂🥂】

這裏其實我是有一些疑惑的,就是不知道這個感受 224 是怎麼計算得到的,按照我的理解,怎麼算感受也不是這麼多,如果有大佬知道,麻煩告訴小弟一聲,不勝感激 !!!🤞🏽🤞🏽🤞🏽

fully-connected CRF 模塊

fully-connected CRF 中文翻譯爲全連接條件隨機,哈哈哈哈,我是一臉懵逼,在前文中我也說到了,這一部分我不會介紹這個模塊是怎麼實現的,只會說說這個模塊的作用。其實啊,這個模塊就是讓分割更加精細,它相當於我們對得到的粗略的分割圖又進行了進一步的細化操作,過程如下:

網絡結構

話不多說,直接上圖:

這個結構是基於 VGG16 的,因此大家需要對比着 VGG16 來看,讓我們來看看它相較於 VGG16 做了哪些改變叭~~~🍦🍦🍦

帶 Multi-Scale 的網絡結構

論文中還提到了使用了多尺度(Multi-Scale)的結構,即融合了原始圖片和前四個 Maxpool 層的輸出,我們直接看下圖會更清晰:

這個結構似乎沒什麼麼好說的,現在看來是比較常規的一個多尺度方法,不過還是需要大家注意一下這裏原始圖片和前四個 Maxpool 層的輸出尺寸的都是 28×28×num_classes,最後將這些特徵圖進行 ad 操作。

我們可以來看看是否添加多尺度實驗的對照結果,如下圖所示:

第一行爲沒有添加 MSC 的效果,第二行爲添加了 MSC 的效果,怎麼樣,還是挺明顯的叭。🍸🍸🍸

DeepLabV1 實驗對比

其實在上文已經展示了相關的對照實驗,這裏我們再從直觀上來感受一下 DeepLabV1 和其它算法的比較,如下圖所示:

第一行表示原圖,第二行爲 ground truths,第三行是最近提出的模型,左邊爲 FCN-8s,右邊爲 TTI-Zoomout-16,第四行爲 DeepLabV1。從上圖可以很明顯的看出 DeepLabV1 的結果更加精細,對圖像邊緣的處理效果更好。🍵🍵🍵

小結

DeepLabV1 到這裏就差不多爲大家介紹完啦,希望大家都有所收穫喔~~~🌷🌷🌷最後我想在稍微提一下 DeepLabV1 是怎麼計算損失的。我們知道,FCN 是用 GT 和網絡輸出結果計算交叉熵損失(cross_entropy)的,不知道的點擊深度學習語義分割篇——FCN 源碼解析篇(https://juejin.cn/post/7254863133113892919)補課去,裏面介紹的很詳細。但是在 DeepLabV1 中我們會先將 GT 下采樣 8 倍,然後再與 28×28×num_classes【28×28 相較於原圖 224×224 下采樣了 8 倍🍡🍡🍡】的輸出特徵圖計算交叉熵損失。論文中也有相關的表述,如下圖所示,大家這裏注意一下就好。🌼🌼🌼

參考鏈接

🍊DeepLabV1 網絡簡析🍁🍁🍁

🍊DeepLabV1 論文🍁🍁🍁

🍊[論文筆記]DeepLabv1🍁🍁🍁

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/4DSvqEtb8gdA01NekZcarA