דף זה מתאר כיצד TF2 SavedModels עבור משימות הקשורות לתמונה צריכים ליישם את ה-API SavedModel שניתן לשימוש חוזר . (זה מחליף את החתימות הנפוצות לתמונות עבור פורמט TF1 Hub שהוצא משימוש כעת.)
וקטור תכונת תמונה
סיכום שימוש
וקטור תכונת תמונה הוא טנזור 1-D צפוף המייצג תמונה שלמה, בדרך כלל לשימוש על ידי מסווג פשוט להזנה קדימה במודל הצרכני. (במונחים של רשתות CNN קלאסיות, זהו ערך צוואר הבקבוק לאחר שההיקף המרחבי נאסף או השטחה, אך לפני ביצוע הסיווג; לשם כך, ראה סיווג תמונה למטה.)
ל-SaveModel שניתן לשימוש חוזר לחילוץ תכונת תמונה יש שיטת __call__
על אובייקט השורש שממפה אצווה של תמונות לקבוצת וקטורים של תכונות. ניתן להשתמש בו כך:
obj = hub.load("path/to/model") # That's tf.saved_model.load() after download.
images = ... # A batch of images with shape [batch_size, height, width, 3].
features = obj(images) # A batch with shape [batch_size, num_features].
בקרס המקבילה היא
features = hub.KerasLayer("path/to/model")(images)
הקלט עוקב אחר המוסכמה הכללית לקלט תמונות . תיעוד הדגם מציין את הטווח המותר height
width
של הקלט.
הפלט הוא טנסור בודד של dtype float32
וצורה [batch_size, num_features]
. ה- batch_size
זהה לזה בקלט. num_features
הוא קבוע ספציפי למודול ללא תלות בגודל הקלט.
פרטי API
ממשק ה- Reusable SavedModel API מספק גם רשימה של obj.variables
(למשל, לאתחול כאשר לא נטען בשקיקה).
מודל התומך בכוונון עדין מספק רשימה של obj.trainable_variables
. זה עשוי לדרוש ממך לעבור training=True
לביצוע במצב אימון (למשל, לנשירה). מודלים מסוימים מאפשרים לארגומנטים אופציונליים לעקוף היפרפרמטרים (למשל, שיעור נשירה; שיתואר בתיעוד המודל). המודל עשוי גם לספק רשימה של obj.regularization_losses
. לפרטים, עיין ב- Reusable SavedModel API .
ב-Keras, זה מטופל על ידי hub.KerasLayer
: אתחל אותו עם trainable=True
כדי לאפשר כוונון עדין, ו(במקרה הנדיר שבו חלות עקיפות hparam) עם arguments=dict(some_hparam=some_value, ...))
.
הערות
החלת נשירה על תכונות הפלט (או לא) יש להשאיר לצרכן הדגם. SavedModel עצמו לא אמור לבצע נשירה על הפלטים בפועל (גם אם הוא משתמש בנשירה פנימית במקומות אחרים).
דוגמאות
ב-SaveModels הניתנים לשימוש חוזר עבור וקטורים של תכונות תמונה
- המדריך של Colab אימון מחדש של סיווג תמונות ,
סיווג תמונה
סיכום שימוש
סיווג תמונה ממפה את הפיקסלים של תמונה לציונים ליניאריים (לוגיטים) לחברות במחלקות של טקסונומיה שנבחרו על ידי מפרסם המודול . זה מאפשר לצרכני מודל להסיק מסקנות מהסיווג המסוים שנלמד על ידי מודול המפרסם. (עבור סיווג תמונה עם קבוצה חדשה של מחלקות, מקובל לעשות שימוש חוזר במודל Image Feature Vector עם מסווג חדש במקום זאת.)
ל-Reusable SavedModel לסיווג תמונה יש שיטת __call__
על אובייקט השורש שממפה אצווה של תמונות לקבוצת לוגיטים. ניתן להשתמש בו כך:
obj = hub.load("path/to/model") # That's tf.saved_model.load() after download.
images = ... # A batch of images with shape [batch_size, height, width, 3].
logits = obj(images) # A batch with shape [batch_size, num_classes].
בקרס המקבילה היא
logits = hub.KerasLayer("path/to/model")(images)
הקלט עוקב אחר המוסכמה הכללית לקלט תמונות . תיעוד הדגם מציין את הטווח המותר height
width
של הקלט.
logits
של הפלט הם טנסור בודד של dtype float32
וצורה [batch_size, num_classes]
. ה- batch_size
זהה לזה בקלט. num_classes
הוא מספר המחלקות בסיווג, שהוא קבוע ספציפי לדגם.
הערך logits[i, c]
הוא ציון המנבא את החברות בדוגמה i
במחלקה עם אינדקס c
.
זה תלוי בסיווג הבסיסי אם הציונים האלה נועדו לשמש עם softmax (עבור מחלקות סותרות זו את זו), סיגמואיד (עבור מחלקות אורתוגונליות), או משהו אחר. תיעוד המודול צריך לתאר זאת, ולהתייחס להגדרה של מדדי המחלקה.
פרטי API
ה- Reusable SavedModel API מספק גם רשימה של obj.variables
(לדוגמה, לאתחול כאשר לא נטען בשקיקה).
מודל התומך בכוונון עדין מספק רשימה של obj.trainable_variables
. זה עשוי לדרוש ממך לעבור training=True
לביצוע במצב אימון (למשל, לנשירה). מודלים מסוימים מאפשרים לארגומנטים אופציונליים לעקוף פרמטרים היפר (למשל, שיעור נשירה; שיתואר בתיעוד המודל). המודל עשוי גם לספק רשימה של obj.regularization_losses
. לפרטים, עיין ב- Reusable SavedModel API .
ב-Keras, זה מטופל על ידי hub.KerasLayer
: אתחל אותו עם trainable=True
כדי לאפשר כוונון עדין, ו(במקרה הנדיר שבו חלות עקיפות hparam) עם arguments=dict(some_hparam=some_value, ...))
.
קלט תמונה
זה משותף לכל סוגי דגמי התמונות.
מודל שלוקח אצווה של תמונות כקלט מקבל אותן כטנזור 4-D צפוף של dtype float32
וצורה [batch_size, height, width, 3]
שהאלמנטים שלהם הם ערכי צבע RGB של פיקסלים המנורמלים לטווח [0, 1] . זה מה שאתה מקבל מ- tf.image.decode_*()
ואחריו tf.image.convert_image_dtype(..., tf.float32)
.
המודל מקבל כל batch_size
. תיעוד הדגם מציין את הטווח המותר height
width
. הממד האחרון קבוע ל-3 ערוצי RGB.
מומלץ שדגמים ישתמשו בפריסת channels_last
(או NHWC
) של Tensors לאורך כל הדרך, ולהשאיר אותה למיטוב הגרפים של TensorFlow כדי לשכתב ל- channels_first
(או NCHW
) במידת הצורך.