首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -火炬测量SSIM取决于批处理大小。

Python -火炬测量SSIM取决于批处理大小。
EN

Stack Overflow用户
提问于 2022-09-23 13:54:59
回答 1查看 103关注 0票数 1

对于这个简单的问题,我只想知道我是否发现了一个bug,或者我是否在这里不明白什么。我得到了以下示例,其中我打印了两个张量的火炬度量库的ssim,其批次大小为8,单个计算值的平均值。

为什么它们不一样?

代码语言:javascript
复制
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)

控制台输出:

代码语言:javascript
复制
tensor(0.0404)
tensor(0.0340)

Python版本3.8.10

TrochMetrics版本0.9.1

PyTroch版本1.10.1+cu113

或者这是个git问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-23 20:06:29

差异来自于data_range参数。请参阅下列文件:

代码语言:javascript
复制
data_range: Range of the image. If ``None``, it is determined from the image (max - min)

https://torchmetrics.readthedocs.io/en/stable/image/structural_similarity.html#structural-similarity-index-measure-ssim

默认情况下,它是None,因此批处理和批处理的单个示例将从数据派生出不同的data_range

代码语言:javascript
复制
if data_range is None:
    data_range = max(preds.max() - preds.min(), target.max() - target.min())

https://github.com/Lightning-AI/metrics/blob/19355a9d2c51b3b39b311694d7b8e6856a73eae6/src/torchmetrics/functional/image/ssim.py#L129

如果像这样设置特定的data_range

代码语言:javascript
复制
ssim = StructuralSimilarityIndexMeasure(kernel_size=(5, 5), data_range=255)

结果将是一样的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73828843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档