ממשקי API נפוצים של SavedModel למשימות תמונה

דף זה מתאר כיצד 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 עצמו לא אמור לבצע נשירה על הפלטים בפועל (גם אם הוא משתמש בנשירה פנימית במקומות אחרים).

דוגמאות

מודלים שמורים לשימוש חוזר עבור וקטורים של תכונות תמונה משמשים ב

סיווג תמונה

סיכום שימוש

סיווג תמונה ממפה את הפיקסלים של תמונה לציונים ליניאריים (לוגיטים) לחברות במחלקות של טקסונומיה שנבחרו על ידי מפרסם המודול . זה מאפשר לצרכני מודל להסיק מסקנות מהסיווג המסוים שנלמד על ידי מודול המפרסם. (עבור סיווג תמונה עם קבוצה חדשה של מחלקות, מקובל לעשות שימוש חוזר במודל 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 ) במידת הצורך.