【问题标题】:Image over Image convolution in TensorflowTensorflow 中的 Image over Image 卷积
【发布时间】:2017-03-23 23:31:06
【问题描述】:

假设,我有两组图像,A 和 B,每个 11X5x5x3,其中 11 是示例数,5x5x3 是图像尺寸。
Tensorflow 中是否有一种简单的方法可以对 A_i 中的每个图像在 B_i 上应用卷积(即 B_i 起着过滤器的作用,而 A_i 是 tf.conv2d 中的输入)?例如,conv2d(A_1,B_1), conv2d(A_2,B_2),...,conv2d(A_11,B_11)
这里没有权重学习只是想在一张图像上应用卷积。 我尝试这样做:

# change B to 5x5x3x11 to be compatible with tf convolution.
tf.nn.conv2d(A, B, strides=[1,1,1,1], padding ='SAME' )

但是这样做的问题是它在所有 B_i 上对每个 A_i 应用卷积。我不想要这个,我只想要 A_i 超过 B_j,其中 i==j。我当然可以一个一个地做,但是效率不高,需要批量做。

任何意见如何解决这个问题?

谢谢。 J

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    我不确定这是您需要的,因为它不是真正的批处理模式,但您可以使用地图功能:

    A = tf.placeholder(dtype=tf.float32, shape=[None, 5, 5, 3])
    B = tf.placeholder(dtype=tf.float32, shape=[None, 5, 5, 3])
    
    output = tf.map_fn(
        lambda inputs : tf.nn.conv2d(
            tf.expand_dims(inputs[0], 0),  # H,W,C -> 1,H,W,C
            tf.expand_dims(inputs[1], 3),  # H,W,C -> H,W,C,1
            strides=[1,1,1,1],
            padding="SAME"
        ),  # Result of conv is 1,H,W,1
       elems=[A,B],
       dtype=tf.float32
    )
    final_output = output[:, 0, :, :, 0]  # B,1,H,W,1 -> B,H,W
    

    我猜性能将取决于微小的单独卷积将如何并行化。

    【讨论】:

    • 等待您的时间和答案。
    猜你喜欢
    • 2016-02-17
    • 1970-01-01
    • 2017-10-17
    • 2017-10-21
    • 2021-06-12
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多