2024-05-15 20:47:05 发布
网友
我想在TensorFlow中做一个简单的双线性调整(不一定是整数)。例如,从(32,3,64,64)张量开始,我想要一个(32,3,96,96)张量,其中每个64x64都使用双线性插值以1.5的因子重新缩放。最好的办法是什么?
我希望这能够支持任意因子1,而不仅仅是1.5。
注意:每个64x64上的操作与skimage.transform.rescale (scale=1.5, order=1)的操作相同。
skimage.transform.rescale (scale=1.5, order=1)
我建议不要使用任何tf.image.resize_*函数作为they suffer from a nasty bug来not be fixed。
tf.image.resize_*
一组新的、不同的图像重采样功能显然正在酝酿之中。同时,您可以在web上找到一些关于如何自己使用transposed convolutions来实现这一点的示例。不幸的是,每通道上采样的效率要低得多,但正确的要比快速的好。
编辑
他们终于在TF 2.0中修复了这个错误:
image.resize now considers proper pixel centers (...).
image.resize
此修复当前不通过渐变,这是。。。希望也能得到修复的错误。
Keras现在通过tensorflow后端支持'nearest'和'bilinear'插值。检查documentation。但默认的大小值确实是(2,2)或int值,因此在这种情况下,您的上采样将至少是两倍。
'nearest'
'bilinear'
此代码需要Keras 2.2.3或更高版本。如果您使用的是tf.keras,不幸的是,您不能单独安装keras,它作为tensorflow安装的一部分捆绑在一起。因此,要么找到tf版本,要么安装夜间生成。
Keras 2.2.3
tf.keras
tf
pip3 install --upgrade tf-nightly
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。
我建议不要使用任何
tf.image.resize_*
函数作为they suffer from a nasty bug来not be fixed。一组新的、不同的图像重采样功能显然正在酝酿之中。同时,您可以在web上找到一些关于如何自己使用transposed convolutions来实现这一点的示例。不幸的是,每通道上采样的效率要低得多,但正确的要比快速的好。
编辑
他们终于在TF 2.0中修复了这个错误:
此修复当前不通过渐变,这是。。。希望也能得到修复的错误。
Keras现在通过tensorflow后端支持
'nearest'
和'bilinear'
插值。检查documentation。但默认的大小值确实是(2,2)或int值,因此在这种情况下,您的上采样将至少是两倍。此代码需要
Keras 2.2.3
或更高版本。如果您使用的是tf.keras
,不幸的是,您不能单独安装keras,它作为tensorflow安装的一部分捆绑在一起。因此,要么找到tf
版本,要么安装夜间生成。pip3 install --upgrade tf-nightly
tf.image.resize_images应该做你需要的。它同时接受3d(单图像)和4d(成批图像)张量,具有任意深度(通道数)。所以这应该是有希望的:
双线性插值是默认值,因此不需要指定它。您也可以直接使用resize_bilinear。
相关问题 更多 >
编程相关推荐