Dep*_*epu 5 python tensorflow bilinear-interpolation
我正在使用 Tensorflow 1.4.0
Tensorflow tf.image.resize_bilinear() 有一个名为“align_corners”的参数,当我们将其设置为 False 时,我对行为感到困惑。在官方文档中,它说:
align_corners:一个可选的布尔值。默认为假。如果为 true,则输入和输出张量的 4 个角像素的中心对齐,保留角像素处的值。默认为假。
当我在以下程序中使用 tf.image.resize_bilinear() 和 align_corners=True 时:
import tensorflow as tf
sess = tf.Session()
x = tf.Variable(tf.Variable([[[[1],[2]],[[3],[4]]]]))
pooling_output_size = [4, 4]
pool_output = tf.image.resize_bilinear(x, pooling_output_size,align_corners=True)
sess.run(tf.global_variables_initializer())
print pool_output.eval(session=sess)
Run Code Online (Sandbox Code Playgroud)
它输出
[[[[1. ]
[1.3333334]
[1.6666667]
[2. ]]
[[1.6666667]
[2. ]
[2.3333335]
[2.6666667]]
[[2.3333335]
[2.6666665]
[3. ]
[3.3333335]]
[[3. ]
[3.3333333]
[3.6666667]
[4. ]]]]
Run Code Online (Sandbox Code Playgroud)
哪些角正确对齐。
但是,当我设置 align_corners=False 时,我得到了以下奇怪的输出
[[[[1. ]
[1.5]
[2. ]
[2. ]]
[[2. ]
[2.5]
[3. ]
[3. ]]
[[3. ]
[3.5]
[4. ]
[4. ]]
[[3. ]
[3.5]
[4. ]
[4. ]]]]
Run Code Online (Sandbox Code Playgroud)
有没有人理解为什么 Tensorflow 会使用这个奇怪的实现?我没有在任何地方找到任何解释。
实际上 PyTorch 的双线性上采样也有 align_corner 参数,当您将其设置为 True 时,它运行良好。但是如果你将它设置为 False,它会执行与 Tensorflow 不同的行为。我现在对他们的实现完全感到困惑(也许只使用 align_corners=True 就可以了)。
看来是为了向后兼容。链接
https://hackernoon.com/how-tensorflows-tf-image-resize-stole-60-days-of-my-life-aba5eb093f35
建议我始终使用align_corners=True
| 归档时间: |
|
| 查看次数: |
4809 次 |
| 最近记录: |