close menu

סיכום: מודל הראיה הממוחשבת החזק בעולם: EFFICIENTNET V2

סיכום: מודל הראיה הממוחשבת החזק בעולם: EFFICIENTNET V2

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

המגיע אלינו בגרסה חדשה: V2

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

לנו נשאר רק לבחור באיזה גודל נרצה לקבל אותו

מה זה EfficientNet?

רקע על EfficientNet V1 – רשת הקונבולוציה החזקה בעולם

(*היתה)

עד לאחרונה משפחת מודלי EfficientNets היו ה-מודל לכמעט כל בעיית הראייה הממוחשבת שקיימות.
הרשתות הן קלות, מהירות, חזקות מאד וקל מאד לאמן אותן.
אפילו כשכבר קיבלנו כמה רשתות חזקות יותר כמו NFNets, עדיין הרבה בחרו להשאר עם ה-EfficientNets כה-מודל לכל-דבר ראיה ממוחשבת.
רק כשהתחלנו לקבל טרנספורמרים לתמונות וההבדל והפער בביצועים התחיל להתרחב, התחלנו לעבור לטרנספורמרים (ובמיוחד לSWIN-Transformer שהיה משמעותית יותר חזק מכל השאר).

חשוב לציין שרשתות הקונבולוציה החזירו מלחמה עם ConvNEXT ו CoAT Net ועוד כמה רשתות שטוענות להיות הSOTA שיצאו בשנה האחרונה.

 

אף אחד לא ציפה לEfficientNet V2

ממש כמו האינקוויזיציה. גם לה אף אחד לא ציפה.

שלא רק חזקה יותר מכל הרשתות האחרות, היא מנצחת עם 20 מיליון פרמטרים בלבד. (וגם בנויה מראש מטנזורים בגדלים ספציפים שהופכים את החישוב להרבה יותר יעיל ומהיר).
כדי להבין איך הרשת עובדת נחזור לגרסה הראשונה:
המודלים ממשפחת EfficientNet בנוים מרשת קונבולוציה שהארכיטקטורה שלה נמצאה באמצעות חיפוש ארכיטקטורה.
הטריק הגדול הוא שהארכיטקטורות סקיילאביליות: מבצעים חיפוש על היפרפרמטרים קטנים (מספר פילטרים, עומק..) כך שהחיפוש רץ מהר. ואז את התוצאה מגדילים.
וכך, ארכיטקטורת EfficientNet הוצגה במאמר EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks ב-2019.
הרעיון של ארכיטקטורת EfficientNet דומה מאוד לMnasNet – נמצא ארכיטקטורה אוטומטית לפי מדד מסוים: אבל במקום להתייחס ל"הכללה" כמדד, נתייחס לFLOPs וכך נקבל ארכיטקטורה יעילה – ומכאן השם "EfficinetNet".
כך הכותבים קיבלו את מודל הבסיס: EfficientNetB0. ואז (באמצעות כמה טריקים במאמר) הם "מתחו" מודל זה לכמה גדלים הולכים וגדלים לפי העומק, הרוחב ורזולוציית התמונה ויצרו 6 מודלים נוספים:
– המודל: EfficientNetB0
– המודל: EfficientNetB1
– המודל: EfficientNetB2
– המודל: EfficientNetB3
– המודל: EfficientNetB4
– המודל: EfficientNetB5
– המודל: EfficientNetB6
– המודל: EfficientNetB7

ועוד אחד ענק EfficientNet L2 אבל עזבו את זה עכשיו

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

הגרסה השניה: EfficientNet V2

