现象:当细节几乎一致时,采用MS-SSIM根本无法学习颜色!!!(实验中红色、黄色等都是不能恢复的),此时可以先用MS-SSIM学习结构恢复,然后采用L1+L2学习颜色恢复
实验:
采用MS-SSIM无法完全学习颜色,而且一般MS-SSIM Loss只能下降到0.04左右
采用MS-SSIM+L1+L2 loss依然无法学习颜色,即MS-SSIM Loss和L1 + L2 Loss都不会降低
采用L1+L2 loss可以学习颜色,而且很神奇的是:在L1+L2 loss下降的同时,MS-SSIM loss也会下降。
结论:
因此,一般可以这样做:
先采用MS-SSIM Loss 学习结构
再采用L2 Loss学习边缘+颜色
最后采用L1 Loss学习小噪点去除
最终ms-ssim loss可以从0.04 下降到0.02,而L1 loss能降到0.10,L2 loss能降到0.01左右。Loss的代码如下:
import tensorflow as tf
if tf.__version__ >= '1.10':
pass
else:
print('not supported')
norm_im = tf.minimum(tf.maximum(out_im, 0.0), 1.0)
ssim_loss = 1 - tf.image.ssim_multiscale(norm_im[0], gt_im[0], 1.0)
l1_loss = tf.reduce_mean(tf.reduce_sum(tf.abs(norm_im - gt_im), axis=-1))
l2_loss = tf.reduce_mean(tf.reduce_sum(tf.square(norm_im - gt_im), axis=-1))
G_loss = l1_loss + l2_loss
tf.summary.scalar('G_loss', G_loss)
tf.summary.scalar('MS-SSIM Loss', ssim_loss)
tf.summary.scalar('L1 Loss', l1_loss)
tf.summary.scalar('L2 Loss', l2_loss)
附图: