גלאי כדורגל דירג ראש קירח ככדור ברמת סמך של 98%. שער פיזיקה הדוחה זיהויים בלתי אפשריים במורד הזרם של כל גלאי ראייה ממוחשבת.
ראייה ממוחשבתאנליטיקת ספורטמעקב אחר עצמים

מצלמה אוטומטית עקבה אחרי ראש קירח במשך משחק כדורגל שלם. בניתי את שער הפיזיקה שאומר לא.

Ashutosh SinghalAshutosh Singhal15 ביולי 202610 min

באוקטובר 2020, מצלמה אוטומטית במשחק של Inverness Caledonian Thistle בילתה חלק ניכר ממשחק כדורגל במעקב אחר ראשו הקירח של קוון במקום אחר הכדור. תחת אור הזרקורים הראש הבריק כמו כדור, מצלמת ה-Pixellot עקבה אחר הזיהוי בעל רמת הסמך הגבוהה ביותר שנמסר לה, והצופים בבית קיבלו תקריב (close-up) ממושך ומסור של אדם קירח שרץ לאורך קו החוץ בעוד המשחק מתרחש מחוץ לפריים (מתועד בדף הפתרון שלנו WP43).

הסיפור הזה ליווה אותי לאורך כל תהליך הפיתוח הזה, מכיוון שהוא התמונה הברורה ביותר שאני מכיר לכשל שכל מי שעוסק בראייה ממוחשבת חווה וכמעט איש אינו מגדיר נכון. הגלאי לא היה מקולקל. הוא עשה בדיוק מה שגלאי עושה. הוא נתן ציון למקבץ פיקסלים, הברק על הראש קיבל ציון גבוה, וכל מערכת במורד הזרם נתנה אמון בציון הזה. Plumbline, הדמו שבניתי, זמין בכתובת https://veriprajna.com/demos/physics-constrained-computer-vision, וכולו מבוסס על טיעון אחד: הפתרון אינו נמצא בתוך הגלאי.

הרגע שבו הפסקתי להאשים את המודל

את היום הראשון של הפרויקט הקדשתי בניסיון לדמיין גלאי טוב יותר, ולא הצלחתי להעלים את הבעיה. גלאי עצמים הוא בלתי תלוי בפריימים (frame-independent). הוא מדרג כל תמונה לפי מרקם וצורה, ללא כל זיכרון היכן עצם אמיתי היה לפני רגע או היכן הוא יכול להימצא פיזית ברגע הבא. לכן תחת תאורת אצטדיון, ראש קירח הוא כדור מצוין מבחינה מקומית. אפשר לאמן מודל חד יותר, ועדיין, בפריים שבו הברק מגיע לשיאו, הוא ימסור לך כדור ברמת סמך של 98% שיושב על ראשו של אדם. רמת הסמך אינה משקרת לגבי הפיקסלים. היא עונה על שאלה שאין לה שום קשר לשאלה האם כדור יכול בכלל להימצא שם.

זה היה הרגע שבו תפיסת הבעיה התהפכה עבורי.

למערכת הראייה שלך אין בעיה של רמת סמך. יש לה בעיית פיזיקה.

כדור אמיתי מציית לאילוצים שראש קירח אינו מציית להם, ואף אחד מהאילוצים הללו אינו מתקיים בתוך הציון של הגלאי. ההגדרה המחודשת הזו לבדה הכריעה את הארכיטקטורה כולה. הפסקתי לנסות להפוך את הגלאי לחכם יותר והתחלתי לבנות שכבה שיושבת אחריו ואוכפת את הפיזיקה שהגלאי מעולם לא ידע על קיומה.

כיצד נראה "בלתי אפשרי פיזית" בקוד