הבעיות בEfficientNet
בגרסה הראשונה של EfficientNet היו כמה בעיות שהמפתחים פתרו בגרסה החדשה.
אחת הבעיות עם EfficientNet הייתה שהיא שלמרות שEfficientB0 מודל פצפון, עדיין עבור משימות מסוימות המודל היה גדול וכבד מידי מה שהקשה על השימוש בו במכשירי קצה למשל.
כדי לטפל בבעיות אלו, הכותבים בEfficientNetV2 הכניסו מספר שינויים ושיפורים למודל:
  • הם הוסיפו לחיפוש גם את כמות הפרמטרים של המודל כך שלא רק שהחיפוש מנסה לקבל מודל שרץ מהר, הוא גם מנסה לקבל מודל קטן שדרישת הזכרון שלו קטנה.
  • כמו כן, הפעם מרחב החיפוש כלל בלוקי קונבולוציה מסוגים נוספים כמו Fused-MBConv.
הכותבים קיבלו את ארכיטקטורת EfficientNetV2 שמהירה הרבה וחזקה בהרבה ממודלים גדולים ממנה משמעותית (עד פי 6. 😎
בלוקי MBConv ו-Fused-MBConv
בלוק MBConv שנמצא בשימוש בגרסה הראשונה לרוב אינו יכול לנצל את האופטימיזציות ברמת החומרה מהן כולנו נהנים בשנים האחרונות, הבלוקים החדשים Fused-MBConv מנצלים טוב יותר את הGPUs.
ההבדל היחיד בין המבנה של MBConv וה-Fused-MBConv הם שני הבלוקים האחרונים. בעוד שה-MBConv משתמש בקונבולוצית עומק (3×3) (DepthwiseConv) ואחריה שכבת קונבולוציה 1×1, ב-Fused-MBConv מחליף את שתי השכבות הללו בשכבה אחת של 3×3.
שכבות MBConv מאוחדות הופכות את האימון למהיר הרבה יותר תוך כדי תשלום יחסית קטן במספר הפרמטרים, אבל אם נעשה נגזים: זה יכול להאט את האימון ולהוסיף הרבה פרמטרים. כדי להתגבר על בעיה זו, המחברים נתנו לאופטימייזר גם את MBConv וגם את Fused-MBConv לחיפוש והוא כבר מחליט אוטומטית מה יהיה השילוב הטוב ביותר על מנת לקבל את הרשת היעילה ביותר.
בזמן החיפוש הכותבים התחילו מהמודל EfficientNet והחיפוש נערך עם אפשרויות היפרפרמטרים שונות כגון – איזה בלוקים, מספר שכבות, גודל פילטרים, רוחב הרשתפ וכו'. הם אימנו כ1000 רשתות (זהו?) למשך 10 אפוקים ולקחו את הטוב ביותר.
מתיחת המודל הקטן לגודל נורמלי
לאחר שהכותבים הגיעו לEfficientNetV2-S, הוא נמתח כדי לקבל את המודלים EfficientNetV2-M ו-EfficientNetV2-L. השינוי בהיפרפרמטרים נעשה באותו היחס כמו שעשו ב-EfficientNet אך בוצעו עוד כמה שינויים כדי להפוך את המודלים לקטנים ומהירים יותר:
  • גודל התמונה המרבי הוגבל ל-480×480 פיקסלים כדי לצמצם את השימוש בזיכרון GPU/TPU.
  • שכבות נוספות נוספו לשלבים מאוחרים יותר כדי להגדיל את היכולות של הרשת מבלי להגדיל יותר מידי את צריכת החישובים.
למידה בשלבים
תמונות גדולות יותר נוטות להגיע לתוצאות אימון טובות יותר אך אבל עולות בזמןובכוח עיבוד. כמה מאמרים הציעו בעבר הגדלת התמונה לאורך האימון, אבל זה מוביל בדרך כלל לביצועים פחות טובים.
מחברי EfficientNetV2 מראים שאם מגדילים את גודל התמונה אבל גם את הDropout אז הביצועים לא נפגעים וניתן לנצל את טכניקת אימון זו. באופן כללי מודלים גדולים דרשו יותר Dropout.
בתמונה: EfficientNet V2 הSOTA
– מאמר https://arxiv.org/pdf/1905.11946.pdf :EfficientNet V1
– מאמר https://arxiv.org/abs/2104.00298 :EfficientNet V2
עוד בנושא: