我想在TensorFlow中进行简单的双线性调整(不一定是整数因子)。例如,从(32,3,64,64)张量开始,我想要一个(32,3,96,96)张量,其中每个64x64使用双线性插值重新调整1.5倍。最好的方法是什么?
我希望这能支持任意因素> 1,而不仅仅是1.5。
注意:每个64x64上的操作与skimage.transform.rescale (scale=1.5, order=1)
的操作相同。
答案 0 :(得分:14)
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。
答案 1 :(得分:4)
我建议不将they suffer from a nasty bug的任何tf.image.resize_*
函数用作not be fixed。
管道中显然有一组新的,不同的图像重采样功能。同时,您可以在网上找到一些示例,了解如何使用例如transposed convolutions。不幸的是,每通道上采样的效率要低得多,但正确比快速采样好。
编辑
他们终于在TF 2.0中修复了该错误:
image.resize
现在考虑适当的像素中心(...)。
此修复程序当前无法通过渐变,这是...一个有望修复的错误。
答案 2 :(得分:1)
Keras现在通过tensorflow后端支持'nearest'
和'bilinear'
插值。检查documentation。但是默认大小的确是(2,2)或int值,因此在这种情况下,您的上采样将至少增加一倍。
此代码需要Keras 2.2.3
或更高版本。不幸的是,如果使用tf.keras
,则不能单独安装keras,它是tensorflow安装的一部分。因此,可以找到tf
版本或安装夜间版本。
pip3 install --upgrade tf-nightly