我需要幫助。試圖瞭解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的權重,當然還有一個偏差
我不完全理解你的意思是我的顏色,但在這裏:https://arxiv.org/pdf/1603.07285v1.pdf你可以找到一個關於卷積算法是如何工作的。 – sygi
謝謝。 PDF很有趣,但它在解決我的問題上並沒有真正幫助我。關於顏色:如果您查看鏈接的PDF中的圖4.6,可以看到每個「輸出像素」是通過在「輸入圖像」上應用3x3內核計算出來的,根據圖4.6,這意味着每個輸出像素由一個或兩個輸入像素創建。現在使用3x3內核來跨越2是很奇怪的。 Caffe通常使用4x4。如果您使用4x4內核,則應使用4個輸入像素創建每個輸出像素。這是4x4權重矩陣中的彩色權重。 – seeya