IoU (חפיפת-איחוד)

יסודות בינה מלאכותית

הגדרה

IoU (חפיפת-איחוד) הוא מדד-חפיפה גיאומטרי שבודק כמה תיבת-תיחום שניבא מודל חופפת לתיבה האמיתית — שטח-החיתוך בין השתיים חלקי שטח-האיחוד שלהן — והבסיס שעליו מחושב mAP.

ההגדרה: שטח-חיתוך חלקי שטח-איחוד

IoU מודד עד כמה שני אזורים — בדרך-כלל תיבת-תיחום שניבא מודל ותיבת-התיחום האמיתית שסומנה בידי אדם — חופפים זה לזה. הנוסחה: שטח-החיתוך בין שתי התיבות (Intersection) חלקי שטח-האיחוד שלהן (Union), כפי שמנוסח באתר-Roboflow — האזור המשותף לשתיהן, מחולק בכל האזור שמכוסה על-ידי לפחות אחת מהן. הערך נע תמיד בין 0 (אין שום חפיפה) ל-1 (חפיפה מלאה ומדויקת). בתיבות-תיחום מלבניות ומיושרות-לצירים, כפי שרוב מודלי-זיהוי-העצמים מפיקים כפלט, שטח-האיחוד מחושב מסכום שטחי שתי התיבות הנפרדות בניכוי שטח-החיתוך המשותף להן — כדי לא לספור את האזור החופף פעמיים בטעות.

מקור המושג: מדד יעקבי מ-1901

IoU הוא בעצם שם-שני למדד-יעקבי (Jaccard Index) — מדד-דמיון בין קבוצות שפרסם הבוטנאי השווייצרי פול יעקבי כבר ב-1901, במחקר על התפלגות-צמחייה באלפים וביורה, זמן רב לפני שהיה מחשב או ראייה-ממוחשבת. יעקבי עצמו קרא למדד בשם צרפתי — coefficient de communauté ('מקדם-קהילתיות') — ורק מאוחר יותר הוא התקבע בספרות המדעית באנגלית תחת שמו. אותה נוסחה בדיוק — חיתוך חלקי איחוד — משמשת גם מחוץ לתחום-התמונות: ברפואה להשוואת בדיקות-מעבדה, ובסגמנטציה רפואית תלת-ממדית להערכת חפיפה בין איבר שסומן אוטומטית לאיבר שסומן בידי רופא.

איך קובעים 'התאמה נכונה' באמצעות סף-IoU

בזיהוי-עצמים, IoU בפני עצמו הוא מספר רציף, אבל צריך גם החלטה בינארית: האם תחזית מסוימת 'פגעה' בעצם האמיתי או לא. לשם כך קובעים סף-IoU — למשל 0.5, כפי שמצוין באתר-Roboflow: אם ה-IoU בין תיבת-התחזית לתיבה האמיתית גדול-שווה לסף, התחזית נחשבת 'חיובי-אמיתי' (True Positive); אם קטן ממנו, היא נחשבת 'חיובי-כוזב' (False Positive), גם אם המודל 'קלע' לעצם הנכון אך מיקם את התיבה ברישול. ככל שהסף הנבחר גבוה יותר, כך קשה יותר למודל 'לעבור' אותו — סף של 0.9, למשל, דורש כמעט חפיפה מושלמת, ולא רק זיהוי כללי-של-האזור.

IoU כבסיס שממנו נבנה mAP

כל חישוב-mAP תלוי בהחלטת-IoU הזו: הסף שנבחר קובע אילו תחזיות נספרות כנכונות לפני שמחשבים בכלל Precision ו-Recall למחלקה. PASCAL VOC משתמש בסף-IoU בודד (0.5); COCO מחמיר ומחשב mAP כממוצע על-פני 10 ספי-IoU שונים בין 0.5 ל-0.95, כדי לתגמל מודלים שממקמים תיבות בדיוק ולא רק 'באזור הנכון'. בלי IoU, אין דרך אובייקטיבית להחליט מתי תחזית-מיקום 'מספיק טובה' — וכל מדד-סיכום שנבנה מעליו, לא רק mAP, יורש את אותה תלות בבחירת-הסף.

מגבלה ידועה: מישור-שטוח כשאין חפיפה כלל

מאמר ה-Generalized IoU, שהציגו רזתופיגי ועמיתיו ב-2019 בכנס CVPR, מצביע על כך ש-IoU הוא 'מדד-ההערכה הפופולרי ביותר' בבנצ'מרקים לזיהוי-עצמים, אך יש לו חולשה מובנית: כשאין שום חפיפה בין שתי תיבות, ה-IoU הוא תמיד 0 בדיוק — בלי הבדל בין תיבה שרחוקה קצת לתיבה שרחוקה מאוד. המחברים מכנים זאת 'מישור' (plateau) שהופך את IoU לבלתי-שמיש כפונקציית-איבוד לאימון ישיר, ומציעים הכללה (GIoU) שפותרת את הבעיה הזו תוך שמירה על ההגדרה הבסיסית ועל תחום-הערכים המוכר.

שימוש בפועל: מעבר לתיבות-תיחום

מעבר לתפקידו בזיהוי-עצמים, IoU משמש גם במשימת סגמנטציה סמנטית — שם משווים לא תיבות מלבניות אלא מסכות-פיקסלים מדויקות, וה-IoU (המכונה שם לעיתים 'mask IoU') מודד באיזו מידה מסכת-התחזית של המודל חופפת למסכת-האמת. ספריות כמו torchvision ו-pycocotools מממשות את החישוב הגיאומטרי באופן אוטומטי מתוך קואורדינטות-התיבות או הפיקסלים, כך שהוא משמש כרכיב-תשתית בכל צנרת-הערכה בתחום הראייה הממוחשבת — הן בזמן ההערכה הסופית של מודל מאומן, והן בזמן-אמת בתוך תהליך-האימון עצמו, כשמחליטים אילו תיבות-מועמד לספור כדוגמה חיובית.

שאלות נפוצות ❓

מה ההבדל בין IoU ל-mAP?

IoU הוא מדד גיאומטרי-נקודתי: כמה תיבה אחת חופפת לתיבה אחת. mAP הוא מדד-סיכום ברמת המודל כולו, שמשתמש בסף-IoU כדי להחליט אילו תחזיות סופרים כנכונות לפני שמחשבים Precision, Recall וממוצע על-פני כל מחלקות-העצמים.

איזה ערך-IoU נחשב 'התאמה טובה'?

אין סף אוניברסלי — זו החלטה של הבנצ'מרק. PASCAL VOC משתמש בסף בודד של 0.5; COCO מחשב תוצאות על-פני 10 ספים שונים בין 0.5 ל-0.95, ומחמיר ככל שהסף עולה.

האם IoU משמש רק לתיבות-תיחום מלבניות?

לא. אותה נוסחה — חיתוך חלקי איחוד — משמשת גם בסגמנטציה, להשוואת מסכות-פיקסלים (mask IoU), וכן ברפואה ובתחומים אחרים כמדד-דמיון בין קבוצות, תחת השם המקורי 'מדד-יעקבי'.

למה IoU בעייתי כפונקציית-איבוד לאימון ישיר?

כי כשאין חפיפה כלל בין תיבת-התחזית לתיבה האמיתית, הערך תמיד 0 — בלי קשר לכמה רחוקות התיבות זו מזו — מה שלא נותן למודל שום 'רמז-כיוון' לאן לזוז. הבעיה הזו הובילה לפיתוח הכללות כמו GIoU.