PIL对numpy和PIL对张量是不同的



我有图像和和火炬张量和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]的范围内。

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

最新更新