פילוח תמונות: פיתוח מערכות לפילוח סמנטי, מופעים ופנורמי

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

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

מדוע סגמנטציית תמונות נשברת על נתונים אמיתיים

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

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

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

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

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

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

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

אפקט מדיד: דיוק, מהירות קו ייצור, בדיקה ידנית

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

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

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

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

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

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

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

מצבי סגמנטציית תמונות: לפי פיקסל, לפי אובייקט, פנורמי

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

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

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

שלבי הטמעה: מביקורת נתונים ועד מסירת המודל

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

  1. ביקורת מערך הנתונים. בודקים מה כבר צולם וסומן: כיסוי תרחישים, כפילויות, פריימים בלי אובייקטים, חוסר איזון בין מחלקות. בפלט — דוח עם החלטה אילו סצנות להשלים צילום ואיזה סימון לעשות מחדש.
  2. סכימת מחלקות וחוקי סימון. מקבעים היררכיית מחלקות, מה נחשב אובייקט נפרד, כיצד לסמן חפיפות וגבולות. את החוקים רושמים בטקסט: בלעדיהם מסמנים שונים ייתנו מסכות שונות באותו פריים.
  3. הרכבת לולאת אימון. אימון עם הרחבת המערך לתנאי צילום אמיתיים — תאורה, זווית, חפיפות חלקיות. נתונים ומשקולות מגרסאים, כדי שאפשר יהיה להשוות כל איטרציה לקודמת.
  4. בדיקה על מדגם מוחזק. מחשבים מדדים לכל מחלקה בנפרד, ולא ממוצע למודל: מחלקה נדירה לא אמורה להיעלם בתוך הדיוק הכולל.
  5. בדיקה על מנות אמיתיות. מריצים את הפתרון על פריימים ממצלמות עבודה שהמודל לא ראה, מפרקים שגיאות ומוסיפים מקרים קשים חזרה לאימון.
  6. מסירת הפתרון. מוסרים משקולות, קונפיגורציית סכימת מחלקות, הוראות לאימון נוסף ומדדים על מערך בקרה — הצוות ממשיך להפעיל את המודל בעצמו.

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

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

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

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

מקרה בוחן: פסילת מוצרים בקו — מדדים לפני ואחרי הטמעה

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

מה שינינו

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

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

מדדים לפני ואחרי

  • הפחתת החמצות: כ-8% מהפגמים הגיעו לצרכן בדגימה ידנית — פחות מ-1% במדגם תמונות מוחזק.
  • התראות שווא: 4% → 1.5% לאחר כיול הסף והחלפת התאורה בתאורה מפוזרת.
  • כיסוי: במקום תמונה אחת מעשרים נבדק 100% מהזרם, ומהירות הקו לא יורדת.
  • הסבה לפורמט אריזה חדש: אימון נוסף על כמה מאות תמונות מסומנות במקום לשכתב את חוקי הבקרה.

במה שונה סימון סמנטי מהפרדת אובייקטים?

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

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

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

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

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

אפשרות משולבת שומרת את שתי השכבות במערך אחד, למשל בפורמט COCO: הרקע הולך כסמנטי, האובייקטים — כמסכות עם מזהים.

ספקות טכניים: מגבלות, תמיכה, אימון נוסף

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

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

מחלקה נדירה — יחידות בודדות לכל המערך. האם המודל בכלל יראה אותה?

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

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

סימון כבר קיים, אבל הסכימה אחרת

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

אימון נוסף יצטרך להיעשות בכוחות עצמכם — מה דרוש לשם כך

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

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

נדון במשימה: מה לשלוח להערכה מדויקת

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

  • הצגת המשימה — מה צריך להיות בפלט: מסכה אחת למחלקה, אובייקטים נפרדים או סימון סצנה שלמה, וכיצד התוצאה משמשת בהמשך.
  • נתוני קלט — 20–50 תמונות בצורתן המקורית, כולל הקשות ביותר: תאורה חלשה, חפיפות, רעש, מחלקות נדירות.
  • סימון — האם הוא קיים, באיזה פורמט (מסכות PNG, פוליגונים, מערך מוכן), מי סימן ועד כמה אובייקטים שנויים במחלוקת מתואמים.
  • סכימת מחלקות — רשימת מחלקות, ההיררכיה שלהן וחוקים למקרים לא חד-משמעיים: חפיפה, נראות חלקית, אובייקטים בגבול הפריים.
  • דרישות איכות — מדד מקובל (IoU, Dice) ומחלקות שבהן חשוב דיוק גבולות, ולעומת זאת כאלה שמספיק להן קו מתאר גס.
  • תנאי הרצה — היכן המודל מחושב: שרת, מצלמה, מכשיר נייד; כמה פריימים ביום ואיזה זמן עיבוד מותר.
  • תהליך נוכחי — במה המשימה נפתרת כעת ובאיזה היקף השלב הידני מפסיק להספיק.

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