רציתי לראות זיהוי נדחה מסיבה שאוכל לקרוא בשפה פשוטה וברורה, ולכן זה מה שבניתי תחילה. Plumbline יושב במורד הזרם של כל גלאי ומריץ שלושה שערים דטרמיניסטיים על כל מועמד לפני שגורם כלשהו פועל על פיו. השער הקינמטי משתמש במסנן Kalman, מסנן Unscented Kalman Filter במסלול הסינתטי עם מודל תנועת קליע (projectile motion), כדי לחזות היכן כדור אמיתי יכול להימצא ברגע הבא, ואז מודד כמה רחוק כל מועמד נופל מאותו חיזוי כמרחק Mahalanobis: קבלה מתחת ל-3 סיגמא, דחייה מעל 5 סיגמא, וסימון הטווח של 3 עד 5 סיגמא לבדיקה. שער הזרימה האופטית (optical-flow) משווה את תנועת הפיקסלים המקומית של המועמד למהירות הצפויה של המסלול, ודוחה "כדור" שכיוון הזרימה שלו שגוי או שכמעט ואינו נע במהלך המשחק השוטף. השער הגאומטרי משתמש במודל מצלמת חריר (pinhole) כדי לבדוק על כמה פיקסלים כדור בקוטר 22 ס"מ יכול להשתרע בעומק המשתמע של המועמד, ופוסל גדלים שאינם יכולים להיות אמיתיים.

אף אחד מאלה אינו מודל. מדובר בקוד numpy ו-scipy פשוט שאפשר לקרוא שורה אחר שורה, היושב מחוץ לכל רשת, וזו בדיוק הסיבה שאני בוטח בהם. אמון כאן אינו תלוי בקופסה שחורה שמסבירה את עצמה בדיעבד.

הראש הקירח נכשל בכל שלושת השערים בו-זמנית. הזרקתי את המתחזה הזה בכוונה, כהתרחשות משוחזרת של תקרית Inverness מ-2020 ולא כשגיאה אורגנית מקרית, כי המקרה ששובר מצלמה הוא בדיוק זה שלעולם אינו מופיע בסט המבחן של הגלאי. בפריים הגרוע ביותר של הקליפ הסינתטי, הראש מקבל ציון של 82.3 סיגמא מחוץ לתנועה החזויה של הכדור, וזה אינו מקרה גבולי, אלא אבסורד קינמטי. הכדור האמיתי, שנמצא ברמת סמך של 0.87 ו-0.4 סיגמא, עובר בצורה נקייה והמצלמה נשארת עליו.

הזנת השערים של Plumbline דוחה ראש קירח ברמת סמך של 98% בעוד שהעוקב הנאיבי ננעל עליו
תרחיש הקוון הקירח. הגלאי מוסר לשני העוקבים "כדור" ברמת סמך גבוהה על ראשו של הקוון (עד 98%); החלונית השמאלית הנאיבית ננעלת עליו, בעוד שהזנת השערים של החלונית הימנית דוחה את המתחזה בכל שלושת השערים בו-זמנית (סטטי באמצע מהלך המשחק, אבסורדי קינמטית ב-82.3 סיגמא בפריים הגרוע ביותר, וגודל בלתי אפשרי בעומק) וממשיכה בתנועה על סמך החיזוי שלה.

כל דחייה משאירה נימוק מתועד בקובץ

לא רציתי שדבר מכל זה יהיה עניין של אמונה עיוורת, ולכן כל החלטה כותבת רשומה שניתן לפתוח. יומן ההחלטות המיוצא כולל בראשו את ה-seed, התרחיש, מזהה הגלאי וספי השערים, ולאחר מכן שורה אחת לכל פריים לכל מועמד: המחלקה ורמת הסמך שפלט הגלאי, הפסיקה המספרית של כל שער והנימוק הברור שלו ("Mahalanobis 82 sigma >= 5 sigma: kinematically impossible"), והפעולה הסופית. בתרחיש הקוון הקירח השערים דוחים את כל 18 זיהויי השווא של המתחזה בעלי רמת הסמך הגבוהה, ועוקב הפיזיקה מחזיק בכדור 97.7% מהזמן לעומת 59.1% בשיטת מעקב אחר הסמך הגבוה ביותר ו-20.5% בהעלאת סף הסמך (סצנה סינתטית, seed 7).

עבור כל מי שנושא באחריות משפטית או תפעולית להחלטה חזותית אוטומטית, התיעוד הזה הוא ההבדל בין דו"ח תקרית לבין משיכת כתפיים. הוא מתוכנן לשמש ראיה מתועדת וברת-הגשה לשאלה מדוע מצלמה פעלה כפי שפעלה — לא תעודת תאימות רגולטורית, אלא פשוט הנימוק הפיזיקלי, מתועד בתיק, לכל פריים.

