繁体   English   中英

Matlab(imfilter)和TensorFlow(tf.nn.conv2d)中的偶数过滤器(6x6)的中心像素在哪里?

[英]Where is the center Pixel of an even filter (6x6) in Matlab (imfilter) and TensorFlow (tf.nn.conv2d)?

对于我的硕士论文,我目前正在将卷积运算从Matlab代码移植到TensorFlow(Python API)。 例外是在Matlab中使用了偶数filter_size(6x6)。

通过调试Matlab的输出和我的TensorFlow代码,我认识到Matlab的功能过滤器的行为方式与TensorFlow中的tf.nn.conv2d操作不同。 我得到不同的均值和标准值,最小值和最大值相同。

我可以确认,我在Matlab和TF上的权重值相同并且正确地重塑了。 偏置只是一个标量,因此这也不是问题。

我的假设是函数imfilter(Matlab)和tf.nn.conv2d(TF)都不会使用相同的中心像素进行卷积,因为奇数内核大小的输出是相似的。 因此,对于奇数的内核大小,两个函数的操作相似。

这是Matlab代码的一个片段:

imfilter(input_data(:,:,j), conv_subfilter, 'same', 0, 'conv');

conv_subfilter是一个6x6x48的过滤器内核,并且卷积一个宽度x Heigth x 48图像-结果是TF和Matlab的深度为1的图像

这是我的TF代码的片段:

h_conv3_ip = convolution2d(max_pool_conv2, W_conv3_ip, b_conv3_ip, [1, 1, 1, 1], 'SAME', "h_conv3_ip")

def convolution2d(x, W, b, strides, padding, name):
    conv2d = tf.nn.conv2d(x, W, strides=strides, padding=padding, name=name) 
    conv2d = tf.add(conv2d, b, name=name) 
    return conv2d

有人可以告诉我内核中心是问题还是其他。 其他? 预先感谢您的帮助!

我发现计算中心像素的正确公式是:floor(([[mn] +1)/ 2)。 我在一个10x10补丁程序中对其进行了测试,该补丁程序已用进行了初始化。 过滤器6x6也使用1进行了初始化。 在左上边界,对于TF和Matlab卷积,我的值均为16。 因此,关于中心像素的索引没有差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM