סגמנטציית תמונות באפליקציה לנייד: איפה זה נשבר
סגמנטציית תמונות באפליקציה לנייד כמעט אף פעם לא נשברת "בתיאוריה" — היא נשברת בתנאי צילום ספציפיים.
בתאורה חלשה החיישן מפיק פריים רועש, סף הצבע והבהירות מפסיק להפריד בין האובייקט לרקע, והמסכה של האובייקט בפריים נקרעת לאורך המתאר: המשתמש מקבל צללית חתוכה שמתוכה נופלים שרוול, צל או חלק מהתסרוקת. צרה נפרדת היא פרטים שקופים למחצה ודקים: זכוכית, פרווה של בעלי חיים, חישורי אופניים. מודל שאומן על דוגמאות סטודיו "נקיות" פשוט לא מבחין בגבולות כאלה.
נקודת כשל שנייה — השהיית עיבוד הפריים. אם המודל מחשב פריים יותר זמן ממה שהמשתמש מוכן לחכות, אפקט הסגמנטציה מאבד משמעות: האדם כבר כיוון את המצלמה לאובייקט אחר, ובמסך עדיין תלויה המסכה הקודמת.
גרוע יותר כשחישוב כבד מבוצע באותו תהליכון שבו מצוירת התצוגה המקדימה — הממשק מתחיל לרעוד, הכפתורים לא מגיבים, האפליקציה נראית שבורה, למרות שהקוד פורמלית עובד.
הכשל השלישי מתגלה במקום שבו הכי פחות מצפים לו: בשדה, במרתף, במטוס. מהנדסים לא פעם בונים סכימה ש"הפריים נשלח לשרת, ומשם חוזרת מסכה מוכנה", ואז העבודה של האפליקציה בלי רשת הופכת למסך תקוע עם אינדיקטור אינסופי.
המשתמש לא מבין מה קרה, סוגר את האפליקציה ולא חוזר — ובלוגים זה נראה כמו ניתוק תקשורת, לא כמו פגם במוצר.
והשכבה הרביעית — איכות סימון הגבולות. דווקא לפי שפת המסכה רואים עד כמה כל המסלול נבנה בקפידה: מהכנת דוגמאות האימון ועד החלקת המתאר בזמן הרינדור. גבול קרוע ומשונן, "הילה" סביב האובייקט ורעידות של המסכה מפריים לפריים מעצבנים יותר מהטעות עצמה בזיהוי. בהמשך נפרט איך סוגרים את זה: איפה לחשב את המודל, מה לעשות כשאין רשת ואיך לשמור על שפה יציבה.
מה נותנת סגמנטציה במכשיר ובענן
ההבדל בין חישוב בטלפון לבין חישוב בשרת נראה לא באיכות המסכה, אלא בכמה פריימים מגיעים לתשובה. חמישה אפקטים ניתנים למדידה בתעבורה אמיתית: שיעור הפריימים ללא רשת, זמן תגובת הממשק, התאמת התוצאה בדגמי טלפונים שונים, ירידה בכשלים של "אין תשובה מהשרת", ונפח הפריימים המועברים.
עיבוד במכשיר: מה עובר לאופליין
המודל מהודר לפורמט של הפלטפורמה — דרך Core ML ההסקה מתבצעת בטלפון עצמו, בלי פנייה לשרת. לאופליין עובר כל מה שלא דורש הקשר כבד: אדם, אובייקט, רקע, גבולות. אלה 80–90% מהפריימים בזרם: האפליקציה עובדת בלי רשת, והממשק מגיב בשברירי שנייה במקום בשניות המתנה.
תוצאה אחידה בדגמי טלפונים שונים מתקבלת מעיבוד מקדים קבוע: גודל קלט אחד, נרמול אחד, סף מסכה אחד. ההבדלים נשארים במהירות, לא בגאומטריה — את זה בודקים באמצעות השוואת שיעור הפיקסלים התואמים על מטריצת מכשירים.
היברידי: איפה לחשב ומה לאחסן
לענן עוברים פריימים גבוליים: אובייקטים קטנים, חפיפות חזקות, סצנות לא סטנדרטיות — שם המודל גדול יותר, והתוצאה מדויקת יותר. הסינון מקטין את נפח הפריימים המועברים פי כמה, וסוג הכשלים "אין תשובה מהשרת" נעלם: המסכה המקומית מוחזרת מיד, והמסכה המעודנת מחליפה אותה מאוחר יותר.
די לאחסן מסכות ומאפיינים, ולא את הפריימים עצמם — זה מסיר שאלות פרטיות ושומר על תור השליחה צפוי. פריימים שלא נשלחו ברשת ממתינים לה בתור מקומי ונשלחים שוב.
אפשרויות חישוב: במכשיר, בשרת, היברידי
מצב החישוב קובע איפה חי המודל וכמה משאבים הוא לוקח מהמשתמש. עיבוד פריימים מקומי מחושב ישירות בטלפון ולא שולח תמונה לרשת; עיבוד פריימים בשרת מוריד עומס מהמכשיר, אבל תולה את התוצאה בערוץ התקשורת; סכימה היברידית מחלקת את המשימה ביניהם. הבחירה משפיעה על השהיית התגובה, הפרטיות ועל איזה מלאי מכשירים האפליקציה בכלל תעלה.
| אפשרות | מתי מתאימה | מגבלות |
|---|---|---|
| עיבוד פריימים מקומי | המסכה נדרשת מיד, פריימים מגיעים בזרם, תמונות רגישות ואסור שיצאו מהמכשיר | דרישות גבוהות יותר מהמכשיר: המודל מחזיק זיכרון כל הזמן, מגבלות זיכרון וחימום פוסלות מלאי ישן, בסצנות מורכבות האיכות נמוכה מזו של השרת |
| עיבוד פריימים בשרת | נדרש דיוק מקסימלי, המודל כבד ומתעדכן לעיתים קרובות, הצילום מעובד בקבוצה ולא בזמן אמת | ההשהיה תלויה ברשת, העברת כל פריים — צריכת תעבורה, מערך אחסון נפרד והגנה על תמונות אישיות |
| סכימה היברידית | נדרש איזון: תוצאה גסה מהירה על המסך ועידון מדויק היכן שזה חשוב | מורכבת יותר לתחזוקה: שני מסלולי חישוב, התאמת פורמטי מסכה, בקרת אי-סנכרון בין גרסאות המודל בצד הלקוח לשרת |
מתי עיבוד מקומי מספיק
אם המשימה היא להפריד אובייקט מהרקע בזמן אמת, והסצנה אחידה, חישוב במכשיר מנצח: התגובה לא תלויה באיכות התקשורת, והפריימים לא עוזבים את הטלפון. אנחנו בודקים מראש את דרישות המכשיר במלאי היעד ובוחרים מודל קל כך שיעמוד במגבלות הזיכרון בלי ירידה בקצב הפריימים.
היברידי: עיבוד מקדים במכשיר, עידון בענן
בטלפון מבוצע מעבר מהיר — הוא נותן מסכה גסה ומסנן את המיותר, והעידון הכבד עובר לשרת לפי בקשה. כך מורידים את עיקר העומס מהמכשיר ומקטינים את נפח הנתונים המועברים, אבל נוצרת החובה לעקוב אחרי התאמת גרסאות המודל בשני הצדדים.
איך עובר המימוש: מביקורת נתונים ועד מסירה
את המימוש של סגמנטציה באפליקציה לנייד אנחנו בונים כך שכל שלב נשען על תוצאה מאומתת של השלב הקודם. קודם מגדירים אילו מחלקות אובייקטים צריך לזהות ובאילו תנאים המשתמש מצלם, — מזה תלויים גם הסימון וגם דרישות המודל.
- ביקורת פריימים וסימון. בודקים סצנות, תאורה, זוויות ואיזון מחלקות, ובנפרד מחפשים אי-התאמות בין מסכות לגבולות האמיתיים של האובייקטים: המודל משחזר שגיאות סימון ולא מתקן אותן.
- סכימת עיבוד. מחליטים איפה מתבצע החישוב — במכשיר, בשרת או היברידי, — איך הפריים מוכן לפני ההזנה ומה האפליקציה עושה עם המסכה המוכנה.
- הרכבה ואימון המודל. מאמנים מחדש בסיס מאומן מראש על פריימים מסומנים, מריצים בנפרד מחלקות נדירות וסצנות מורכבות, כדי שמתאר הזיהוי יעבוד לא רק על דוגמאות טיפוסיות.
- בדיקה במכשירים אמיתיים. בודקים לא רק את דיוק המסכה, אלא גם צריכת זיכרון, מהירות תגובה והתנהגות בתאורה חלשה — חלק מהפגמים נראים רק במכשיר חי.
- מדידת איכות. מחשבים מדדים על מדגם מופרד ועל הקלטות מהמכשירים, מנתחים פריימים שבהם המסכה נקרעת, ולפיהם מעדנים את הסימון ומאמנים מחדש.
- מסירה לצוות הלקוח. מוסרים את המודל, קוד עיבוד הפריים, הוראות לאימון מחדש על נתונים חדשים וסדר בדיקה לפני פרסום גרסה.
מה מבהירים לפני תחילת העבודה
לפני ההתחלה מבהירים שלושה דברים: איפה מתבצעת ההסקה, איזה נפח פריימים יש לאימון מחדש ואיך נראית הקבלה — על איזה מדגם ובאיזה מדד מחשבים איכות. התשובות קובעות את היקף העבודה והמועד.
מה נשאר בפרויקט: מודלים, סימון, נהלים
אחרי העלאה של הסגמנטציה לשימוש מבצעי, ללקוח עוברת לא רק האפליקציה, אלא סט ארטיפקטים שהתנהגות המודל בתמונות חדשות תלויה בהם. להלן מה בדיוק אנחנו משאירים בפרויקט ולמה בלי כל סעיף המערכת מאבדת שליטה.
- מודל והקונפיגורציה שלו — משקלות, מבנה, רזולוציית קלט, סף ביטחון ופרמטרי עיבוד לאחר של מסכות, ובנוסף סקריפט בנייה כדי שהתוצאה תשתחזר בסביבה שלכם.
- מערך נתונים עם סימון — פריימים ומסכות מקוריים, כללים לאזורים שנויים במחלוקת: קצוות שקופים למחצה, חפיפות, אובייקטים קטנים; יומן שינויים עם מחבר ותאריך.
- סכימת עיבוד פריימים — המסלול מהמצלמה ועד המסכה: התאמת גודל, נרמול, חישוב במכשיר או שליחה לשרת, החלקת גבולות בין פריימים.
- נוהל אימון מחדש — איזה מדד ואיזו ירידה שלו מפעילים אימון מחדש, באיזו תדירות בודקים על מדגם בקרה, מי מכין נתונים חדשים.
- הוראות לצוות — איך להרים סביבה, להריץ בדיקת איכות, להשוות גרסה לנוכחית ולחזור אחורה אם המדד ירד.
זכויות על נתונים ומודל
בנפרד מגדירים למי שייכים התמונות, הסימון והמשקלות המאומנים, אילו מודלים פתוחים ובאילו רישיונות שימשו. אם בפריימים יש אנשים או מסמכים, מתארים אנונימיזציה, תקופות אחסון ונוהל מחיקה לפי בקשה — כך מסירת הפרויקט לא יוצרת סיכונים משפטיים.
קייס: מסכות אובייקטים באפליקציה לצילום במחסן
הלקוח — רשת מרכזי הפצה СкладЛайн, המשימה — מלאי טובין לפי צילומים מהמצלמה. הפרויקט התחיל בארבעה אתרים: מפעיל כיוון את המצלמה למשטח, האפליקציה סימנה מסכה של כל קופסה, והתוצאה עברה למערכת המלאי. הגרסה הראשונה חישבה הכול בשרת — הפריים נדחס, נכנס לתור וחזר עם מסכה מוכנה.
באזורים עם אות לא יציב זה הפך לצילומים תקועים ולתיקוני משמרת: מדידות לפני המימוש נתנו 74% מסכות תקינות, כ-0.9 שניות לעיבוד פריים ועד חמש פניות לשרת לצילום אחד.
מה שינו בסכימת העיבוד
את העבודה העיקרית העברנו למכשיר: מודל קל מחשב מסכה ישירות בטלפון, ולשרת פריים עובר רק כשהביטחון נמוך מהסף — בערך כל צילום עשרים. פריימים נשמרים באחסון מקומי ונשלחים מעצמם כשהתקשורת חוזרת, כך שניתוק רשת כבר לא קורע את הצילום.
בשרת נשארו חישוב מחדש של פריימים מורכבים וצבירת סימון לאימון מחדש של המודל על נתונים של המחסן הספציפי.
אחרי המעבר שיעור המסכות התקינות עלה ל-96%, זמן עיבוד הפריים הצטמצם ל-0.2 שניות, ומספר הפניות לשרת — לאחת לעשרה צילומים. עומס השיא על חלק השרת ירד כמעט פי שלושה: אותן יכולות מחזיקות פי שלושה יותר צילומים במקביל, ותלונות על תקיעות בעת אובדן תקשורת נעלמו מדוחות התמיכה.
במה שונה סגמנטציה סמנטית מזיהוי אובייקטים במסגרות?
גלאי עונה על השאלה "איפה האובייקט": בפלט — מלבן ומחלקה. סגמנטציה סמנטית מסמנת כל פיקסל בפריים, ולכן התוצאה — מסכה ברמת פיקסל שחוזרת על המתאר. לצללית של אדם המסגרת תתפוס גם רקע וגם ידיים, ואילו המסכה תעבור בדיוק על הגבול. מכאן דרישות שונות לסימון, לגודל המודל ולחישובים במכשיר.
מסגרת מספיקה כשהתוצאה היא מונים, מעקב תנועה, אזורי עניין או אנליטיקה גסה: הסימון נאסף פי כמה מהר יותר, המודל קל יותר ועובד יציב יותר בטלפון. מסכה נדרשת שם שהמתאר הוא התוצאה עצמה: החלפת רקע, מדידה וירטואלית, הטלת גרפיקה, חיתוך אובייקט.
הסתעפות נפרדת — אובייקטים מאותו סוג. סגמנטציה סמנטית תמזג שתי מכונות למחלקה אחת; אם צריך גם לספור וגם להקיף — זו הצבה שלישית, עם מסכה נפרדת לכל אובייקט. הבחירה נגזרת מהשאלה "מה בדיוק נחזיר לאפליקציה", ולא מיופי התמונה.
אם באפליקציה כבר עובד זיהוי במסגרות, אין צורך לכתוב אותו מחדש. מאמנים מחדש את המודל הקיים: הגלאי נשאר, אליו מתווספת ענף לחיזוי מסכה, והאימון מתבצע על מערך קטן עם סימון מדויק של מתארים.
החוזה החיצוני באפליקציה לא משתנה — הממשק מקבל את אותה תוצאה ועוד מסכה, וכל עוד המסכה לא בטוחה, מחזירים מסגרת: המשתמש לא רואה כשל.
איכות המסכה בודקים במדדי חפיפה עם תקן — על מערכים ציבוריים עם סימון כפול, למשל COCO, ועל פריימים שלנו ממצלמות משתמשים. ניתוח המקרים הגרועים מתבצע לפני הפעלת המצב בכל המכשירים.
ספקות טכניים: דיוק, מכשירים, נתונים
סגמנטציה נשברת לא על אובייקטים גדולים, אלא על מבנים דקים. את המדד מגדירים לפני ההתחלה: שיעור חפיפת המסכות ושיעור הפיקסלים הנכונים לכל מחלקה, קבלה — על מדגם מורכב, לא על פריימי סטודיו.
האם הדיוק יספיק בפריימים מורכבים?
גבולות דקים — שיער, החזרי אור, אובייקטים שקופים למחצה — דורשים קלט ברזולוציה גבוהה ועיבוד לאחר של המתאר. מאמנים מחדש על צילומים מהמכשירים המיועדים ובאותם תנאי תאורה.
מה לעשות עם טלפונים חלשים יותר?
ענף מודל מוקל: קלט קטן יותר, דחיסת משקלות, חלק מהפעולות על מתאר מפושט. המסכה מחושבת ברזולוציה מונמכת ומעודנת בקצוות — הממשק נשאר מגיב.
למי שייכים הנתונים והמודל?
הסימון, המשקלות וקונפיגורציית האימון מועברים ללקוח. אם התמונות לא אמורות לצאת מההיקף, האימון מתבצע בתשתית שלו, ואנחנו עובדים עם מדדים אנונימיים.
מה עושים עם מחלקות נדירות?
מאזנים את המדגם ומוסיפים אובייקטים מהמחלקה הנדירה לפריימים באופן סינתטי, סף הביטחון עבורה מגדירים בנפרד. המחלקה לא מוצגת בממשק עד שלא נצבר מדד על מדגם מופרד.
האיכות יורדת אחרי עדכון מלאי המכשירים?
מנהלים סט רגרסיה של פריימי תקן ומריצים אותו בכל בנייה של המודל. ירידה נראית לפני הריליס: מחזירים משקלות אחורה, ואת הפער בין דגמי מכשירים מנתחים לפי דוח.
נדבר על המשימה: מה לשלוח להערכה
כדי לחזור עם הערכה ותוכנית עבודה, לא צריך כרך של אפיון טכני — מספיקים חמישה נתוני פתיחה. לפיהם אנחנו מבינים את ההיקף, את סדר השלבים ואת המקומות שבהם הפרויקט עלול לסטות מהתוכנית.
- דוגמאות פריימים — 10–20 צילומים אמיתיים או סרטונים קצרים ממכשירי עבודה. חשובים לא רק המוצלחים: אור נגדי, רקע מטושטש, אובייקטים מאותו סוג זה לצד זה, צילום מזווית — דווקא בהם המסכה נקרעת לרוב.
- תרחישי צילום — מאיפה מגיע הפריים: גלריה, מצלמה בתוך האפליקציה, זרם מהמצלמה הקדמית, עבודה בלי רשת. מזה תלוי איפה לחשב את המסכה ובאיזו תדירות.
- מגבלות מכשירים — גרסת מערכת מינימלית נתמכת, שיעור הדגמים החלשים בקהל, זמן עיבוד פריים מותר ומרווח זיכרון.
- דרישות פרטיות — האם הפריים מעובד במכשיר או עובר לשרת, מה נשמר בלוגים, האם נדרשת אנונימיזציה של פנים ומספרים.
- מחלקות אובייקטים ודיוק — מה בדיוק מזהים, איזה שיעור שגיאות נחשב סביר ואיך האפליקציה מתנהגת בתוצאה לא בטוחה.
- לוחות זמנים ואבני דרך — לאיזה תאריך נדרש אב טיפוס עובד, מה נכנס עדיפות ראשונה, מה אפשר להעביר לשנייה.
אחרי זה נחזור עם הערכה ותוכנית עבודה: שלבים, סדר בדיקות ונקודות שבהן אתם מאשרים את התוצאה. אם חלק מהנתונים עוד לא נאסף — תארו את המשימה במילים, נעזור לנסח דרישות בשיחה.







