0

我想实现一个 SSIM 损失函数,因为边界被卷积中止,我想保留边界并计算边界像素的 L1 损失。代码是从这里学习的。TensorFlow 的 SSIM / MS-SSIM

比如我们有img1和img2 size [batch,32,32,32,1],还有Guassian 11的window_size,结果ssim map会是[batch,22,22,22,1],L1 map [batch ,32,32,32,1] 如何将 ssim 分配到 L1 的中心?

我收到这样的错误; TypeError: 'Tensor' object does not support item assignment

4

1 回答 1

1

对于 value-wise assignment,请在此处查看答案:Adjust Single Value within Tensor -- TensorFlow

一种可能更符合您正在寻找的方法可能是:

  • 创建 ssim_map 张量
  • 创建 ssim_map 的框架,即完成 ssim_map 到 L1_map 所需的部分(作为张量)
  • 使用tf.concat操作将各个部分组合在一起并获得最终张量

例如,我没有检查它是否有效,但是这样的想法应该可以完成工作:

upper_band1 = L1_map[:, :5, 5:-5, 5:-5, :]
lower_band1 = L1_map[:, -5:, 5:-5, 5:-5, :]
upper_band2 = L1_map[:, :, :5, 5:-5, :]
lower_band2 = L1_map[:, :, -5:, 5:-5, :]
upper_band3 = L1_map[:, :, :, :5, :]
lower_band3 = L1_map[:, :, :, -5:, :]

intermediate_1 = tf.concat([upper_band1, ssmi_map, lower_band1], axis=1)
intermediate_2 = tf.concat([upper_band2, intermediate1, lower_band2], axis=2)
final = tf.concat([upper_band3, intermediate3, lower_band3], axis=3)
于 2017-06-20T10:19:15.710 回答