החוליה שהייתה חסרה לניווט רובוטים (SLAM)

מיועד ל- כל אחד (כתבה לא טכנית)

נכתב על ידי תמיר נווה

כל פעם מדהים אותי מחדש איך deep learning משדרג ביצועים באופן דרמטי בתחומים נוספים!

הפעם אכתוב סקירה כללית על SLAM=Simultaneously Localization and Mapping ואספר על החידושים בתחום שנובעים מלמידה עמוקה.

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

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

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

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

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

האופציה הנוספת נקראת Visual-Slam (או בקיצור VSLAM) והיא מתבססת על מצלמה פשוטה ומתוך ניתוח התמונות העוקבות המתקבלות האלגוריתם משערך את מיקומו במרחב ואיך נראה המרחב בו זמנית.

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

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

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

מציאת נקודות עניין והתאמתן בין פריימים עוקבים נעשה באמצעות כלים קלאסיים של עיבוד תמונה כמוOrb,Fast, Harris, Sift, Surf .

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

אז איפה קפיצת המדרגה עקב למידה עמוקה (ובפרט Convolutional Neural Networks=CNN) ?

אלגוריתם CNN-SLAM מחדש באופן שהוא משלב בין השלשה הבאה: אלגוריתם SLAM רגיל, אלגוריתם מבוסס CNN שנותן מפת עומק (Depth Map Prediction), ואלגוריתם מבוסס CNN שמחלק את התמונה לאזורים (Semantic Segmentation) כמו ריצפה, תקרה, ריהוט, קירות וחפצים.

האלגוריתם (המשולב) הורץ על שני מאגרי נתונים מקובלים בתחוםICL-NUIM, TUM RGB-D SLAM  שמכילים מפות עומק ומסלולי תנועה של מצלמה. המאגרים נבנו או באופן סינתטי או באמצעות חיישני עומק כמו Kinect.

בהשוואת ביצועים בין CNN-SLAM לבין האלגוריתמים הטובים ביותר שיש ב SLAM המבוסס על מצלמה בודדת (Monocular SLAM): בין השאר ORB-SLAM, LSD-SLAM שעושים שיערוך מסלול וREMODE  שעושה שיערוך עומק. האלגוריתם מבוסס CNN (כתוב Ours בתרשים מהמאמר) מוביל בביצועים:

תודה ל CNN-SLAM: Real-time dense monocular SLAM with learned depth prediction