如何解决张量流中的 MS-SSIM
我想使用 tf.image.ssim_multiscale 来计算度量 MS-SSIM 并编写了这个简单的代码。但它有错误:
#(x_train.y_train),(x_test,y_test)=tf.keras.datasets.cifar10.load_data()
(train_images,train_labels),(test_images,test_labels) = tf.keras.datasets.cifar10.load_data()
q1=train_images[0:10]
tf.image.ssim_multiscale(q1,q1,max_val=255)
InvalidArgumentError: Expected 'tf.Tensor(False,shape=(),dtype=bool)' to be true. Summarized data: 10,8,3
11
解决方法
请参考我原来的回答 here。问题似乎与空间维度缩减后的断言有关。在 _ssim_per_channel
中,图像的 H
和 W
是 asserted 对 filter_size
。而在 ssim_multiscale
中,downsampling 执行 len(power_factors)-1
次。
这里有两种解决方法:
-
确保
filter_size
足够小,以便在ssim_multiscale
内下采样后计算所有四个空间尺度(不包括第一个尺度)的 ssim 值。相反,请确保图像的H
和W
都足够大,使得H/(2**4) and W/(2**4) >= filter_size
. -
由于下采样执行
len(power_factors)-1
次,您还可以使用比默认值更少的_MSSSIM_WEIGHTS
或 power_factors,这意味着H/(2**(len(power_factors)-1)) and W/(2**(len(power_factors)-1)) >= filter_size
.
field1 = tf.random.uniform(shape=[8,64,1],minval=0,maxval=1)
field2 = tf.random.uniform(shape=[8,maxval=1)
#Use smaller filter_size
ms_ssim_score = tf.image.ssim_multiscale(img1=field1,img2=field2,max_val=1.0,filter_size=4)
#Or use lesser number of power_factors
ms_ssim_score = tf.image.ssim_multiscale(img1=field1,power_factors=(0.0448,0.2856,0.3001),filter_size=11)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。