close menu

אז מה הוא מודל הראיה המומחשת החזק בעולם?!

מענה לביקורת לפוסט על EFFICIENTNET V2

אז מה הוא מודל הראיה המומחשת החזק בעולם?!

ואולי יותר מעניין: איך יודעים איזה מודל יעבוד א-צ-ל-כ-ם הכי טוב?!ואיך בכלל בודקים את כל זה?!

לפני כמה ימים פרסמתי פוסט על EfficientNet V2,
כרגע בין הרשתות החזקות בעולם.
הפוסט זכה לקצת ביקורת:
הביקורת: נטען כי EfficientNet V2 לא הרשת החזקה בעולם.
בואו נדון בנושא:
  • נטען כי EfficietNetV2 אינה הרשת החזקה בעולם. נתחיל מלסקור את כל המתמודדים על הכתר: נסכם את כל המודלים הכי חזקים בעולם היום לראיה ממוחשבת, מה החידושים בהם ואיפה התחום נמצא היום.
  • נטען שהרשת נבדקה רק על ImageNet ולכן אי אפשר לסמוך על התוצאות המדווחות במאמר. אני מסכים ואכליל גישה זו: אי אפשר לסמוך כמעט על אף תוצאות באף מאמר במקום זאת פשוט נבדוק בעצמנו: נבדוק מה יצא הכי טוב בברוטפורס כל המודלים שהריצו בקאגל.
  • אם אי אפשר להסתמך על תוצאות? איך אפשר לדעת? אפשר לנחש מראש? איך אפשר לנחש איזה מודל יצא טוב בלי לבדוק אותו ולבזבז זמן? מודלים גדולים: טובים יותר? – נסקור מאפיינים ומדדים שונים ומשונים של מודלים (פרמטרים, זמן חישוב, כמות אקטיבציות..) ואת הקורלציה שלהם לכוח המודל.

טענות נגד EfficientNet V2
נטען כי EfficientNet V2 הגיעה לתוצאות פחות טובות על דאטהסט ספציפי אחר בבעיה אחרת עליה היא נוסתה.

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

יכול מאד להיות שבאותה הבעיה אחד המודלים החזקים ביותר כיום יגיעו לתוצאה זהה או יהיו קצת יותר טובים.
בכל זאת, אציג כמה סיבות אפשריות (שאולי כדאי לבדוק) לתוצאות נמוכות של EfficientNet V2 ביחס למודלים אחרים שנוסו:
  • טעות נפוצה בשימוש בEfficietNet – לא להשתמש בPreprocessing הנכון: לEfficientNet יש Preprocessing איתו היא אומנה. ואומנו כמה גרסאות שונות בכמה תשתיות קוד שונות (TF, TF-Keras, TPU, בגרסה הראשונה אם אני זוכר נכון אימנו גם בטורצ' גרסה מאפס) ויש הבדלים קטנים ומבלבלים בין הגרסאות. אם EfficientNetV2 קיבלה משמעותית תוצאות גרועות יותר מרשתות אחרות: כדאי לבדוק.
  • עוד טעות נפוצה: אימון הרשת עם משקולות קפואות: כשאמרתי שEfficientNet הרשת החזקה בעולם התכוונתי לארכיטקטורה. אם הוספתם שכבות משלכם, שחררו גם את המשקולות של הBackbone המאומן שלכם (בדרך כלל לא ממליץ: סעיף הבא).
  • הוספת שכבות מיותרות בסוף הרשת: ראיתי הרבה מקרים בהם הוסיפו שכבות אחרי הרשת ואימנו End2End. הבעיה היא שלא אימנו בייסלין בלי אותן שכבות: הטענה ש"חייבים להוסיף שכבות" היא טעות נפוצה בתחום. במקרים רבים (מאד!) הסט-אפ הבא יגיע לתוצאות הטובות ביותר בFine-tuning: רק הרשת המקורית + GlobalAvgPooling ושכבה לינארית לגודל אותו אתם צריכים. (זה עובד מצוין גם במודלים אחרים לגמרי – למשל מודלי שפה).
  • לא נעשה שימוש ברשת מספיק גדולה: אמנם EfficientNet רשת חזקה מאד אבל גם היא בסוף מוגבלת למציאות – בבדיקה שלכם, בדקו את הרשת הגדולה ביותר שנכנסת לכם בGPU מבחינת מקום.
  • עניין חשוב שיכול להשפיע על התוצאות דרמטית ולא לוקחים אותו בחשבון: גודל הבאצ' משפיע ב-ט-י-ר-ו-ף על הביצועים של המודל הסופי. (וגם הבאצ' האופטימלי משתנה מאד בין מודלים ובין גדלי מודלים. חשוב לבדוק ולאפטם).

