我需要跨一批特征图对执行2D交叉卷积(例如MATLAB的https://www.mathworks.com/help/signal/ref/xcorr2.html)。
为了澄清:
令X
为B x W1 x H1 x C
和Y
为B x W2 x H2 x C
。
我想要的输出是B x W2 x H2 x 1
的形状(假设我们将X
视为通过“SAME填充”传递给Y
的“过滤器”),其中输出的i
-th 1 x W2 x H2 x 1
切片是X[i,:,:,:]
和Y[i,:,:,:]
之间的互相关。就像是
tf.nn.conv2d(Y[i,:,:,:], X[i,:,:,:], [1,1,1,1], padding='SAME')
是否有执行此操作的有效方法?
注意:如果
X
是1 x W1 x H1 x C
,并且我们想在每个切片Y
处将它与B
互相关,这很容易:cross_corr = tf.nn.conv2d(
Y, tf.transpose(X, perm[1,2,3,0], [1,1,1,1], padding='SAME')
这利用了Tensorflow将
conv2d
实现为互相关的事实以及我们可以将较小的张量在转置后实质上视为过滤器这一事实。这不能解决我的问题,因为我需要对B
不同的过滤器进行交叉卷积。也许conv3d有可能吗?
注意2:如果过滤器 channel 划分了输入 channel ,则matconvnet的
vl_nnconv
会执行此操作。 Tensorflow是否具有等效功能? 最佳答案
您可以像我显示的here一样使用tf.map
函数。
当时我尝试使用conv3d
,但没有找到使其工作的方法。
关于python - Tensorflow中的批量互相关,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42965781/