簡體   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