ml.preprocessing --- ML Preprocessing

โมดูล ml.preprocessing มีคลาสสำหรับเตรียมภาพก่อนใช้งานกับโมเดล machine learning

class Normalization -- Image Normalization

ออบเจ็กต์ Normalization แปลงออบเจ็กต์ image.Image เป็นเทนเซอร์อินพุต ndarray สำหรับใช้กับ ml.Model.predict() ออบเจ็กต์นี้ถูกสร้างโดยอัตโนมัติโดยออบเจ็กต์ ml.Model เมื่อภาพถูกส่งไปยัง ml.Model.predict() แต่อาจสร้างขึ้นเองได้เพื่อควบคุมการแปลง (scale, mean/stdev, ROI)

class ml.preprocessing.Normalization(scale: tuple[float, float] = (0.0, 1.0), mean: tuple[float, float, float] = (0.0, 0.0, 0.0), stdev: tuple[float, float, float] = (1.0, 1.0, 1.0), roi: tuple[int, int, int, int] = None)

สร้างออบเจ็กต์ Normalization

scale คือช่วง (min, max) ของค่าที่เทนเซอร์อินพุต floating-point คาดหวังหลัง normalization (เช่น (0.0, 1.0) หรือ (-1.0, 1.0)) จะถูกเพิกเฉยสำหรับเทนเซอร์ uint8 และ int8

mean คือค่าเฉลี่ยต่อช่อง (R, G, B) ที่ถูกลบออกจากภาพหลัง scaling สำหรับเทนเซอร์ grayscale ค่าเฉลี่ยจะถูกลดเหลือค่า luma เดียวโดยใช้ 0.299*R + 0.587*G + 0.114*B จะถูกเพิกเฉยสำหรับเทนเซอร์ uint8 และ int8

stdev คือส่วนเบี่ยงเบนมาตรฐานต่อช่อง (R, G, B) ที่ใช้หารภาพหลังจากลบค่าเฉลี่ย สำหรับเทนเซอร์ grayscale ค่า stdev จะถูกลดเหลือค่า luma เดียวโดยใช้ 0.299*R + 0.587*G + 0.114*B จะถูกเพิกเฉยสำหรับเทนเซอร์ uint8 และ int8

roi คือบริเวณที่สนใจ (ROI) แบบ optional (x, y, w, h) ภายในภาพอินพุตที่จะตัด หาก None จะใช้ภาพทั้งหมด บริเวณที่ตัดจะถูกจัดกึ่งกลาง และ scale แบบ bilinear (รักษา aspect ratio พร้อม padding สีดำ) ให้ตรงกับมิติเทนเซอร์อินพุตของโมเดล

__call__(image: image.Image) Normalization
__call__(buffer: bytearray, shape: tuple[int, int, int, int], dtype: int) None

เมื่อถูกเรียกด้วยอาร์กิวเมนต์ image.Image เดียว จะคืนออบเจ็กต์ Normalization ใหม่ที่ผูกกับภาพนั้น ออบเจ็กต์ที่ผูกแล้วคือสิ่งที่ ml.Model.predict() เรียกภายในเพื่อเติมข้อมูลเทนเซอร์อินพุต หาก roi ไม่ได้ถูกตั้งค่าบนอินสแตนซ์เดิม จะถูกกำหนดให้เป็นขนาดภาพทั้งหมด

เมื่อถูกเรียกด้วย (buffer, shape, dtype) จะเติมข้อมูลใน buffer โดยตรงด้วยเทนเซอร์อินพุตที่ normalize แล้วสำหรับภาพที่ผูกไว้ก่อนหน้า shape ต้องเป็น (1, H, W, C) โดย C เท่ากับ 1 (grayscale) หรือ 3 (RGB) dtype คือรหัส numpy type ของ ulab (เช่น ord('f') สำหรับ float32, ord('b') สำหรับ int8, ord('B') สำหรับ uint8) เทนเซอร์ float จะใช้ scale, mean, และ stdev ส่วนเทนเซอร์ integer จะถูกเขียนโดยตรง (พร้อม offset สำหรับ int8)