סקירת כל המודלים "הכי חזקים בעולם"

מכיוון שהמאמר של EfficientNetV2 הוא מאמר היסטורי עתיק שאבותינו פרסמו בשנת 2021: פורסמו מודלים חדישים יותר מאז, נסקור אותם וננסה להבין לאן כל התחום הולך.
כל המאמרים אומרים שהם "הכי חזקים בעולם": בואו נבין את כולם.
בפעם האחרונה שדיברנו על כל המודלים הכי חזקים בעולם, עצרנו בנקודת הזמן בהSWIN Transformer הוא המודל הטוב ביותר.
נמשיך להתקדם מנקודה זו ונעבור על כל המודלים הבולטים (מבחינת ביצועי הכללה בלבד – לא מהירות, זכרון, כוח עיבוד..):
המודל: BEiT: BERT Pre-Training of Image Transformers
המודל BEiT הוא מודל טרנספורמר לתמונות שמאומן Pretraning כמו BERT – הם מאמנים MLM – Maked Language Modeling רק לתמונות: כמו במודלי שפה בהם המודל "משלים מילים" חסרות במשפט – כאן התמונה מפורקת לטוקנים ומטרת האימון היא לשחזר את הטוקנים המקוריים במיקומי התמונה הפגומים. מודל זה נצפה גם בקאגל בתור אחד המודלים המנצחים בתחרות סיווג תמונות לפני כמה חודשים. מכיוון שישנם מודלי טרנספורמרים לתמונה רבים: לא היה קל "לגלות" שמודל זה אכן חזק מאד (כי כולם אומרים שהם הכי טובים בImageNet ולכולם יש סיבה למה הם "באמת אבל הכי טובים!!"). אותו המודל נמצא בתחרות על ידי בדיקת כמות רבה של מודלים זה אחר זה על אותו הדאטהסט ועקף את רוב מודלי הSWIN של כל שאר המתחרים.
המודל: Swin Transformer V2
עד לא מזמן Swin Transformers היתה הארכיטקטורה החזקה ביותר והגיעה לתוצאות מדהימות במגוון משימות שונות, המחברים הציגו גרסה משופרת שלה לא מזמן. והגדילו אותה ל3 מיליארד פרמטרים (כי חייבים. זה הטרנד עכשיו!) המודל מסוגל לקבל במכה אחת תמונות ברזולוציה של 1536×1536 (זה טרנספורמר! זה מרשים!).
כשמגדילים טרנספורמרים לאורכי קלט גדולים (גם בטקסט וגם בתמונות) נתקלים בכמה בעיות: חוסר יציבות באימון, צריכת זיכרון GPU, חלקם לא מכלילים טוב לאורכי קלט גדולים יותר.
המחברים מציגים את השיטות הבאות על מנת לפתור את הבעיות:
  • נרמול הקלט לפני הכניסה לרשת ושימוש באטנשן קוסינוס המשפר את היציבות באימון.
  • הכנסת position bias בlogpspace שעוזר למודלים להכליל לרזולוציות גבוהות יותר.
  • שיטת self supervision חדשה: SimMIM.
