ToPILImage in PyTorch (4)
Buy Me a Coffee☕ *Memos: My post explains ToPILImage() about no arguments. My post explains ToPILImage() about mode argument (1). My post explains ToPILImage() about mode argument (2). ToPILImage() can convert an Image([..., C, H, W]), tensor or ndarray to a PIL(Pillow library) Image([H, W, C]) and doesn't scale its values to [0.0, 1.0] as shown below. *It's about mode argument (3): from torchvision.datasets import OxfordIIITPet from torchvision.transforms.v2 import ToPILImage, ToImage, PILToTensor import torch Image_data = OxfordIIITPet( root="data", transform=ToImage() ) Tensor_data = OxfordIIITPet( root="data", transform=PILToTensor() ) def show_images(im, m=None): if m == None: m = [None for _ in range(len(im))] if len(im) > len(m): for _ in range(len(im)-len(m)): m.append(None) plt.figure(figsize=[13, 6]) for i in range(len(im)): image = im[i] if torch.is_tensor(image): dpart = str(image.dtype).split(".")[1] elif isinstance(image, np.ndarray): dpart = str(image.dtype) title = "m" + str(m[i]) + "_PILImage from " \ + type(image).__name__+ "(" + dpart + ")" plt.subplot(1, 3, (i+1)) tp = ToPILImage(mode=m[i]) plt.title(label=title, y=1, fontsize=14) plt.imshow(X=tp(image)) plt.xticks(ticks=[]) plt.yticks(ticks=[]) plt.tight_layout() plt.show() show_images(im=[Image_data[0][0], Tensor_data[0][0]], m=["RGB", "RGB"]) show_images(im=[Image_data[0][0], Tensor_data[0][0]], m=["YCbCr", "YCbCr"]) show_images(im=[Image_data[0][0], Tensor_data[0][0]], m=["HSV", "HSV"]) print() show_images(im=[torch.tensor([[[0]], [[1]]])], m=["LA"]) # int64 show_images(im=[torch.tensor([[[0]], [[1]], [[2]]]), torch.tensor([[[0]], [[1]], [[2]]]), torch.tensor([[[0]], [[1]], [[2]]])], m=["RGB", "YCbCr", "HSV"]) show_images(im=[torch.tensor([[[0]], [[1]], [[2]], [[3]]]), torch.tensor([[[0]], [[1]], [[2]], [[3]]]), torch.tensor([[[0]], [[1]], [[2]], [[3]]])], m=["RGBA", "CMYK", "RGBX"]) print() show_images(im=[torch.tensor([[[0]]], dtype=torch.int32), torch.tensor([[[0]], [[1]]], dtype=torch.int32)], m=["I", "LA"]) show_images(im=[torch.tensor([[[0]], [[1]], [[2]]], dtype=torch.int32), torch.tensor([[[0]], [[1]], [[2]]], dtype=torch.int32), torch.tensor([[[0]], [[1]], [[2]]], dtype=torch.int32)], m=["RGB", "YCbCr", "HSV"]) show_images(im=[torch.tensor([[[0]], [[1]], [[2]], [[3]]], dtype=torch.int32), torch.tensor([[[0]], [[1]], [[2]], [[3]]], dtype=torch.int32), torch.tensor([[[0]], [[1]], [[2]], [[3]]], dtype=torch.int32)], m=["RGBA", "CMYK", "RGBX"]) print() show_images(im=[torch.tensor([[[0.]]]), # float32 torch.tensor([[[0.]], [[1.]]])], m=["L", "LA"]) show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]]]), torch.tensor([[[0.]], [[1.]], [[2.]]]), torch.tensor([[[0.]], [[1.]], [[2.]]])], m=["RGB", "YCbCr", "HSV"]) show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]]), torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]]), torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]])], m=["RGBA", "CMYK", "RGBX"]) print() show_images(im=[torch.tensor([[[0.]]], dtype=torch.float64), torch.tensor([[[0.]], [[1.]]], dtype=torch.float64)], m=["L", "LA"]) show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]]], dtype=torch.float64), torch.tensor([[[0.]], [[1.]], [[2.]]], dtype=torch.float64), torch.tensor([[[0.]], [[1.]], [[2.]]], dtype=torch.float64)], m=["RGB", "YCbCr", "HSV"]) show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]], dtype=torch.float64), torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]], dtype=torch.float64), torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]], dtype=torch.float64)], m=["RGBA", "CMYK", "RGBX"]) print() show_images(im=[torch.tensor([[[0.+0.j]], [[1.+0.j]]])], # complex64 m=["LA"]) show_images(im=[torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]]]), torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]]]), torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]]])], m=["RGB", "YCbCr", "HSV"]) show_images(im=[torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]], [[3.+0.j]]]), torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]], [[3.+0.j]]]), torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]], [[3.+0.j]]])], m=["RGBA", "CMYK", "RGBX"]) print() show_images(im=[torch.tensor([[[True]], [[False]]])], m=["LA"]) show_ima

