Tensorflow中的批量交叉关联

时间:2017-03-23 01:45:05

标签: python tensorflow computer-vision convolution

我需要在一批特征映射中执行二维交叉卷积(例如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传递SAME填充)i 1}} - 输出的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且我们希望在每个切片YB进行交叉关联,则很容易:

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:如果过滤器通道划分输入通道,matconvnet的vl_nnconv会执行此操作。 Tensorflow是否具有等价物?

2 个答案:

答案 0 :(得分:1)

您可以像我展示here一样使用tf.map功能。

我曾尝试使用conv3d,但没有办法让它发挥作用。

答案 1 :(得分:0)

[TensorFlow 2.x版本]

我不确定在问这个问题时是否使用了这种方法,但是您可以尝试tf.nn.convolution

https://www.tensorflow.org/api_docs/python/tf/nn/convolution

该方法似乎支持多个过滤器,并处理N-D卷积,其中N必须为1、2或3。