您當前的位置:首頁 > 文化

DeepLab從入門到棄療

作者:由 知乎使用者 發表于 文化時間:2021-01-14

DeepLab這個事,說起來有意思了。從DeepLab V1 到最新 V3+,算是把深度學習幾個天馬行空的藝術創舉給炒了一遍。 (ps:何凱明是個天才)

首先, DeepLab是語義分割裡比較流行的一種網路。 與鼻祖CNN相比, 顯然分割的意義就很明顯了。 與其他類似FCNN相比, DeepLab發展到今天,帶來的好處有

1)引數同比減少,所以佔比記憶體減小,速度快;

2)ResNet的引入,越deeper越accurate

2)連續卷積和池化不可避免帶來解析度降低, 然而空洞卷積卻可以在儘可能保證解析度的情況下擴大視野;

3)ASPP的創舉(具體之後說)

如上,這幾個創舉分別是: ResNet, 空洞卷積(Atrous Conv), ASPP (金字塔池化)

先說ResNet。在我學習DL初期,一直以為,精確的網路勢必是深度的。對不對呢?哎是對的,我想的沒錯。 但是, 機器不是人, 總有出乎意料。 於是, 經過n多次試驗,發現網路在搭建到一定程度,這個精度就急轉直下。 所以, ResNet出現了。 這個ResNet就有意思了,它這個原理,很machine,簡單粗暴。關於ResNet裡提到高頻的兩個詞是‘shortcut’和 ‘skip connection‘。 shortcut, 顧名思義,抄捷徑。 關於具體ResNet怎麼來的,網上資料足夠了,具體不贅述。 但是!我十分,強烈地想貼一句話。上圖先

DeepLab從入門到棄療

DeepLab從入門到棄療

看見沒,‘Need to learn F(。), but it’s earier to learn’!!

某大神是這麼解釋, ‘不退化不是我們的目的,我們希望有更好效能的網路。 resnet學習的是殘差函式F(x) = H(x) - x, 這裡如果F(x) = 0, 那麼就是上面提到的恆等對映。

假如最佳化目標函式是逼近一個恆等對映, 而不是0對映, 那麼學習找到對恆等對映的擾動會比重新學習一個對映函式要容易

。’尤其第二句, 說得太好了,不過什麼鬼意思???Sorry???

我讀了很多遍, 快要棄療的時候, 看到了一句, 人話。

人話是這樣說的:‘用一個神經網路去擬合y=x這樣的恆等對映比用一個神經網路去擬合y=0這樣的0對映要難。因為擬合y=0的時候,只需要將權重和偏置都逼近0就可以了’

茅塞頓開!!!ResNet簡單粗暴號稱帶來變革的演算法,其實就是想著法的把權重和bias都搞成0就好了。

當然了,言歸正傳, ResNet作為DeepLab其中一個亮點, 更重要的是怎麼在DeepLab裡用。

我一直在死磕論文裡的一句話, we duplicate several copies of the last ResNet block,denoted as block 4。 為什麼是Last block?我一度鑽牛角, 其實應該就是ResNet最流行的bottleneck結構(總共也就兩種),上圖,這個就是bottleneck,最時髦的崽兒。

DeepLab從入門到棄療

我記得是從DeepLab V2開始, ResNet就已經作為亮點了。 先拿DeepLab V2/3 的圖說明, 上圖先。

DeepLab從入門到棄療

裡面的具體內容先略過, 不論是without atrius conv or atrous conv, 相關Resnet的主體框架有一點是相同的:從block4到block7, 都是沿用了ResNet裡bottleneck的單元,所以論文裡也提到, There are three 3×3 convolutions in those blocks,and the last convolution contains stride 2 except the one in last block, similar to original ResNet。

當然了,有一個重點改動是,它把除了最後一個block的其他block裡, 最後一個conv層的stride改成2, 這個直接影響了outstride(通俗理解為影象縮放比率,後話)。

2。 再來說說空洞卷積

Atrous Conv和 ResNet 一樣,作為近幾年一個很火的概念,網上太多太多精彩的解釋, 具體怎麼操作的,一搜一大把, 不贅述。

但是, 我在接觸Atrous Conv的時候, 各路翻譯和名稱, 把一個很簡單的事情說得很糊塗, 尤其是在DeepLab裡, 所以很有必要統一名稱,不然帶來困擾很大。

1) 各種rate混淆視聽

DeepLab從入門到棄療

先上圖。這是DeepLab V1和V2的結構, V1,V2都借用這個創舉。

空洞卷積有一個很重要的引數, dilation rate, 就是空洞卷積擴張率, 更多時候大家就簡寫成rate (就是這個簡寫,坑的我死去活來)。

dilation rate 就是filter上權重之間的取樣個數。再通俗說,就是卷積核上權重之間插入空格數量等於rate-1。比如,standrad cov,它的rate就是1,因為沒有零點插入,所以就是0=rate-1。 比如 rate=4, 那權重之間插入了3 個零點(或者說空格)。有藝術細胞的同學別看圖,看圖太具有迷惑性了。

2)DeepLab圖裡的rate,不是1)裡提到的rate!!!!!!!!!

這個,真的是很坑。。。。。誤會都是起源於對圖中rate的 標註的誤解。

上圖裡的rate,叫做unite rate,也有人叫做 Base rate, 跟空洞卷積取樣個數的dilation rate是不同的。

他們兩者的關係是這樣的:delition rate=base reate (unit rate) * Multigrade

那麼,上式的Multigrade是什麼???

說實話,不懂呢。

但是大概可以這麼說,ResNet的一個block裡有3個卷基層,每個卷基層的的delition rate是獨立並且可以不相同的。 舉個例子,block4 的基準膨脹率是 2, 給定網格Multigrid=(1,2,4), 那麼最終 block4 的三個卷積層的膨脹率依次為rates=2∗(1,2,4)=(2,4,8)

3。 ASPP

1) 什麼是ASPP

空洞卷積空間池化特徵金字塔(Atrous Spatial Pyramid Pooling)對相同的輸入進行並行的不同取樣率的空洞卷積然後進行特徵融合,如下圖 (From 我是覺覺啊)

DeepLab從入門到棄療

ASPP 其實在DeepLab V2就使用了,只不過它使用在了網路的前端,V3使用在了網路的後端。

標簽: rate  ResNet  DeepLab  卷積  Block