1. 程式人生 > >反捲積(deconvolution)的理解 +上取樣(UNSampling)與上池化(UnPooling)

反捲積(deconvolution)的理解 +上取樣(UNSampling)與上池化(UnPooling)

像往常一樣,舉個梯子:

https://blog.csdn.net/A_a_ron/article/details/79181108 上取樣( (UNSampling)與上池化(UnPooling)

https://www.zhihu.com/question/43609045/answer/132235276  反捲積 deconvolution networks

 

在網路解碼器結構中有的時候使用反捲積、而有的時候使用unpooling或或者unsampling,三者還是有不同的。這裡記錄一下。

目錄

上取樣與上池化

反捲積

基礎

用法


上取樣與上池化

 

圖示理解
使用三張圖進行說明: 


圖(a)表示UnPooling的過程,特點是在Maxpooling的時候保留最大值的位置資訊,之後在unPooling階段使用該資訊擴充Feature Map,除最大值位置以外,其餘補0。與之相對的是圖(b),兩者的區別在於UnSampling階段沒有使用MaxPooling時的位置資訊,而是直接將內容複製來擴充Feature Map。從圖中即可看到兩者結果的不同。圖(c)為反捲積的過程,反捲積是卷積的逆過程,又稱作轉置卷積。最大的區別在於反捲積過程是有引數要進行學習的(類似卷積過程),理論是反捲積可以實現UnPooling和unSampling,只要卷積核的引數設定的合理。

有關反捲積的詳細資訊,可以參考這篇部落格。

反捲積與UnPooling的視覺化
對網路層進行視覺化的結果: 


圖(a)是輸入層;圖(b)是14*14反捲積的結果;圖(c)是28*28的UnPooling結果;圖(d)是28*28的反捲積結果;圖(e)是56*56的Unpooling結果;圖(f)是56*56反捲積的結果;圖(g)是112*112 UnPooling的結果;圖(h)是112*112的反捲積的結果;圖(i)和圖(j)分別是224*224的UnPooling和反捲積的結果。兩者各有特點。

反捲積

基礎

一句話解釋:逆卷積相對於卷積在神經網路結構的正向和反向傳播中做相反的運算。

逆卷積(Deconvolution)比較容易引起誤會,轉置卷積(Transposed Convolution)是一個更為合適的叫法.

舉個栗子:

4x4的輸入,卷積Kernel為3x3, 沒有Padding / Stride, 則輸出為2x2。

普通的conv層:

輸入矩陣可展開為16維向量,記作x
輸出矩陣可展開為4維向量,記作y
卷積運算可表示為y = Cx

 

不難想象C其實就是如下的稀疏陣:我們再把4×4的輸入特徵展成[16,1]的矩陣 XX,那麼 Y=CXY=CX 則是一個[4,1]的輸出特徵矩陣,把它重新排列2×2的輸出特徵就得到最終的結果,


平時神經網路中的正向傳播就是轉換成了如上矩陣運算。

那麼當反向傳播時又會如何呢?首先我們已經有從更深層的網路中得到的\frac{\partial Loss}{\partial y}.

\frac{\partial Loss}{\partial x_j} = \sum_i \frac{\partial Loss}{\partial y_i} \frac{\partial y_i}{\partial x_j} = \sum_i \frac{\partial Loss}{\partial y_i} C_{i,j}  = \frac{\partial Loss}{\partial y} \cdot C_{*,j} = C_{*,j}^T \frac{\partial Loss}{\partial y}

回想第一句話,你猜的沒錯,所謂逆卷積其實就是正向時左乘C^T,而反向時左乘(C^T)^T,即C的運算。

逆卷積的一個很有趣的應用是GAN(Generative Adversarial Network)裡用來生成圖片:Generative Models

----
[1603.07285] A guide to convolution arithmetic for deep learning
GitHub - vdumoulin/conv_arithmetic: A technical report on convolution arithmetic in the context of deep learning

用法

visualization/pixel-wise prediction/unsupervised learning/image generation都會用到deconv的結構。比如Deconvolutional Network[1][2]做圖片的unsupervised feature learning,ZF-Net論文中的卷積網路視覺化[3],FCN網路中的upsampling[4],GAN中的Generative圖片生成[5]。

 

Deconvolution大致可以分為以下幾個方面:

(1)unsupervised learning,其實就是covolutional sparse coding[1][2]:這裡的deconv只是觀念上和傳統的conv反向,傳統的conv是從圖片生成feature map,而deconv是用unsupervised的方法找到一組kernel和feature map,讓它們重建圖片。

(2)CNN視覺化[3]:通過deconv將CNN中conv得到的feature map還原到畫素空間,以觀察特定的feature map對哪些pattern的圖片敏感,這裡的deconv其實不是conv的可逆運算,只是conv的transpose,所以tensorflow裡一般取名叫transpose_conv。

(3)upsampling[4][5]:在pixel-wise prediction比如image segmentation[4]以及image generation[5]中,由於需要做原始圖片尺寸空間的預測,而卷積由於stride往往會降低圖片size, 所以往往需要通過upsampling的方法來還原到原始圖片尺寸,deconv就充當了一個upsampling的角色

1. 不解釋了
2. CNN視覺化
deconv第二個方面是用來做CNN的視覺化。ZF-Net[3]中用到了deconv來做視覺化,它是將CNN學習到的feature map用得到這些feature map的卷積核,取轉置,將圖片特徵從feature map空間轉化到pixel空間,以發現是哪些pixel激活了特定的feature map,達到分析理解CNN的目的。
3. upsampling
分別簡單介紹兩篇文章,FCN和DCAN。FCN[4]主要用來做pixel-wise的image segmentation預測,先用傳統的CNN結構得到feature map,同時將傳統的full connected轉換成了對應引數的卷積層,比如傳統pool5層的尺寸是7×7×512,fc6的尺寸是4096,傳統的full connected weight是7×7×512×4096這樣多的引數,將它轉成卷積核kernel size為7×7,input channel為512,output channel為4096,則將傳統的分別帶有卷積和全連線的網路轉成了全卷積網路(fully convolutional network, FCN)。FCN的一個好處是輸入圖片尺寸大小可以任意,不受傳統網路全連線層尺寸限制,傳統的方法還要用類似SPP結構來避免這個問題。FCN中為了得到pixel-wise的prediction,也要把feature map通過deconv轉化到畫素空間。論文中還有一些具體的feature融合,詳情可參見論文。
 

DCGAN[5]中使用deconv就更自然了,本身GAN就需要generative model,需要通過deconv從特定分佈的輸入資料中生成圖片。GAN這種模式被Yann LeCun特別看好,認為是unsupervised learning的一個未來。


 

[1] Zeiler M D, Krishnan D, Taylor G W, et
al. Deconvolutional networks[C]. Computer Vision and Pattern Recognition, 2010.

[2] Zeiler M D, Taylor G W, Fergus R, et
al. Adaptive deconvolutional networks for mid and high level feature
learning[C]. International Conference on Computer Vision, 2011.

[3] Zeiler M D, Fergus R. Visualizing and
Understanding Convolutional Networks[C]. European Conference on Computer
Vision, 2013.

[4] Long J, Shelhamer E, Darrell T, et al.
Fully convolutional networks for semantic segmentation[C]. Computer Vision and
Pattern Recognition, 2015.

[5] Unsupervised Representation Learning
with Deep Convolutional Generative Adversarial Networks

[6] Sparse Coding - Ufldl

[7] Denoising Autoencoders (dA)

[8] Convolution arithmetic tutorial