פיתוח מערכת לזיהוי אובייקטים בתמונות (Object Detection)

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

תחומי פיתוח AI

שאלות נפוצות

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

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

מדוע זיהוי אובייקטים עם YOLOv8 נשבר בפרודקשן

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

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

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

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

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

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

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

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

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

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

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

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

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

מצבי עבודה של הדטקטור: אצווה, זרימה, על ההתקן

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

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

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

זיהוי על ההתקן פותר עבודה ללא רשת: האירועים נכתבים מקומית ונשלחים לשרת עם הופעת הערוץ — אובדן פריימים בעת ניתוק התקשורת אינו מתרחש.

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

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

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

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

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

חבילת האספקה: תצורות, תרשיםים, תקנונים

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

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

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

מקרה בוחן: צמצמנו פספוסי אובייקטים ואת זמן סקירת הארכיון

איך זה היה

המפעיל עבר ידנית על ארכיון המשמרת וסימן את האירועים הנדרשים ביומן. בזרם צפוף הדבר הניב 18–22% פספוסים, ובאובייקטים קטנים ובעלי חפיפה חלקית שיעור הטעויות עלה: העין מתעייפת, ההקשר בין הפריימים הולך לאיבוד. סקירה מלאה של משמרת נמשכה 6–8 שעות — ההקלטה התיישנה לפני שהספיקו לצפות בה.

מה שינינו

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

מה היה לתוצאה

שיעור הפספוסים ירד ל-3–4%, ההתראות השווא הצטמצמו בערך פי שלושה, והמפעיל בודק חלונות נבחרים במקום את כל המערך. סקירת המשמרת אורכת 40–50 דקות במקום 6–8 שעות.

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

במה YOLOv8 נבדלת ממשפחות דטקטורים אחרות

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

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

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

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

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

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

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

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

כמה פריימים צריך לסמן והאם אפשר להעביר סימון קיים?

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

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

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

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

האם אפשר לפרוס את המערכת במתחם סגור?

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

מה קורה עם אימון מחדש על נתונים עצמאיים אחרי ההשקה?

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

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

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

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

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