首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tensorflow中的MS-SSIM

tensorflow中的MS-SSIM
EN

Stack Overflow用户
提问于 2020-12-22 23:47:23
回答 1查看 181关注 0票数 1

我想将tf.image.ssim_multiscale用于cacculate指标MS-SSIM,并编写了这个简单的代码。但它有错误:

代码语言:javascript
复制
#(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
EN

回答 1

Stack Overflow用户

发布于 2021-01-20 21:06:43

请参考我最初的答案here。这个问题似乎与空间降维后的断言有关。在_ssim_per_channel中,图像的HWassertedfilter_size。而在ssim_multiscale中,downsampling 被执行len(power_factors)-1次。

以下是两种解决方法:

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

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

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65411698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档