יומן החלטות שערי הפיזיקה המיוצא עבור תרחיש bald_linesman
יומן ההחלטות המיוצא, תרחיש bald_linesman, seed 7. זמן מעקב על המטרה (time-on-target) של 98% לפיזיקה לעומת 59% ו-20% לשני קווי הבסיס, כאשר הפסיקה לכל שער והנימוק המילולי לכל פריים מפורטים למטה.

העלאת סף הסמך היא הכפתור הלא נכון

כשאני מראה למהנדסים את דחיית הראש הקירח, האינסטינקט הראשוני כמעט תמיד זהה: פשוט תעלו את סף הסמך (confidence threshold) עד שהכדור השגוי ייעלם. בניתי את הדמו כדי לענות על האינסטינקט הזה באמצעות מספרים, כי הוא מרגיש נכון אבל הוא שגוי. בסצנה הסינתטית הנקייה ללא שום מתחזה, העלאת הסף משליכה לפח 43.2% מהכדורים האמיתיים בעלי רמת סמך נמוכה, בעוד ששערי הפיזיקה שומרים על שיעור החמצה של 2.3% בלבד בסט הנקי — שזהו פריים בודד של השהיית רכישה ולא כדור שאבד. הסף מחליף תוצאה חיובית שגויה (false positive) אחת בערימה של תוצאות שליליות שגויות (false negatives).

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

בדיקת ההגינות בסצנה הנקייה, 2% החמצה לפיזיקה לעומת 43% לקו הבסיס של סף מוגבה
בדיקת ההגינות בסצנה הנקייה ללא מתחזים. הפיזיקה מחמיצה 2% מהפריימים (השהיית רכישה של פריים אחד) לעומת 43% לקו הבסיס של סף מוגבה, וההערות מציינות בבירור שמתחזה הראש הקירח הוא שחזור מוזרק של תקרית Inverness מ-2020, ולא שגיאה שהופיעה מעצמה.

ישנו היבט קטן יותר שנקשרתי אליו במהלך הבדיקות, מקרה ההסתרה (occlusion). שחקן חוצה מול הכדור למשך תריסר פריימים, כל מועמד נדחה, ובמקום להינעל על השחקן, עוקב הפיזיקה ממשיך בתנועה על סמך החיזוי שלו לאורך הפער ולוכד מחדש את הכדור ברגע שהוא מופיע שוב. לראות אותו שומר על מסלול ריק במקום לבלף מסלול שגוי היה הרגע הראשון שבו השכבה הרגישה פחות כמו מסנן ויותר כמו שיקול דעת.

המספר שכמעט לא הראיתי

כמעט וחתכתי החוצה את ההרצה על צילום וידאו אמיתי, וההחלטה להשאיר אותה היא זו שאני הכי גאה בה בכל הפרויקט הזה. כל מה שמתואר למעלה רץ על סצנה סינתטית עם ground truth ידוע, וזה מה שמאפשר בנצ'מרק נקי, אבל קל לפקפק בניצחון סינתטי. לכן לקחתי קטע שידור אמיתי, הרצתי עליו זיהויי YOLO11x אמיתיים פריים אחר פריים, הזרקתי את ראשו של הקוון ככדור שגוי מתוך זיהוי האדם בפועל, והרצתי את אותם שלושה שערים ללא שינוי. שתי פשרות כנות נדרשו בעקבות זאת: לקטע שידור יחיד שאינו מכויל אין עומק מטרי, ולכן השער הקינמטי פועל שם במישור התמונה כמסנן Kalman דו-ממדי (2-D Kalman filter) ולא במסנן במרחב העולם (world-space), וזיוף של מסנן תלת-ממדי היה בגדר שקר. והתוצאה ירדה. בקליפ האמיתי שערי הפיזיקה שומרים על הכדור ב-68.3% מהזמן, לעומת 43.8% במעקב אחר הסמך הגבוה ביותר ו-30.0% בהעלאת הסף.

