张量流中的双线性上采样?

Ale*_*x I 12 python interpolation image image-resizing tensorflow

我想在TensorFlow中做一个简单的双线性调整(不一定是整数因子).例如,从(32,3,64,64)张量开始,我想要一个(32,3,96,96)张量,其中每个64x64使用双线性插值重新调整1.5倍.最好的方法是什么?

我希望这能支持任意因子> 1,而不仅仅是1.5.

注意:每个64x64上的操作与操作相同skimage.transform.rescale (scale=1.5, order=1).

eta*_*ion 15

tf.image.resize_images应该做你需要的.它接受3D(单幅图像)和4d(批量图像)张量,具有任意深度(通道数).所以这应该有用:

# it's height, width in TF - not width, height
new_height = int(round(old_height * scale))
new_width = int(round(old_width * scale))
resized = tf.image.resize_images(input_tensor, [new_height, new_width])
Run Code Online (Sandbox Code Playgroud)

双线性插值是默认值,因此您无需指定它.您也可以直接使用resize_bilinear.

  • 谢谢,这就是我想要的。我想知道,是否有可能通过resize_images向后传播? (4认同)
  • @mattdns是的,绝对的.您可以通过调整大小来反向调整,因为它是一个线性运算符.Tensorflow没有问题. (4认同)

P-G*_*-Gn 6

我建议使用任何tf.image.resize_*的功能,他们从一个讨厌的错误受苦,将不会被固定

一系列新的图像重采样功能显然正在准备中。同时,您可以在网上找到一些示例,例如如何使用转置卷积来完成此操作。不幸的是,每通道上采样的效率低得多,但正确比快速好。

编辑

他们终于修复了TF 2.0中的这个错误:

  • image.resize 现在考虑适当的像素中心(...)。

此修复程序当前无法通过渐变,这是...希望可以修复的错误。