1

我想使用 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, 8, 3
11
4

1 回答 1

0

在此处参考我的原始答案。问题似乎在于空间维度缩减后的断言。在 中,图像_ssim_per_channel Hand被断言反对。而在 中,下采样是执行次数。Wfilter_sizessim_multiscalelen(power_factors)-1

这里有两个解决方法:

  1. 确保它filter_size足够小,可以在下采样后计算所有四个空间尺度(不包括第一尺度)的 ssim 值ssim_multiscale。相反,请确保您的图像HW 图像都足够大,这样H/(2**4) and W/(2**4) >= filter_size.

  2. 由于下采样是len(power_factors)-1多次执行的,因此您还可以使用_MSSSIM_WEIGHTS比默认值更少的 of or power_factors,这意味着H/(2**(len(power_factors)-1)) and W/(2**(len(power_factors)-1)) >= filter_size.

field1 = tf.random.uniform(shape=[8, 64, 64, 1], minval=0, maxval=1)
field2 = tf.random.uniform(shape=[8, 64, 64, 1], minval=0, 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, img2=field2, max_val=1.0,
                                         power_factors=(0.0448, 0.2856, 0.3001),
                                         filter_size=11)
于 2021-01-20T13:06:43.173 回答