对于这个简单的问题,我只想知道我是否发现了一个bug,或者我是否在这里不明白什么。我得到了以下示例,其中我打印了两个张量的火炬度量库的ssim,其批次大小为8,单个计算值的平均值。
为什么它们不一样?
ssim = StructuralSimilarityIndexMeasure(kernel_size=(5, 5))
A = torch.zeros([8, 1, 500, 500])
B = torch.randn([8, 1, 500, 500])
print(ssim(A, B))
ssim1 = ssim(A[0].unsqueeze(0), B[0].unsqueeze(0))
ssim2 = ssim(A[1].unsqueeze(0), B[1].unsqueeze(0))
ssim3 = ssim(A[2].unsqueeze(0), B[2].unsqueeze(0))
ssim4 = ssim(A[3].unsqueeze(0), B[3].unsqueeze(0))
ssim5 = ssim(A[4].unsqueeze(0), B[4].unsqueeze(0))
ssim6 = ssim(A[5].unsqueeze(0), B[5].unsqueeze(0))
ssim7 = ssim(A[6].unsqueeze(0), B[6].unsqueeze(0))
ssim8 = ssim(A[7].unsqueeze(0), B[7].unsqueeze(0))
print((ssim1 + ssim2 + ssim3 + ssim4 + ssim5 + ssim6 + ssim7 + ssim8) / 8)控制台输出:
tensor(0.0404)
tensor(0.0340)Python版本3.8.10
TrochMetrics版本0.9.1
PyTroch版本1.10.1+cu113
或者这是个git问题?
发布于 2022-09-23 20:06:29
差异来自于data_range参数。请参阅下列文件:
data_range: Range of the image. If ``None``, it is determined from the image (max - min)默认情况下,它是None,因此批处理和批处理的单个示例将从数据派生出不同的data_range:
if data_range is None:
data_range = max(preds.max() - preds.min(), target.max() - target.min())如果像这样设置特定的data_range:
ssim = StructuralSimilarityIndexMeasure(kernel_size=(5, 5), data_range=255)结果将是一样的。
https://stackoverflow.com/questions/73828843
复制相似问题