DeepLab v2
1.語義分割面臨的挑戰
為了更好的理解整個文章,我們應該先理解文章中提出的問題。
1.1第一個問題就是分辨率。
我們在FCN的論文當中說過,這個分辨率下降是我們看不懂這些提取過的圖片,但是電腦可以看得懂,可以通過算法提取出信息。
這句話呢?是對的,但是這個東西吧,也不能無休止的一直提取信息啊,提取的過于抽象電腦也就看不懂了。也就是說分辨率對于分割任務來說還是比較重要的。
產生的原因:
1.我們在學習FCN模型當中,我們知道我們是在不斷地使用下采樣塊提取圖片的特征,再通過上采樣還原圖片的尺寸。連續的卷積和池化會大幅度降低圖片的清晰程度,也就是降低了分辨率,且在上采樣的過程中難以恢復。這就是丟失了很多的細節信息。
如下圖:我們可以明顯的看到,卷積會使得分辨率下降非常多。
2.上面我們只是粗略的思考這個分辨率的問題,我們使得分辨率下降是對細節信息的丟失,這是不好的,但是在論文:(暫時省略)當中也證明了分辨率對于語義分割精確程度的重要性。
因此越來越多的網絡都在想辦法降低下采樣對分辨率的影響,例如空洞卷積、或是步長為2的卷積來代替池化等操作來解決這個問題。諸如此類的方法,被證明是有效的。確實可以降低分辨率的損失。
空洞卷積細說:空洞卷積
同時,在這些實驗當中,我們使用空洞卷積和步長為2的卷積來代替池化來降低分辨率的損失。之后測試其正確率也確實有了很好的提升。也就是說,通過減小卷積的分辨率損失,可以有效地提升語義分割的正確性。換言之就是高分辨率是語義分割的一個非常有利的條件。
當然之前的所有內容我們都是想著如何在特征提取的過程中降低分辨率的損失,但是其實我們還有另外的方法,例如跳連接(skip connection)。就是直接將原有圖片傳過來一份。
這兩種方法各有利弊,要看情況選擇(測試中選擇)
1.2感受域(Receptive field感受野)的問題
什么是感受野?
首先,我們得先明白什么是感受野,感受野就是當前得到的圖片的一個像素所對應原來圖片中的像素的個數的情況,例如:原始圖片經過一個步長為1,卷積核大小為3的卷積得到的感受域大小就是33,可以粗略的理解得到的一個像素來自于原來的33的像素。
當然感受域的計算是有公式的,這個使用遞推的方式定義的:
我們可以通過下圖來理解一下感受野,其準確定義是一個神經節點所對應原來圖片當中的范圍大小:
該如何處理感受野?
一般來講增加感受野是對我們的識別有好處的,所以我們應當從公式上出發探索一下,我們從這個公式可以看出來想要獲得更大的感受域,我們有兩個辦法:
1.增大卷積核的大小。kernel
2.增大步長。stride
如果使用更大的kernel,我們可以粗略理解一下,這樣子的話我們會引入更多的無關信息,就像是使用一個線性模型一樣,我們需要用更大的數據集進行訓練。也需要更大的算力消耗。
如我我們增大stride那么問題更糟,這樣我們就跳過了很多信息啊。
所以可以看出擴大感受野是一個十分重要的內容,Deeplab的論文大多是在感受野的問題上進行探索。
1.3多尺度特征的問題
我們首先得明白多尺度是如何考量信息的:
我們可以看到不同參數的卷積和池化,可以得到不同尺度的特征圖。這樣呢?我們可以德奧不同大小的特征,有些特征大有些特征小,我們將其都輸入網絡當中做融合處理,相當于即處理了大尺度的特征也處理的小尺度的特征。所以多尺度輸入可以有效地提升網絡的性能。同時實驗也可以證明這個觀點。
接下來我們看實現可能遇見的問題以及解決辦法:
如果我們直接在訓練的過程中就進行融合訓練,那么將面對這樣的一個問題,本身這一次傳遞只需要一個卷積層,可能需要一組參數,現在情況下我們進行一次傳遞實際上是有很多個卷積層在進行傳遞,這樣的話,就需要很多組參數。這樣的話,在存儲參數和存儲梯度的過程中,將會產生很大的內存開銷。這個也就導致對硬件的要求很大。
在這樣的問題當中,很多人在論文當中選擇在訓練的過程中使用多尺度訓練。在測試階段進行多尺度融合。就是訓練的時候每個epoch只進行一種特征的訓練,但是在測試階段將其融合在一起。
這個不僅僅是我們這里的模型可以使用,在很多網絡當中如果遇見瓶頸都可以加入多尺度的特征
2.DeepLab v1是什么
2.1DeepLab v1做什么優化?
DeepLab v1是在做什么?
其結合了DCNNs(Deep Convolution Nets深度卷積神經網絡)合DenseCRFs(Conditional Random Field,概率圖模型)這里的DCNNs我們較為熟系,這里的CRF是一個隨機場的模型。主要體現在一個序列或是一組內容之間相互影響的問題。
這個論文主要是有兩個創新點:
1.首先就是深度卷積網絡:
1.1其首先使用FCN得到一個coarse score map(一個較為粗糙的特征圖),并用插值的方法將其還原到原來的大小。
1.2之后使用空洞卷積(Atrous convolution)得到一個感受野不變但是更加dense(密集)的feature map
2.借用fully connected CRF對從FCN得到的分割結果做細節上的優化(refine)。
2.2我們仔細看一下空洞卷積的問題:
如果你不了解空洞卷積: 點這里就能了解空洞卷積
這里總結起來是一個提升分辨率、同時提升感受野的問題。
首先我們看一下池化的問題,我們知道在進行正常的池化(stride=kernel的池化,也就是池化的步長和池化的尺寸相同情況)的處理的過程中,我們的分辨率下降非常劇烈,我們分析一下這是池化的錯嗎,并不是池化的錯,而是池化的步長的錯,那么只需要降低步長就可以解決問題了。
但是,我們看一下下面的這個圖片,如果我們降低了池化的步長,那么新的問題就出現了,感受野就在急速的下降。
也就說,這個東西不好,我們不想用。但是,為了更好的感受野,我們不得不用。我們的目標是在高分辨率的前提下,感受野不變或是擴大才可以。空洞卷積就是在這樣的前提下誕生的。
我們看一下,下圖就是使用空洞卷積的結果,還是在池化步長為1這種對分辨率損失不大的情況下,我們在第二層使用空洞卷積,這樣子可以有效地增大感受野,在下圖中,我們可以看到紅色的節點就是我們另外新增出來的節點。
我們看一下DeepLab v1的內容主要是從其中選擇一部分內容不往下進行傳遞,這就是一些空洞,可以放棄這些內容的依據是,這些內容和臨近的內容非常接近,所以我們只用一個就可以了。既然放棄了其中的相近的一部分節點,那么我們就可以獲得遠處那些區別更大的,更有作用的節點。
DeepLab最開始的部分并不是使用空洞卷積來進行實現的,是達到了一定的程度之后才開始使用空洞卷積來完成任務的。也就是在最后幾層才開始使用。
另外我們可以看到在DeepLab當中我們還是使用全連接層進行處理的,我們學過FCN之后還是可以了解到全連接層是有很多弊端的。這就要求在DeepLab v1的基礎上再進行優化來達到更好的效果。
2.2.1論文原有的圖片
當然這里我們還可以放一下論文中對空洞卷積的說明圖片,這里和我們的圖片不太一樣的是,他提取出的內容是在上方的,上面畫的是在下方。
我們還可以看一下論文當中給出來的比較圖:
上面的內容是使用卷積池化上采樣得到的,下面是使用空洞卷積再進行上采樣得到圖片,可以看到使用空洞卷積的這個效果更好一些。
當然這里并不是我們直接使用了一個空洞卷積,而是實際上使用了一個ASPP來完成操作。
2.2.2空洞卷積的dilation rate是什么?
a是普通的卷積過程(dilation rate = 1),卷積后的感受野為3
b是dilation rate = 2的空洞卷積,卷積后的感受野為5
c是dilation rate = 3的空洞卷積,卷積后的感受野為8
3.DeepLab v2又做了什么?
3.1DeepLab v2做什么優化?
1.使用多尺度的或者多孔金字塔池化,可以更好的分割物體
我們最開始就說過,語義分割的三個問題是:1.分辨率、2.感受野、3.多尺度,我們再v1當中其實只解決了前兩個在這里我們才解決了第三個。這里做出的創新就是將多尺度和空洞卷積結合在一起了。
2.DeepLab v2采用最新的ResNet圖像分類深度卷積神經網絡構建,與原來基于VGG—16的網絡相比,取得了更好的語義分割性能。
經過實驗得到,在語義分割的過程中,ResNet的效果是要比VGG好的,所以我們在大多的模型實現當中使用的是ResNet而不是VGG。很多人使用VGG的原因是VGG的網絡結構簡單容易上手,ResNet的特點在于網絡層次較為復雜,不容易上手。
4.DeepLab v3和v3+又做了什么?
4.1DeepLab v3做什么優化?
使用串行網絡和并行網絡相融合來得到更好的識別結果,主要是加入了ASPP來完成的任務,這里只是復用了別人的想法優化了自己的模型,創新性并不好。
4.1DeepLab v3+做什么優化?
就是在原有的基礎上優化了網絡的結構,但是沒有實質上的創新點。
這兩個的創新點不是很足,只是將空洞卷積和金字塔模型的思想加以實現的一個論文。
5.論文閱讀
摘要部分:摘要翻譯和理解
引言和相關工作:引言和相關工作翻譯和理解
6.詳細理解ASPP
不使用ASPP的話會如何?
為了更好的理解ASPP的優勢,我們應當仔細理解沒有ASPP會怎么樣。說到這個,我們就應該看一下沒有空洞卷積的時候我們是怎么完成不同尺寸的圖片輸入的處理的,我們就是直接使用卷積來完成下采樣,通過不斷地下采樣完成我們的操作。之后使用一個SPP來將其化歸一致的結果。這個看起來好像問題不大。
之后我們就得思考一下在我們的DeepLab當中我們應當如何完成多尺度設計的呢?我們在設計的過程中,首先只有一個輸入就是某個圖片,然后完成對圖片的語義分割。
這就要求我們把圖片轉化為多個尺寸,轉化多個尺寸的過程中,我們就將圖片裁剪成原來的1/4或者其他比例,類似于我們的金字塔卷積,之后將這些小塊送入模型訓練,然后設置多種1/4這種東西(n種),也就是構成了n種模型,對于每個像素形成n種結果,之后在最后的n種結果中進行融合,選取最大的一個作為最后的結果。
存在的問題:
1.這樣每次向前傳遞要求我們相當于進行n次前傳,這就有非常大的計算開銷。
2.在訓練的過程中也伴隨著大量開銷。
也就是精度確實提升了,但是開銷特別大。
代碼
這里沒有非常關鍵的代碼實現,因為這里提出的主要一個內容就是空洞卷積塊,只是大篇幅的論文的一個小塊。所以代碼較為簡單,這里只說明一個塊就好。
總結
以上是生活随笔為你收集整理的DeepLab v2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DeepLab v2的摘要部分(翻译加理
- 下一篇: 空间金字塔池化SPP