|
|
||
|---|---|---|
| .. | ||
| lab | ||
| ObjectDetection.ipynb | ||
| README.md | ||
README.md
זיהוי אובייקטים
המודלים של סיווג תמונות שעסקנו בהם עד כה לקחו תמונה והפיקו תוצאה קטגורית, כמו הקטגוריה 'מספר' בבעיה של MNIST. עם זאת, במקרים רבים אנחנו לא רוצים רק לדעת שתמונה מציגה אובייקטים - אנחנו רוצים להיות מסוגלים לקבוע את המיקום המדויק שלהם. זה בדיוק הנקודה של זיהוי אובייקטים.
שאלון לפני השיעור
תמונה מתוך אתר YOLO v2
גישה נאיבית לזיהוי אובייקטים
נניח שרצינו למצוא חתול בתמונה, גישה נאיבית מאוד לזיהוי אובייקטים תהיה כדלקמן:
- לחלק את התמונה למספר אריחים.
- להריץ סיווג תמונה על כל אריח.
- אריחים שמפיקים הפעלה גבוהה מספיק יכולים להיחשב ככאלה שמכילים את האובייקט המדובר.
תמונה מתוך מחברת התרגילים
עם זאת, גישה זו רחוקה מלהיות אידיאלית, מכיוון שהיא מאפשרת לאלגוריתם לאתר את תיבת הגבול של האובייקט בצורה מאוד לא מדויקת. כדי למקם בצורה מדויקת יותר, עלינו להריץ סוג של רגרסיה כדי לחזות את הקואורדינטות של תיבות הגבול - ולשם כך אנו זקוקים למערכי נתונים ספציפיים.
רגרסיה לזיהוי אובייקטים
פוסט הבלוג הזה מציע מבוא עדין ומעולה לזיהוי צורות.
מערכי נתונים לזיהוי אובייקטים
ייתכן שתיתקלו במערכי הנתונים הבאים למשימה זו:
- PASCAL VOC - 20 קטגוריות
- COCO - אובייקטים נפוצים בהקשר. 80 קטגוריות, תיבות גבול ומסכות סגמנטציה
מדדים לזיהוי אובייקטים
חיתוך על איחוד (Intersection over Union)
בעוד שבסיווג תמונות קל למדוד עד כמה האלגוריתם מצליח, בזיהוי אובייקטים עלינו למדוד גם את נכונות הקטגוריה וגם את דיוק מיקום תיבת הגבול שחוזה האלגוריתם. עבור האחרון, אנו משתמשים במדד שנקרא חיתוך על איחוד (IoU), שמודד עד כמה שתי תיבות (או שני אזורים שרירותיים) חופפים.
איור 2 מתוך פוסט בלוג מצוין על IoU
הרעיון פשוט - אנו מחלקים את שטח החיתוך בין שתי הצורות בשטח האיחוד שלהן. עבור שני אזורים זהים, IoU יהיה 1, בעוד שעבור אזורים שאינם חופפים כלל הוא יהיה 0. אחרת הוא ינוע בין 0 ל-1. בדרך כלל אנו מתחשבים רק בתיבות גבול עבורן IoU מעל ערך מסוים.
דיוק ממוצע (Average Precision)
נניח שאנחנו רוצים למדוד עד כמה קטגוריה מסוימת של אובייקטים C מזוהה היטב. כדי למדוד זאת, אנו משתמשים במדד דיוק ממוצע, שמחושב כך:
- עקומת דיוק-שליפה (Precision-Recall) מציגה את הדיוק בהתאם לערך סף זיהוי (מ-0 עד 1).
- בהתאם לסף, נקבל יותר או פחות אובייקטים מזוהים בתמונה, וערכים שונים של דיוק ושליפה.
- העקומה תיראה כך:
תמונה מתוך NeuroWorkshop
הדיוק הממוצע עבור קטגוריה נתונה C הוא השטח מתחת לעקומה זו. באופן מדויק יותר, ציר השליפה מחולק בדרך כלל ל-10 חלקים, והדיוק מחושב כממוצע על כל הנקודות הללו:
AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10})
AP ו-IoU
נשקול רק את הזיהויים עבורם IoU מעל ערך מסוים. לדוגמה, במערך הנתונים PASCAL VOC בדרך כלל \mbox{IoU Threshold} = 0.5, בעוד שב-COCO AP נמדד עבור ערכים שונים של \mbox{IoU Threshold}.
תמונה מתוך NeuroWorkshop
דיוק ממוצע כולל - mAP
המדד המרכזי לזיהוי אובייקטים נקרא דיוק ממוצע כולל, או mAP. זהו ערך הדיוק הממוצע, מחושב כממוצע על פני כל קטגוריות האובייקטים, ולעיתים גם על פני \mbox{IoU Threshold}. תהליך חישוב mAP מתואר בפירוט
בפוסט בלוג הזה), וגם כאן עם דוגמאות קוד.
גישות שונות לזיהוי אובייקטים
ישנן שתי קטגוריות עיקריות של אלגוריתמים לזיהוי אובייקטים:
- רשתות הצעת אזורים (R-CNN, Fast R-CNN, Faster R-CNN). הרעיון המרכזי הוא ליצור אזורים מעניינים (ROI) ולהריץ CNN עליהם, בחיפוש אחר הפעלה מקסימלית. זה קצת דומה לגישה הנאיבית, למעט העובדה שה-ROI נוצרים בצורה חכמה יותר. אחד החסרונות המרכזיים של שיטות אלו הוא שהן איטיות, מכיוון שצריך לבצע מספר רב של מעברים של מסווג CNN על התמונה.
- מעבר אחד (YOLO, SSD, RetinaNet). בארכיטקטורות אלו אנו מעצבים את הרשת כך שתנבא גם קטגוריות וגם ROI במעבר אחד.
R-CNN: רשת CNN מבוססת אזורים
R-CNN משתמשת ב-חיפוש סלקטיבי כדי ליצור מבנה היררכי של אזורי ROI, אשר מועברים לאחר מכן דרך מחלצי תכונות של CNN ומסווגי SVM כדי לקבוע את קטגוריית האובייקט, ורגרסיה ליניארית כדי לקבוע את קואורדינטות תיבת הגבול. מאמר רשמי
תמונה מתוך van de Sande et al. ICCV’11
תמונות מתוך הבלוג הזה
F-RCNN - Fast R-CNN
גישה זו דומה ל-R-CNN, אך האזורים מוגדרים לאחר יישום שכבות הקונבולוציה.
תמונה מתוך המאמר הרשמי, arXiv, 2015
Faster R-CNN
הרעיון המרכזי בגישה זו הוא להשתמש ברשת עצבית כדי לנבא ROI - מה שנקרא רשת הצעת אזורים. מאמר, 2016
תמונה מתוך המאמר הרשמי
R-FCN: רשת מבוססת אזורים עם קונבולוציה מלאה
אלגוריתם זה מהיר יותר מ-Faster R-CNN. הרעיון המרכזי הוא כדלקמן:
- אנו מחלצים תכונות באמצעות ResNet-101.
- התכונות מעובדות על ידי מפת ניקוד רגישה למיקום. כל אובייקט מתוך
Cקטגוריות מחולק ל-k\times kאזורים, ואנו מאמנים לחזות חלקים של אובייקטים. - עבור כל חלק מתוך
k\times kאזורים כל הרשתות מצביעות על קטגוריות אובייקטים, וקטגוריית האובייקט עם ההצבעה המקסימלית נבחרת.
תמונה מתוך המאמר הרשמי
YOLO - You Only Look Once
YOLO הוא אלגוריתם בזמן אמת במעבר אחד. הרעיון המרכזי הוא כדלקמן:
- התמונה מחולקת ל-
S\times Sאזורים. - עבור כל אזור, CNN מנבא
nאובייקטים אפשריים, קואורדינטות תיבת הגבול ו-ביטחון=הסתברות * IoU.
תמונה מתוך המאמר הרשמי
אלגוריתמים נוספים
- RetinaNet: מאמר רשמי
- מימוש ב-PyTorch ב-Torchvision
- מימוש ב-Keras
- זיהוי אובייקטים עם RetinaNet בדוגמאות של Keras
- SSD (Single Shot Detector): מאמר רשמי
✍️ תרגילים: זיהוי אובייקטים
המשיכו את הלמידה במחברת הבאה:
סיכום
בשיעור זה עשיתם סיור מהיר בכל הדרכים השונות שבהן ניתן לבצע זיהוי אובייקטים!
🚀 אתגר
קראו את המאמרים והמחברות על YOLO ונסו אותם בעצמכם:
- פוסט בלוג טוב שמתאר את YOLO
- אתר רשמי
- YOLO: מימוש ב-Keras, מחברת שלב-אחר-שלב
- YOLO v2: מימוש ב-Keras, [מחברת שלב-אחר-שלב](https://github.com/experiencor/keras-y









