PIL для numpy и PIL для тензора разные

#numpy #pytorch #python-imaging-library #tensor

Вопрос:

У меня есть тензор изображения и суммы, а массив 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
 

У кого-нибудь есть идеи, почему?

Ответ №1:

Обратите внимание, как torch_img находится в [0,1] диапазоне, в то время numpy_img как numpy_img_float оба находятся в [0, 255] диапазоне. Просматривая документацию torchvision.transforms.ToTensor , если предоставленный ввод представляет собой PIL изображение, тогда значения будут сопоставлены [0, 1] . Напротив, numpy.array значения будут оставаться в [0, 255] диапазоне.

Кроме этого, небольшие различия в результатах вызваны разной точностью с плавающей запятой.