המודל: ConvNext
באמצע כל הבלאגן של הטרנספורמרים קיבלנו את ConvNext:
לשכבת "Patchify" המגיעה מה-Vision Transformer יש גם חסרונות, בגלל זה Swin Transformer עובד כל כך טוב: הוא החזיר את גישת "חלון הזז" כמו שיש בקונבולוציה.
ההצלחה של Swin Transformer מרמזת לנו שהרעיון של שילוב בין קונבולוציה לאטנשן כאן כדי להשאר.
ברשת ConvNEXT נשאלת השאלה הבאה: מה אפשר ללמוד מהמבנה של ה-Transformers כך שישפיע על ביצועי רשת קונבולוציה?
המחברים מתחילים עם ResNet פשוטה (למשל ResNet50) ומוסיפים אליה "טריקים" שלב אחרי שלב בהדרגה כך שהיא מזכירה יותר ויותר Transformer (ספציפית: Swin-T).
לא אכנס לכל הפרטים הקטנים [הטקסט כבר ארוך.. אפילו בסטנדרטים שלי] אבל במאמר הם גם מראים את החשיבות בבחירת ההיפרפרמטרים ה"משעממים" הנכונים כמו האופטימייזר והscheduler.

מומלץ! אחד המודלים החזקים בעולם עד היום!

המודל: CoAtNet
מודל זה חלט על דגלו לשלב בין רשתות קונבולוציה לאטנשן.
מודל זה מחולק לשני חלקים עיקריים כשחצי המודל הראשון הוא רשת קונבולוציה הבנויה מהבלוקים של EfficientNet: MBConvBlock וחצי המודל השני הוא בלוק מיוחד המשלב בצורה "מושלמת" (כל אמרו המחברים) בין Mixing Depthwise Convolution ובין Self-Attention.

מומלץ לקרוא: המודל חזק מאד ונצפה בקאגל מספר פעמים במקומות גבוהים בתחרויות.

למה רק מה שיש בקאגל?

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

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

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

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

נתחיל!
המודל: CoCa: Contrastive Captioners are Image-Text Foundation Models
מודל זה הוא מודל מינימליסטי ללמידת ניגוד (Contrastive Learning) רב-מודאלית (גם טקסט וגם תמונה) ומיועד להיות ארכיטקטורה שלאחריה אפשר להשתמש במודל המאומן לצורך Fine-Tuning למשימות אחרות בתמונות.
שילוב הטקסט והתמונה מתבצע בדרך המוכרת של Cross Attention.
המודל מפגין ביצועים טובים יותר על תמונות בלבד לאחר האימון הנוסף.
המודל: PaLI: A Jointly-Scaled Multilingual Language-Image Model
אמ;לק: טקסט משפר תמונה אתם אומרים? אז מה עם טקסט בכמה שפות?! להלן.
המודל: Florence: A New Foundation Model for Computer Vision
אמ;לק: תמונה וטקסט משפרים ביצועים? טקסט מסוגים שונים ושפות שונות משפר ביצועים? מה וידאו?! ישפר? ואולי גם עומק? (מודל בסיסי ענק: Foundation Model)
המודל: EVA: Exploring the Limits of Masked Visual Representation Learning at Scale
אמ;לק: "מה זאת אומרת, אין לנו את הדאטהסט שעליו אימנו את CLIP?!" אנחנו הולכים לאמן CLIP משופר, יותר חזק רק על דאטהסטים פתוחים ולשחרר את הכל באינטרנט כי "מה נראה להם?!"" (הניסוח שלהם קצת אחר) – כל הקוד והמודלים כאן: https://github.com/baaivision/EVA.

איך בודקים מודלים?

