在 RGB 图像的张量流中使用 SSIM 损失函数

Working with SSIM loss function in tensorflow for RGB images

我想使用 SSIM 指标 作为我在 tensorflow 中处理的模型的损失函数。 SSIM 应该测量我的去噪自动编码器的重建输出图像与输入未损坏图像 (RGB) 之间的相似性。

据我所知,为了在 tensorflow 中使用 SSIM 指标,图像应该 标准化 为 [0,1] 或 [0,255] 而不是 [-1, 1].在将我的张量转换为 [0,1] 并将 SSIM 作为我的损失函数后,重建的图像是黑白的,而不是彩色的 RGB 图像。

tf.reduce_mean(tf.image.ssim(reconstructed, truth, 1.0))

我的模型在 MSE(均方误差)下工作正常,重建的图像是彩色的 (RGB)

使用 tf.losses.mean_squared_error(truth, reconstructed) 重建的图像将是 RGB 图像,而使用 SSIM 将给我一个一维图像。

为什么在 tensorflow 中使用 SSIM 作为损失函数得到的结果与 MSE(就重建图像通道而言)不同?

SSIM 旨在仅测量两个亮度信号之间的差异。 RGB 图像在测量相似性之前被转换为灰度。如果将其反馈到损失函数中,它就不知道图像是否正在失去色彩饱和度,因为它不会显示在误差指标中。那只是一个理论。

我能够通过将图像的动态范围更改为 2.0 来解决问题,因为我的图像在 [-1, 1] 之间缩放 来自:

loss_rec = tf.reduce_mean(tf.image.ssim(truth, reconstructed, 2.0))

并且由于更高的 SSIM 值显示更好的图像质量,我不得不 最小化损失函数的负数 ( SSIM)来优化我的模型:

optimizer = tf.train.AdamOptimizer(learning_rate).minimize(-1 * loss_rec)

TensorFlow 文档说没有应用色彩空间转换。

https://www.tensorflow.org/api_docs/python/tf/image/ssim

"Note: The true SSIM is only defined on grayscale. This function does not perform any colorspace transform. (If input is already YUV, then it will compute YUV SSIM average.)"