ทิลเซอร์ PyTorch เป็นอาเรย์ n มิติที่เก็บข้อมูลชนิดเดียว คล้าย numpy array แต่ทิลเซอร์ใช้ GPU เร่งการคำนวณ เพื่อการคำนวณที่เร็วขึ้น ภาพจึงต้องแปลงเป็นทิลเซอร์
ขั้นตอนการทำงาน
นำเข้าไลบรารี torch, torchvision, Pillow
อ่านภาพ ภาพต้องเป็น PIL image หรือ numpy.ndarray (HxWxC) ในช่วง [0, 255] โดย H, W, C คือความสูง ความกว้าง และจำนวนช่องสี
กำหนด transform เพื่อแปลงภาพเป็นทิลเซอร์ ใช้ transforms.ToTensor()
แปลงภาพเป็นทิลเซอร์ด้วย transform ที่กำหนด
ภาพตัวอย่าง

ตัวอย่างที่ 1: แปลง PIL Image เป็น Tensor
import torch
from PIL import Image
import torchvision.transforms as transforms
# อ่านภาพ
image = Image.open('Penguins.jpg')
# กำหนด transform แปลงเป็นทิลเซอร์
transform = transforms.ToTensor()
# แปลงภาพเป็นทิลเซอร์
tensor = transform(image)
# พิมพ์ทิลเซอร์ที่แปลงแล้ว
print(tensor)
ผลลัพธ์
tensor([[[0.4510, 0.4549, 0.4667, ..., 0.3333, 0.3333, 0.3333],
[0.4549, 0.4510, 0.4627, ..., 0.3373, 0.3373, 0.3373],
[0.4667, 0.4588, 0.4667, ..., 0.3451, 0.3451, 0.3412],
...,
[0.6706, 0.5020, 0.5490, ..., 0.4627, 0.4275, 0.3333],
[0.4196, 0.5922, 0.6784, ..., 0.4627, 0.4549, 0.3569],
[0.3569, 0.3529, 0.4784, ..., 0.3922, 0.4314, 0.3490]],
[[0.6824, 0.6863, 0.7020, ..., 0.6392, 0.6392, 0.6392],
[0.6863, 0.6824, 0.6980, ..., 0.6314, 0.6314, 0.6314],
[0.6980, 0.6902, 0.6980, ..., 0.6392, 0.6392, 0.6353],
...,
[0.7255, 0.5412, 0.5765, ..., 0.5255, 0.5020, 0.4157],
[0.4706, 0.6314, 0.7098, ..., 0.5255, 0.5294, 0.4392],
[0.4196, 0.3961, 0.5020, ..., 0.4510, 0.5059, 0.4314]],
[[0.8157, 0.8196, 0.8353, ..., 0.7922, 0.7922, 0.7922],
[0.8196, 0.8157, 0.8314, ..., 0.7882, 0.7882, 0.7882],
[0.8314, 0.8235, 0.8314, ..., 0.7961, 0.7961, 0.7922],
...,
[0.6235, 0.5059, 0.6157, ..., 0.4863, 0.4941, 0.4196],
[0.3922, 0.6000, 0.7176, ..., 0.4863, 0.5216, 0.4431],
[0.3686, 0.3647, 0.4863, ..., 0.4235, 0.4980, 0.4353]]])
ตัวอย่างที่ 2: แปลงภาพจาก OpenCV (numpy.ndarray) เป็น Tensor
ภาพที่อ่านด้วย OpenCV เป็น numpy.ndarray สามารถแปลงเป็นทิลเซอร์ด้วย transforms.ToTensor() เช่นกัน
import torch
import cv2
import torchvision.transforms as transforms
# อ่านภาพด้วย OpenCV
image = cv2.imread('Penguins.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # แปลง BGR เป็น RGB
# กำหนด transform
transform = transforms.ToTensor()
# แปลงเป็นทิลเซอร์
tensor = transform(image)
print(tensor)
ผลลัพธ์
(ผลลัพธ์เหมือนตัวอย่างที่ 1 เนื่องจากเป็นภาพเดียวกัน)
หมายเหตุ: transforms.ToTensor() จะปรับสเกลค่าพิกเซลจาก [0, 255] เป็น [0.0, 1.0] และเปลี่ยนลำดับมิติจาก HWC เป็น CHW อัตโนมัติ