בטענות נגד EfficientNet V2 נטען שנבדקה על ImageNet.
ולImageNet יש חסרונות.
כן..
אולי..
קודם כל:
לשאלה "איזה מודל הכי טוב?" יש תשובה נכונה.
רק תשובה אחת נכונה.
התשובה: "תבדקו את כולם ותראו בעצמכם".
ואם תשובה זו אינה מספקת אתכם (מכל סיבה שהיא): אתם לוקחים סיכון. יכול להיות שאתם משקרים לעצמכם – גם אם לשקר יש ביסוס, ביבליאוגרפיה אקדמית והוא אפילו עבר ביקורת עמיתים. יש רק דרך אחת לדעת אם שיטה עובדת טוב: לנסות אותה.
חוץ מלבדוק את כל המודלים בעולם על כל הבעיות, מה עוד אפשר לעשות?
הסיבה האמיתית לבדוק את EfficientNet V2 על הדאטה שלכם היא שהיא חמה כרגע בקאגל.
כמעט ואין סיבה יותר קורלטיבית ל"לקבל תוצאות טובות בבעיה שלכם" מאשר "הרבה משתמשים בזה בקאגל עכשיו" [בבעיה זהה לכם, כמובן. הדאטה לא ממש רלוונטי חוץ ממקרים קיצוניים בהם המודל Pretrained לבעיה הספציפית שאנו מנסים לפתור].
קאגל הוא מסננת טובה מאד למאמרים ושיטות
בכל תחרות בקאגל יש אלפי אנשים, בזמן שאנחנו מתלבטים: מאות מהם כבר קראו את כ-ל המאמרים הכי חדשים ובדקו את המודלים הכי משוגעים ונשארו עם אלו שעבדו הכי טוב.
האם זה מבטיח שזה יעבוד טוב אצלכם?
לא, ממש לא.

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

אז איך בודקים מודלים?

סקירת ברוט-פורס כל הBACKBONES הקיימים לראיה ממוחשבת

אספר בקצרה על תוצאות חיפוש שבוצע בקאגל (לפני מעל לחצי שנה) בו נבדקו כל המודלים הכי חזקים באותה התקופה.
איך נדע אם תוצאות מדווחות ממאמר כלשהו יניבו תוצאות טובות גם אצלנו?
ישנם פרמרטים מרכזיים שבהם דאטהסטים יכולים להיות שונים ולהשפיע על מידת ההתאמה של מודל לבעיה ספציפית:
  1. עד כמה הם דומים לדאטהסט של המודל שאומן מראש
  2. כמה הם גדולים.
לכן, הבדיקה נעשתה על שני דאטהסטים שונים מאד.
נבדקו מודלים מאומנים מראש שאומנו על-Imagenet, ובדיקה שכללה Fine-Tuning על שני דאטהסטים שונים (בנפרד – כל פעם מאפס):
  1. אוקספורד: IIT-Pet Dataset , דומה מאוד ל-Imagenet. באימג'נט יש תמונות רבות של בעלי חיים, ובכל תמונה בעל החיים הוא האובייקט המרכזי. בIIT-Pet יש כמעט 15,000 תמונות גם הן מסוג דומה.
  2. דאטהסט שני: Kaggle Planet מכיל 1000 תמונות לוויין של כדור הארץ. אין כאלה תמונות באימג'נט.
שני הדאטהסטים בגדלים שונים מאד ושונים מאוד מבחינת הדמיון שלהם ל-Imagenet. יש להם גם סוגים שונים של תיוגים – Planet היא בעית multi-label, בעוד IIT-Pet היא single-label.
היפרפרמטרים
בניסוי הריצו את כל המודלים שיש בtimm ושמסוגלים לעבוד עם תמונות בגודל 224×224. בסך הכל הורצו 86 מודלים וגרסאות מודלים.
בצעד הראשון בוצע חיפוש היפר-פרמטרים עבור כל גרסת מודל ולכל דאטהסט בנפרד. הניסיון מראה בדרך כלל במצבים כאלו שבין גרסות שונות של אותו המודל איך הבדל גדול בהיפרפרמטרים וגם לאותו המודל על דאטהסטים שונים ההיפרמטרים האופטימליים בדרך כלל נשארים. גם בניסוי זה תוצאות אלו שוחזרו.
בחיפוש ההיפרפרמטרים נבדקו הפרמטרים הבאים:
  • הlearning-rate
  • סוג הPooling: שרשור או ממוצע
