我需要跨一批特征图对执行2D交叉卷积(例如MATLAB的https://www.mathworks.com/help/signal/ref/xcorr2.html)。

为了澄清:

XB x W1 x H1 x CYB 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')

是否有执行此操作的有效方法?

注意:如果X1 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/

10-10 01:34