התחבטתי עם ה-68.3% במשך זמן מה, כי 97.7% הוא המספר שמוכר ו-68.3% הוא המספר האמיתי בווידאו מאתגר. שמרתי את המספר הכן על לוח התוצאות, בתוך האפליקציה, במקום שבו כל אחד יכול לקרוא אותו. שכבת אימות שמפריזה בערך עצמה כבר נכשלה בתפקיד היחיד שהיא טוענת שהיא מבצעת. מה שמוכיח את הנקודה הוא הכיוון: אותו קוד שערים, ללא שינוי, מביס את שני קווי הבסיס הן בזיהויים אמיתיים והן בזיהויים מדומים, והוא אומר זאת בגלוי על גבולותיו שלו.

לוח התוצאות בצילום אמיתי, פיזיקה עם 68% על המטרה לעומת 44% לעוקב הנאיבי
חלונית "אודות הדמו הזה" בצילום אמיתי. בקטע השידור האמיתי עם זיהויי YOLO11x אמיתיים, שערי הפיזיקה שומרים על 68% מעקב על המטרה לעומת 44% בשיטת מעקב אחר הסמך הגבוה ביותר, נמוך יותר בכנות מהתקרה הסינתטית מכיוון שצילום אמיתי הוא קשה יותר ונמדד בהתאם.

למה זה באמת משמש כתשתית

לא יצאתי לבנות מוצר לכדורגל, ואני רוצה לדייק לגבי מה שהדמו הזה מייצג ומה שלא. זו אינה טענה שאנחנו עוקבים טוב יותר מכל מערכת מצלמות מסחרית, שכן הקושחה המאוחרת יותר של Pixellot כבר מטפלת במקרה המילולי של הראש הקירח, והגלאי אינו המוצר. המוצר הוא השכבה הדקה והניתנת לבדיקה שבין הגלאי לבין כל מה שפועל על סמך הפלט שלו. המדדים הללו מייצגים איכות מעקב, ולא שיעור שגיאות של גלאי, וזו הסיבה שהערך נשמר ללא קשר למידת השיפור של הגלאי הבסיסי.

השכבה הזו חשובה כיום אף יותר משהייתה כשהתחלתי. הראייה הממוחשבת הופכת לסוכנית (agentic), עם מערכות שלא רק מתייגות פריים אלא גם פועלות על פיו, ושאלת הממשל (governance) הפתוחה שמתחת לכולן היא כיצד מונעים מסוכן אוטונומי לפעול על סמך זיהוי בלתי אפשרי פיזית. SoccerNet עדיין מגדירה מעקב מרובה-עצמים (multi-object tracking) כ"רחוק מלהיות פתור", ללא שום שיטה מודעת-פיזיקה המשולבת עד כה בבנצ'מרקים שלה. הראש הקירח מעולם לא היה החלק המעניין בעיניי. החלק המעניין הוא שהאילוץ שלוכד אותו — שעצם אמיתי חייב לציית לחוקי הפיזיקה — תקף גם מול גלאי מושלם עתידי, מכיוון שכדור שמרחף בגובה קבוע ונע במהירות של שלושה מייל לשעה הוא שגוי בכל רמת סמך שהיא. אם ברצונכם לראות זיהוי נפסל ולקרוא את הסיבה המדויקת לפסילתו, הדמו זמין בכתובת https://veriprajna.com/demos/physics-constrained-computer-vision, ומריץ את הקליפ האמיתי ואת הסצנות הסינתטיות זו לצד זו.

ואם אתם מעדיפים לצפות בזה בעצמכם במקום להסתמך רק על מילותיי, הנה המערכת כולה רצה מקצה לקצה, הקליפ האמיתי והסצנות הסינתטיות זו לצד זו.

המצלמה עקבה אחרי ראש קירח כי איש מעולם לא אמר לה מה כדור מסוגל לעשות. כל מה שבניתי הוא פשוט אותה הוראה, כתובה במקום שבו תוכלו לבדוק אותה.

מחקר קשור

פורסם גם ב

בנו את ה-AI שלכם בביטחון.

שותפו עם צוות בעל ניסיון עמוק בבניית הדור הבא של AI ארגוני. אנו נסייע לכם לתכנן, לבנות ולהטמיע אסטרטגיית AI שתוכלו לסמוך עליה.

Veriprajna ייעוץ דיפ-טק מתמחה בבניית מערכות AI קריטיות לבטיחות עבור תחומי הבריאות, הפיננסים והרגולציה. הארכיטקטורות שלנו מאומתות מול פרוטוקולים מבוססים ומלוות בתיעוד ציות מקיף.