Torch SpatialConvolution 和 SpatialFullConvolution 的區別

原文章鏈接
Torch nn模塊中包含了常用的卷積層(convolutional layers),本文簡單介紹其中兩個名字很相似,作用卻不同的卷積操作:

Spatial Modules:

SpatialConvolution: 在輸入圖像上進行2D卷積操作(2D convolution)
SpatialFullConvolution: 在輸入圖像上進行2D全卷積操作(2D full convolution)

逐一來看兩個卷積操作的定義:

1.SpatialConvolution

module = nn.SpatialConvolution(nInputPlane, nOutputPlane, kW, kH, [dW], [dH], [padW], [padH])

對於多通道的圖像進行2D卷積操作,輸入的對象(稱爲tensor)爲3D tensor(nInputPlane x height x width), 其中nInputPlane也就是常說的通道數。

函數中各參數的含義爲:

nInputPlane: 輸入圖像的通道數
nOutputPlane: 卷積層輸出數據的通道數(Caffe中的num_output)
kW: 卷積核窗口寬度
kH: 卷積核窗口長度
dW: 卷積窗口沿寬邊方向上的移動步距,默認值爲1
dH: 卷積窗口沿長邊方向上的移動步距,默認值爲1
padW, padH: 輸入補零,默認值是0,比較好的設置是(kW-1)/2,可以保證卷積後feature map的plane size與輸入的plane size一致。

對於一個3D tensor(nInputPlane x height x width),卷積層輸出的feature map的plane size爲nOutputPlane x oheight x owidth ,其中:

owidth  = floor((width  + 2*padW - kW) / dW + 1)
oheight = floor((height + 2*padH - kH) / dH + 1)

2.SpatialFullConvolution

module = nn.SpatialFullConvolution(nInputPlane, nOutputPlane, kW, kH, [dW], [dH], [padW], [padH], [adjW], [adjH])

咋一看與SpatialConvolution基本一致,只是多了兩個參數而已。在其他框架下,這一操作相當於: “In-network Upsampling”, “Fractionally-strided convolution”, “Backwards Convolution,” “Deconvolution”, or “Upconvolution.”

簡單說,就是一個去卷積或者上採樣的操作,函數的大部分參數與SpatialConvolution一樣:

nOutputPlane: 卷積層輸出數據的通道數(Caffe中的num_output)
kW: 卷積核窗口寬度
kH: 卷積核窗口長度
dW: 卷積窗口沿寬邊方向上的移動步距,默認值爲1
dH: 卷積窗口沿長邊方向上的移動步距,默認值爲1
padW, padH: 輸入補零,默認值是0,比較好的設置是(kW-1)/2,可以保證卷積後feature map的plane size與輸入的plane size一致
adjW: 額外加上一定的寬度或者高度到輸出圖像中,默認值是0,但是不能超過dW-1/dH-1

與SpatialConvolution不同的是,對於同樣的3D tensor(nInputPlane x height x width)輸入,輸出結果(nOutputPlane x oheight x owidth)的計算方式卻不相同:

owidth  = (width  - 1) * dW - 2*padW + kW + adjW
oheight = (height - 1) * dH - 2*padH + kH + adjH
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章