ml.preprocessing — עיבוד מקדים של ML

המודול ml.preprocessing מכיל מחלקות לעיבוד מקדים של תמונות לשימוש עם מודלים של למידת מכונה.

class Normalization – נרמול תמונה

האובייקט Normalization ממיר אובייקטים מסוג image.Image לטנזורי קלט מסוג ndarray לשימוש עם ml.Model.predict(). הוא נוצר אוטומטית על ידי האובייקט ml.Model כאשר תמונה מועברת אל ml.Model.predict(), אך ניתן ליצור אותו ידנית כדי לשלוט בהמרה (סקאלה, ממוצע/סטיית תקן, 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) שטנזורי קלט מסוג נקודה צפה מצפים לו לאחר הנרמול (למשל (0.0, 1.0) או (-1.0, 1.0)). מתעלם ממנו עבור טנזורי קלט מסוג uint8 ו-int8.

mean הוא הממוצע לכל ערוץ (R, G, B) המוחסר מהתמונה לאחר ההכפלה בסקאלה. עבור טנזורים בגווני אפור, הממוצע מצומצם לערך לומה יחיד באמצעות 0.299*R + 0.587*G + 0.114*B. מתעלם ממנו עבור טנזורי קלט מסוג uint8 ו-int8.

stdev הוא סטיית התקן לכל ערוץ (R, G, B) שבה מחולקת התמונה לאחר חיסור הממוצע. עבור טנזורים בגווני אפור, סטיית התקן מצומצמת לערך לומה יחיד באמצעות 0.299*R + 0.587*G + 0.114*B. מתעלם ממנו עבור טנזורי קלט מסוג uint8 ו-int8.

roi הוא אזור עניין אופציונלי (x, y, w, h) בתוך תמונת הקלט שיש לחתוך. אם None, נעשה שימוש בתמונה המלאה. האזור החתוך ממורכז, מוגדל בהגדלה דו-ליניארית (תוך שמירה על יחס הממדים בעזרת ריפוד שחור) לממדי טנזור הקלט של המודל.

__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 במקום בטנזור הקלט המנורמל עבור התמונה שקושרה קודם לכן. shape חייב להיות (1, H, W, C) כאשר C שווה ל-1 (גווני אפור) או 3 (RGB). dtype הוא קוד הטיפוס של ulab numpy (למשל ord('f') עבור float32, ord('b') עבור int8, ord('B') עבור uint8). טנזורי נקודה צפה מיישמים את scale, mean ו-stdev; טנזורי מספרים שלמים נכתבים ישירות (עם היסט עבור int8).