*Memos:
- My post explains ToPILImage() about no arguments.
-
My post explains ToPILImage() about
mode
argument (1). -
My post explains ToPILImage() about
mode
argument (2).
ToPILImage() can convert an Image([..., C, H, W]
), tensor or ndarray to a PIL(Pillow library) Image([H, W, C]
) and doesn't scale its values to [0.0, 1.0]
as shown below. *It's about mode
argument (3):
from torchvision.datasets import OxfordIIITPet
from torchvision.transforms.v2 import ToPILImage, ToImage, PILToTensor
import torch
Image_data = OxfordIIITPet(
root="data",
transform=ToImage()
)
Tensor_data = OxfordIIITPet(
root="data",
transform=PILToTensor()
)
def show_images(im, m=None):
if m == None:
m = [None for _ in range(len(im))]
if len(im) > len(m):
for _ in range(len(im)-len(m)):
m.append(None)
plt.figure(figsize=[13, 6])
for i in range(len(im)):
image = im[i]
if torch.is_tensor(image):
dpart = str(image.dtype).split(".")[1]
elif isinstance(image, np.ndarray):
dpart = str(image.dtype)
title = "m" + str(m[i]) + "_PILImage from " \
+ type(image).__name__+ "(" + dpart + ")"
plt.subplot(1, 3, (i+1))
tp = ToPILImage(mode=m[i])
plt.title(label=title, y=1, fontsize=14)
plt.imshow(X=tp(image))
plt.xticks(ticks=[])
plt.yticks(ticks=[])
plt.tight_layout()
plt.show()
show_images(im=[Image_data[0][0], Tensor_data[0][0]], m=["RGB", "RGB"])
show_images(im=[Image_data[0][0], Tensor_data[0][0]], m=["YCbCr", "YCbCr"])
show_images(im=[Image_data[0][0], Tensor_data[0][0]], m=["HSV", "HSV"])
print()
show_images(im=[torch.tensor([[[0]], [[1]]])], m=["LA"]) # int64
show_images(im=[torch.tensor([[[0]], [[1]], [[2]]]),
torch.tensor([[[0]], [[1]], [[2]]]),
torch.tensor([[[0]], [[1]], [[2]]])],
m=["RGB", "YCbCr", "HSV"])
show_images(im=[torch.tensor([[[0]], [[1]], [[2]], [[3]]]),
torch.tensor([[[0]], [[1]], [[2]], [[3]]]),
torch.tensor([[[0]], [[1]], [[2]], [[3]]])],
m=["RGBA", "CMYK", "RGBX"])
print()
show_images(im=[torch.tensor([[[0]]], dtype=torch.int32),
torch.tensor([[[0]], [[1]]], dtype=torch.int32)],
m=["I", "LA"])
show_images(im=[torch.tensor([[[0]], [[1]], [[2]]], dtype=torch.int32),
torch.tensor([[[0]], [[1]], [[2]]], dtype=torch.int32),
torch.tensor([[[0]], [[1]], [[2]]], dtype=torch.int32)],
m=["RGB", "YCbCr", "HSV"])
show_images(im=[torch.tensor([[[0]], [[1]], [[2]], [[3]]], dtype=torch.int32),
torch.tensor([[[0]], [[1]], [[2]], [[3]]], dtype=torch.int32),
torch.tensor([[[0]], [[1]], [[2]], [[3]]], dtype=torch.int32)],
m=["RGBA", "CMYK", "RGBX"])
print()
show_images(im=[torch.tensor([[[0.]]]), # float32
torch.tensor([[[0.]], [[1.]]])], m=["L", "LA"])
show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]]]),
torch.tensor([[[0.]], [[1.]], [[2.]]]),
torch.tensor([[[0.]], [[1.]], [[2.]]])],
m=["RGB", "YCbCr", "HSV"])
show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]]),
torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]]),
torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]])],
m=["RGBA", "CMYK", "RGBX"])
print()
show_images(im=[torch.tensor([[[0.]]], dtype=torch.float64),
torch.tensor([[[0.]], [[1.]]], dtype=torch.float64)],
m=["L", "LA"])
show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]]], dtype=torch.float64),
torch.tensor([[[0.]], [[1.]], [[2.]]], dtype=torch.float64),
torch.tensor([[[0.]], [[1.]], [[2.]]], dtype=torch.float64)],
m=["RGB", "YCbCr", "HSV"])
show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]],
dtype=torch.float64),
torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]],
dtype=torch.float64),
torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]],
dtype=torch.float64)],
m=["RGBA", "CMYK", "RGBX"])
print()
show_images(im=[torch.tensor([[[0.+0.j]], [[1.+0.j]]])], # complex64
m=["LA"])
show_images(im=[torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]]]),
torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]]]),
torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]]])],
m=["RGB", "YCbCr", "HSV"])
show_images(im=[torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]],
[[3.+0.j]]]),
torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]],
[[3.+0.j]]]),
torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]],
[[3.+0.j]]])], m=["RGBA", "CMYK", "RGBX"])
print()
show_images(im=[torch.tensor([[[True]], [[False]]])], m=["LA"])
show_images(im=[torch.tensor([[[True]], [[False]], [[True]]]), # bool
torch.tensor([[[True]], [[False]], [[True]]]),
torch.tensor([[[True]], [[False]], [[True]]])],
m=["RGB", "YCbCr", "HSV"])
show_images(im=[torch.tensor([[[True]], [[False]], [[True]], [[False]]]),
torch.tensor([[[True]], [[False]], [[True]], [[False]]]),
torch.tensor([[[True]], [[False]], [[True]], [[False]]])],
m=["RGBA", "CMYK", "RGBX"])