6

我想使用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 会给我一个一维图像。

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

4

3 回答 3

12

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

于 2018-11-18T14:17:52.193 回答
2

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

于 2018-11-16T18:06:33.770 回答
1

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

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

“注意:真正的 SSIM 仅在灰度上定义。此函数不执行任何色彩空间变换。(如果输入已经是 YUV,则它将计算 YUV SSIM 平均值。)”

于 2019-06-26T19:12:27.060 回答