PIL转numpy和PIL转tensor是不一样的

PIL to numpy and PIL to tensor is different

我有图像和 sum 火炬张量和 numpy 数组不同,为什么? 如何 torch_img.sum() = numpy_float_img.sum()?

from PIL import Image
from torchvision import transforms as T

# Read image with PIL
img = Image.open(img_path).resize((224,224))

torch_img = T.ToTensor()(img)
numpy_img = np.asarray(img)
numpy_img_float = np.asarray(img).astype(np.float32)

print(torch_img.sum(), numpy_img.sum(), numpy_img_float.sum())
->56914.496, 14513196, 14513196.0

有人知道为什么吗?

注意 torch_img 如何在 [0,1] 范围内,而 numpy_imgnumpy_img_float 都在 [0, 255] 范围内。查看 torchvision.transforms.ToTensor 的文档,如果提供的输入是 PIL 图像,则值将映射到 [0, 1]。相反,numpy.array 的值将保持在 [0, 255] 范围内。

除此之外,结果中的微小差异是由不同的浮点精度引起的。