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

问题描述 投票:9回答:3

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

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

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

python image tensorflow interpolation image-resizing
3个回答
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])

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


5
投票

我建议不要使用任何tf.image.resize_*函数作为they suffer from a nasty bug not be fixed

一组新的不同的图像重采样功能显然正在筹备中。与此同时,您可以在网上找到一些关于如何使用例如transposed convolutions。遗憾的是,每通道上采样的效率要低得多,但正确比快速更好。

编辑

他们最终修复了TF 2.0中的这个bug:

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

此修复程序当前不会传递渐变,这是一个有希望也可以修复的错误。


1
投票

Keras现在支持'nearest''bilinear'插值,具有张量流后端。检查documentation。但是默认大小值确实是(2,2)或int值,因此在这种情况下,您的上采样将至少为两倍。

此代码需要Keras 2.2.3或更高版本。如果你正在使用tf.keras,遗憾的是,你不能单独安装keras,它是作为tensorflow安装的一部分捆绑的。因此要么找到tf版本,要么安装每晚构建。

pip3 install --upgrade tf-nightly

© www.soinside.com 2019 - 2024. All rights reserved.