Tensorflow 中的批处理互相关

C. *_* Y. 5 python convolution computer-vision tensorflow

我需要在一批特征图对中执行 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视为我们Y使用相同填充传递的“过滤器” ),其中输出的i第 -th1 x W2 x H2 x 1切片是X[i,:,:,:]和之间的互相关,Y[i,:,:,:]例如

tf.nn.conv2d(Y[i,:,:,:], X[i,:,:,:], [1,1,1,1], padding='SAME')
Run Code Online (Sandbox Code Playgroud)

有没有一种有效的方法来实现这个操作?

注意:如果X是,1 x W1 x H1 x C并且我们想Y在每个 slice将它与它进行互相关B,这很容易:

cross_corr = tf.nn.conv2d(
    Y, tf.transpose(X, perm[1,2,3,0], [1,1,1,1], padding='SAME')
Run Code Online (Sandbox Code Playgroud)

它利用了 Tensorflowconv2d作为互相关实现的事实,以及我们可以在转置后将较小的张量视为本质上的过滤器的事实。这不能解决我的问题,因为我需要对B不同滤波器进行交叉卷积。

也许 conv3d 是一种可能性?

注2:vl_nnconv如果过滤器通道将输入通道分开,matconvnet 会执行此操作。Tensorflow 有等价物吗?

Ben*_*uin 1

tf.map您可以像我在这里展示的那样使用该功能。

我当时尝试使用conv3d但没有找到让它发挥作用的方法。