2016-11-10 32 views
1

我需要幫助。試圖瞭解deconv層的數學運作方式。讓我們來談談這層:瞭解deconv層數學

layer { 
    name: "decon" 
    type: "Deconvolution" 
    bottom: "conv2" 
    top: "decon" 
    convolution_param { 
    num_output: 1 
    kernel_size: 4 
    stride: 2 
    pad: 1 
    } 
} 

所以基本上這一層應該是「高檔」的通過。如果我看獲悉權重係數的圖像,我看到例如這個:

-0,0629104823 -0,1560362280 -0,1512266700 -0,0636162385 
-0,0635886043 +0,2607241870 +0,2634004350 -0,0603787377 
-0,0718072355 +0,3858278100 +0,3168329000 -0,0817491412 
-0,0811873227 -0,0312164668 -0,0321144797 -0,0388795212 

到目前爲止,這麼好。現在我正試圖理解如何應用這些權重來實際達到升級效果。我需要在自己的代碼中執行此操作,因爲我想使用簡單的像素着色器。

查看Caffe代碼,「DeconvolutionLayer :: Forward_cpu」內部調用「gemm」後跟「col2im」的「backward_cpu_gemm」。我對所有這些工作的理解是這樣的:gemm獲取輸入圖像,並將每個像素與上面列出的16個權重中的每一個相乘。所以基本上gemm產生16個輸出「圖像」。然後col2im總結這16個「圖像」以產生最終的輸出圖像。但是由於步幅爲2,它會在輸出圖像上延伸16個gemm圖像,使得每個輸出像素僅由4個gemm像素組成。到目前爲止,這聽起來是否正確?

我的理解是每個輸出像素都是通過使用來自4x4解卷積權重矩陣的4個權重,從最近的4個低分辨率像素計算出來的。如果你看看下面的圖片:

https://i.stack.imgur.com/X6iXE.png

每個輸出像素既可採用黃色,粉紅色,灰色或白色的權重,而不是其他的權重。我理解正確嗎?如果是這樣,我有一個很大的理解問題,因爲爲了使整個概念正確工作,例如黃色的重量應該加起來和粉紅色的重量等等一樣。但是它們確實是而不是!因此,我的像素着色器會生成圖像,其中4個像素中的1個比其他像素更暗,或者每隔一行更暗,或者類似的東西(取決於我使用的訓練模型)。顯然,通過Caffe運行模型時,不會出現這種僞影。所以我必須在某個地方有一個誤解。但是我找不到它......:(

PS:只是爲了完成信息:在deconv層前有一個conv-layer,例如64的「num_output」。因此deconv層實際上有eg 64 4x4的權重,當然還有一個偏差

+0

我不完全理解你的意思是我的顏色,但在這裏:https://arxiv.org/pdf/1603.07285v1.pdf你可以找到一個關於卷積算法是如何工作的。 – sygi

+0

謝謝。 PDF很有趣,但它在解決我的問題上並沒有真正幫助我。關於顏色:如果您查看鏈接的PDF中的圖4.6,可以看到每個「輸出像素」是通過在「輸入圖像」上應用3x3內核計算出來的,根據圖4.6,這意味着每個輸出像素由一個或兩個輸入像素創建。現在使用3x3內核來跨越2是很奇怪的。 Caffe通常使用4x4。如果您使用4x4內核,則應使用4個輸入像素創建每個輸出像素。這是4x4權重矩陣中的彩色權重。 – seeya

回答

0

經過大量的調試後,我發現我對deconv層的理解完全沒問題,我通過簡單地將偏差浮點數除以255.0來修正所有的失真。像素着色器運行在0-1範圍內,而Caffe偏置常數似乎是針對0-255像素值。

現在一切正常。

我仍然不明白爲什麼4個重量配對沒有總結相同的價值,以及如何可能工作。但是我知道什麼。畢竟它確實有效。我想有些事情對我來說永遠是個謎。