עבור כל גרסת מודל מודל ודאטהסט ועבור כל האפשרויות להיפרפרמטר הורצו שלוש ריצות שונות.
עבור כל מודל ודאטהסט נרשמה השגיאה, זמן האימון ותפוסת זכרון הGPU לאורך כל זמן האימון אם נעשה בו שימוש. התוצאה המדווחת בסוף היא המינימום (לא ממוצע הקבוצה מכיוון שישנן הרצות שלא "עברו חלק" בשל תחרות על משאבי מחשוב).
תוצאות על אוקספורד:
משפחות הconvnext , swin ו- vit הן החזקות ביותר. כשמפתיעה לטובה היא convnext_tiny שצורכת כמעט שום דבר מבחינת משאבים וחזקה ביותר מבין הרשתות המודרניות.
בנושא הזה גם vit_small_patch16 אפשרות טובה: היא מהירה יותר וצורכת פחות זכרון מאשר convnext_tiny.
תוצאות על Planet:
התוצאות נראות שונות לגמרי! vit ו- swin מחזיקים ברוב המקומות העליונים מבחינת דיוק מול\מהירות. vit_small_patch32 בולט במיוחד עם צריכת הזכרון הנמוכה ביותר וגם המודל המהיר ביותר ב-15 הטובים ביותר.
מכיוון שהדאטהסט כל כך שונה מ-Imagenet, בדיקה זו בודקת כמה מהר וכמה Sample efficient המודלים יכולים ללמוד פיצ'רים חדשים שהם לא ראו בעבר. convnext_tiny עדיין מחזיקה בביצועים טובים אבל פחות.
החיסרון העיקרי של מודלי "טרנספורמרים לתמונות" כמו vit ו-swin הוא שהם יכולים להתמודד רק עם גודל תמונת קבוע. בשונה מרשתות קונבולוציה: צריך לחתוך, לרפד ו"לשפצר" את התמונה לתוך הטרנספורמר. מכאן מגיע היתרון של מודלי Convnext: התמודדות עם אטנשן בגודל דינמי.
עוד תוצאה מעניינת עולה מהניסוי: בדאטהסט הזה יש מתאם קטן בין גודל המודל לביצועים. כש Regnetx ו-vit הן משפחות המודלים עם המתאם הגבוה ביותר בין גודל המודל לביצועים.
כלומר: שאם יש לכם נתונים שונים מאוד מהנתונים שעליהם המודל אומן מראש, אולי כדאי לכם ללכת דווקא על מודלים קטנים. אינטואיציה: למודלים כאלו יש יותר פיצ'רים חדשים ללמוד מהדאטה ואם היו גדולים מדי, אולי לא מצליחים לנצל את הכוח והגודל שלהם שלהם ביעילות.
מסקנות סופיות:
ישנם שלושה זוכים ברורים בתחרות "המודל הכי טוב לfine-tuning":
• convnext
• vit
• swin (v2).
זהו? איפה כל השאר? איפה EfficientNetV2 אם היא כל כך טובה?
שתי ארכיטקטורות שנחשבות לחזקות במיוחד בקאגל ולא הופיעו בין המודלים הטובים ביותר הן:
• EfficientNet ו-v2
• BEiT.
ארכיטקטורת BEiT פשוט לא נכנסה בGPU עליו הורץ הניסוי.
לגבי EfficientNet V2: בחיפוש זה הורצה עם היפרפרמטרים לא אופטימלים וגם ממשקולות התחלתיות שאינן אומנו לפני כחצי שנה. הוחלט בזמן הניסוי שלא להריצה מחדש עם הגדרות פרמרטרים אחרות וטובות יותר ולהכניסה לחיפוש הרשתות הבא.
אז מה השורה התחתונה? למה כן לבדוק את EfficientNet V2?
כי מבין הרשתות שהכי חמות כרגע בקאגל: היא מככבת בביצועים כשהיא מאומנת ממשקולות מאותחות שלא היו זמינות בתקופת הניסוי.
אם יש לכם ספקות: ממליץ לכם פשוט לנסות ולבדוק!
קורלציה בין מאפייני המודל לביצועי המודל: על הקשר בין ארכיטקטורת המודל (גודל, כמות פרמטרים, כמות אקטיבציות, מספר שכבות, רוחב השכבות, זמן חישוב, צריכת זכרון…) לבין ביצועי המודל לאחר אימון
עוד בנושא: