現象:當細節幾乎一致時,采用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)
附圖:



