ml.utils — כלי עזר ל-ML¶
המודול ml.utils מכיל מחלקות עזר ופונקציות עבור למידת מכונה.
פונקציות¶
- ml.utils.threshold(scores: ndarray, threshold: float, scale: float, find_max: bool = False, find_max_axis: int = 1) ndarray¶
מבצעת ספירה (threshold) על
scores(ndarrayמקוונטז מסוג int8, uint8, int16 או uint16) לפיthresholdמקוונטז ומחזירהndarrayשל כל האינדקסים שעוברים את הסף.scaleנבדק כדי לקבוע אם הערכים המפוענחים חיוביים או שליליים. כאשרscale > 0מוחזרים האינדקסים שבהםscores > threshold; אחרת מוחזרים האינדקסים שבהםscores < threshold.find_maxאם True, מחליף אתscoresבאופן פנימי ב-ndarrayשל המקסימום (או המינימום, בהתאם ל-scale) לאורךfind_max_axis.find_max_axisהוא הציר שלאורכו מחושב צמצום המקסימום/מינימום כאשרfind_maxהוא True.
- ml.utils.quantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
ממירה את ה-
ndarrayשהועבר באמצעות חלוקה ב-scale והוספת ה-zero point של המודל. מחזירה אתvalueללא שינוי כאשר ה-dtype של פלט המודל ב-indexהוא float.modelהוא המודל שפרמטרי הקוונטיזציה של הפלט שלו משמשים.valueהוא ה-ndarrayלקוונטיזציה.indexבוחר מול איזה פלט טנזור של ה-modelלבצע קוונטיזציה.
- ml.utils.dequantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
ממירה את ה-
ndarrayשהועבר באמצעות חיסור ה-zero point ולאחר מכן הכפלה ב-scale של המודל. מחזירה אתvalueללא שינוי כאשר ה-dtype של פלט המודל ב-indexהוא float.modelהוא המודל שפרמטרי הקוונטיזציה של הפלט שלו משמשים.valueהוא ה-ndarrayלפענוח קוונטיזציה.indexבוחר מול איזה פלט טנזור של ה-modelלבצע פענוח קוונטיזציה.
- ml.utils.draw_predictions(image: image.Image, boxes: list[tuple[float, float, float, float]], labels: list[str], colors: list[tuple[int, int, int]], scores: list[float] | None = None, format: str = 'pascal_voc', font_width: int = 8, font_height: int = 10, text_color: tuple[int, int, int] = (255, 255, 255)) None¶
מציירת תיבות תוחמות (או סמני נקודת מרכז) עם תוויות טקסט על גבי
image.boxesהיא רשימה של tuples מסוג(x, y, w, h).labelsהיא רשימה של מחרוזות תווית, אחת לכל תיבה.colorsהיא רשימה של tuples מסוג(r, g, b), אחד לכל תיבה.scoresאם אינוNone, רשימה של ציוני ביטחון לכל תיבה. כאשר היא מסופקת, לכל תווית מרונדרת מתווסף הציון בסיומת בפורמט" %.2f".formatשולט באופן שבו מפורשות קואורדינטות התיבה:"pascal_voc"–(xmin, ymin, xmax, ymax)מנורמלים בטווח0.0עד1.0."point"– פיקסל מוחלט(x, y, w, h); סמן עיגול מלא מצויר במרכז התיבה במקום מלבן (שימושי עבור גלאי נקודת מרכז).כל ערך אחר – פיקסל מוחלט
(x, y, w, h); מצויר כמלבן.
font_widthהוא הרוחב בפיקסלים של כל תו בתווית.font_heightהוא הגובה בפיקסלים של רקע התווית.text_colorהוא הצבע(r, g, b)המשמש לטקסט התווית.
- ml.utils.draw_keypoints(image: image.Image, keypoints: ndarray, radius: int = 4, color: tuple[int, int, int] = (255, 0, 0), thickness: int = 1, fill: bool = False) None¶
מציירת
ndarrayשל ערכי keypoint(x, y, ...)על גביimage.radiusהוא רדיוס עיגול ה-keypoint. כאשרradius == 0ה-keypoints מצוירים כפיקסלים בודדים.colorהוא צבע ה-keypoint(r, g, b).thicknessהוא עובי קו המתאר של העיגול.fillאם True ממלא את עיגולי ה-keypoint.
- ml.utils.draw_skeleton(image: image.Image, keypoints: ndarray, lines: list[tuple[int, int]], kp_radius: int = 4, kp_color: tuple[int, int, int] = (255, 0, 0), kp_thickness: int = 1, kp_fill: bool = False, line_color: tuple[int, int, int] = (0, 255, 0), line_thickness: int = 1) None¶
מציירת
ndarrayשל ערכי keypoint(x, y, ...)על גביimageולאחר מכן מחברת אותם בקטעי קו.linesהיא רשימה של tuples מסוג(kp0_idx, kp1_idx)המציינים אילו זוגות keypoint לחבר.kp_radiusהוא רדיוס עיגול ה-keypoint (מועבר אלdraw_keypoints).kp_colorהוא צבע ה-keypoint(r, g, b).kp_thicknessהוא עובי קו המתאר של עיגול ה-keypoint.kp_fillאם True ממלא את עיגולי ה-keypoint.line_colorהוא צבע הקו(r, g, b).line_thicknessהוא עובי הקו.
class NMS – דיכוי לא-מקסימלי רך (Soft-Non-Maximum Suppression)¶
אובייקט ה-NMS אוסף רשימה של תיבות תוחמות עם ציונים משויכים, מסנן תיבות חופפות בעלות ציונים נמוכים יותר באמצעות Soft-NMS, וממפה מחדש תיבות שזוהו בתת-חלון בחזרה לקואורדינטות התמונה המקורית.
- class ml.utils.NMS(window_w: int, window_h: int, roi: tuple[int, int, int, int])¶
יוצרת אובייקט
NMS.window_wו-window_hהם הרוחב והגובה של טנזור הקלט של המודל / החלון.roiהוא אזור העניין(x, y, w, h)של התמונה המקורית שעליו הורץ המודל (מוחזר בדרך כלל על ידי אובייקט ה-Normalization()). משמש למיפוי מחדש של תיבות שזוהו בחזרה למרחב הקואורדינטות של התמונה המקורית.roi[2]ו-roi[3]חייבים להיות >= 1.- add_bounding_box(xmin: float, ymin: float, xmax: float, ymax: float, score: float, label_index: int, keypoints: ndarray | None = None) None¶
מוסיפה תיבה תוחמת לאובייקט ה-
NMS. תיבות עםscoreמחוץ ל-[0.0, 1.0]או בעלות רוחב או גובה אפס/שלילי לאחר חיתוך מושמטות.xmin,ymin,xmax,ymaxהם קואורדינטות התיבה התוחמת במרחב הפיקסלים של החלון, מחותכות אל[0, window_w]/[0, window_h].scoreהוא ציון הביטחון של התיבה התוחמת (0.0-1.0).label_indexהוא האינדקס של תווית המחלקה המשויכת לתיבה התוחמת.keypointsהואndarrayאופציונלי של ערכי keypoint(x, y, ...)המשויכים לתיבה תוחמת זו.
- get_bounding_boxes(threshold: float = 0.1, sigma: float = 0.1) list[list[tuple]]¶
מבצעת Soft-NMS על כל התיבות שנוספו ומחזירה רשימה של רשימות לכל מחלקה, מאונדקסות לפי
label_index. כל רשימה פנימית מכילה tuples מסוג((x, y, w, h), score)הממופים בחזרה לקואורדינטות התמונה המקורית. אםkeypointsסופק בעת ההוספה, ה-tuple מורחב עם ה-ndarrayשל ה-keypointsהממופה מחדש.לאחר קריאה למתודה זו צרו אובייקט
NMSחדש כדי לעבד קבוצה חדשה של תיבות תוחמות.thresholdהוא הציון המינימלי שתיבה חייבת לשמר לאחר דיכוי Soft-NMS כדי להישמר.sigmaשולט בגאוסיאן המשמש להענשת הציונים של תיבות תוחמות חופפות.sigmaקטן יותר מביא לדיכוי אגרסיבי יותר.sigma <= 0.0משבית את ענישת הגאוסיאן (הציונים של תיבות חופפות אינם נחלשים).