在 RGB 图像的 tensorflow 中使用 SSIM 损失函数

You*_*f H 6 python image mse ssim tensorflow

我想使用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))
Run Code Online (Sandbox Code Playgroud)

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

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

为什么在张量流中使用SSIM 作为损失函数给我的结果与 MSE(在重建图像通道方面)不同?

You*_*f H 11

我能够通过将图像的动态范围更改为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)