Skip to main content
 首页 » 编程设计

python之Tensorflow 中的批量互相关

2025年02月15日28softidea

我需要对一批特征图对执行 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 视为我们通过 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:matconvnet的 vl_nnconv 如果过滤器 channel 将输入 channel 分开,则执行此操作。 Tensorflow 是否有等效项?

请您参考如下方法:

您可以像我展示的那样使用 tf.map 函数 here .

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