Работа с функцией потерь SSIM в тензорном потоке для изображений RGB
Я хочу использовать метрику SSIM в качестве функции потерь для модели, над которой я работаю в тензорном потоке. SSIM должен измерить сходство между моим восстановленным выходным изображением моего шумоподавляющего автоэнкодера и входным неповрежденным изображением (RGB).
Насколько я понял, для использования метрики 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 (с точки зрения восстановленных каналов изображения) в тензорном потоке?
2 ответа
Я смог решить эту проблему, изменив динамический диапазон изображений на 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)
SSIM предназначен только для измерения разницы между двумя сигналами яркости. Изображения RGB преобразуются в оттенки серого перед измерением сходства. Если бы это было передано обратно в функцию потерь, он не знал бы, теряет ли изображение насыщенность цвета, потому что оно не будет отображаться в метрике ошибки. Это просто теория.
В документации TensorFlow сказано, что преобразование цветового пространства не применяется.
https://www.tensorflow.org/api_docs/python/tf/image/ssim
"Примечание. Истинный SSIM определяется только в градациях серого. Эта функция не выполняет никакого преобразования цветового пространства. (Если входной сигнал уже является YUV, тогда будет вычислено среднее значение YUV SSIM.)"