将 SSIM 损失函数与 Keras 结合使用

2024-04-29

我需要使用 Sewar 的 SSIM 作为损失函数,以便比较我的模型的图像。

当我尝试编译模型时出现错误。我导入该函数并编译模型,如下所示:

from sewar.full_ref import ssim
...
model.compile('ssim', optimizer=my_optimizer, metrics=[ssim])

我得到这个:

File "/media/merry/merry32/train.py", line 19, in train
model.compile(loss='ssim', optimizer=opt, metrics=[ssim])
File "/home/merry/anaconda3/envs/merry_env/lib/python3.7/site-packages/keras/engine/training.py", line 451, in compile
handle_metrics(output_metrics)
File "/home/merry/anaconda3/envs/merry_env/lib/python3.7/site-packages/keras/engine/training.py", line 420, in handle_metrics
mask=masks[i])
File "/home/merry/anaconda3/envs/merry_env/lib/python3.7/site-packages/keras/engine/training_utils.py", line 404, in weighted
score_array = fn(y_true, y_pred)
File "/home/merry/anaconda3/envs/merry_env/lib/python3.7/site-packages/sewar/full_ref.py", line 143, in ssim
MAX = np.iinfo(GT.dtype).max
File "/home/merry/anaconda3/envs/merry_env/lib/python3.7/site-packages/numpy/core/getlimits.py", line 506, in __init__
raise ValueError("Invalid integer data type %r." % (self.kind,))
ValueError: Invalid integer data type 'O'.

我也可以写这样的东西:

model.compile(ssim(), optimizer=my_optimizer, metrics=[ssim()])

但后来我得到了这个错误(显然):

TypeError: ssim() missing 2 required positional arguments: 'GT' and 'P'

我只想做与mean_sqeared_error相同的事情,但是使用SSIM,就像这样(它可以完美地工作,不需要向它传递参数):

model.compile('mean_squared_error', optimizer=my_optimizer, metrics=['mse'])

关于如何使用这个函数进行编译有什么想法吗?


Keras 有 SSIM 的实现。你可以这样使用它:

def SSIMLoss(y_true, y_pred):
  return 1 - tf.reduce_mean(tf.image.ssim(y_true, y_pred, 1.0))

self.model.compile(optimizer=sgd, loss=SSIMLoss)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 SSIM 损失函数与 Keras 结合使用 的相关文章

随机推荐