דף זה מתאר חתימות נפוצות שיש ליישם על ידי מודולים בפורמט TF1 Hub עבור משימות הקשורות לתמונה. ( לפורמט TF2 SavedModel , ראה את ה- API האנלוגי של SavedModel .)
מודולים מסוימים יכולים לשמש ליותר ממשימה אחת (למשל, מודולי סיווג תמונות נוטים לבצע חילוץ תכונות מסוימות בדרך). לכן, כל מודול מספק (1) חתימות בשם עבור כל המשימות הצפויות על ידי המפרסם, ו-(2) output = m(images)
עבור המשימה העיקרית המיועדת לו.
וקטור תכונת תמונה
סיכום שימוש
וקטור תכונת תמונה הוא טנזור 1-D צפוף המייצג תמונה שלמה, בדרך כלל לסיווג לפי המודל הצרכני. (בניגוד להפעלות הביניים של CNNs, הוא אינו מציע פירוט מרחבי. בניגוד לסיווג תמונות , הוא משליך את הסיווג שנלמד על ידי מודל המפרסם).
למודול לחילוץ תכונת תמונה יש חתימת ברירת מחדל הממפה אצווה של תמונות לקבוצת וקטורים של תכונות. ניתן להשתמש בו כך:
module_spec = hub.load_module_spec("path/to/module")
height, width = hub.get_expected_image_size(module_spec)
images = ... # A batch of images with shape [batch_size, height, width, 3].
module = hub.Module(module_spec)
features = module(images) # A batch with shape [batch_size, num_features].
זה גם מגדיר את החתימה המתאימה.
מפרט חתימה
החתימה המכונה לחילוץ וקטורים של תכונת תמונה מופעלת כ
outputs = module(dict(images=images), signature="image_feature_vector",
as_dict=True)
features = outputs["default"]
הקלט עוקב אחר המוסכמה הכללית לקלט תמונות .
מילון הפלטים מכיל פלט "default"
של dtype float32
וצורה [batch_size, num_features]
. ה- batch_size
זהה לקלט, אך אינו ידוע בזמן בניית הגרף. num_features
הוא קבוע ידוע, ספציפי למודול, ללא תלות בגודל הקלט.
וקטורי תכונה אלה נועדו להיות ניתנים לשימוש לסיווג עם מסווג פשוט להזנה קדימה (כמו התכונות המאוגדות מהשכבה הקונבולוציונית העליונה ביותר ב-CNN טיפוסי לסיווג תמונות).
החלת נשירה על תכונות הפלט (או לא) יש להשאיר לצרכן המודול. המודול עצמו לא אמור לבצע נשירה על הפלטים בפועל (גם אם הוא משתמש בנשירה פנימית במקומות אחרים).
מילון הפלטים עשוי לספק פלטים נוספים, למשל, הפעלות של שכבות נסתרות בתוך המודול. המפתחות והערכים שלהם תלויים במודול. מומלץ לשים קידומת מפתחות תלויי ארכיטקטורה בשם ארכיטקטורה (למשל, כדי להימנע מבלבול של שכבת הביניים "InceptionV3/Mixed_5c"
עם השכבה הקונבולוציונית העליונה ביותר "InceptionV2/Mixed_5c"
).
סיווג תמונה
סיכום שימוש
סיווג תמונה ממפה את הפיקסלים של תמונה לציונים ליניאריים (לוגיטים) לחברות במחלקות של טקסונומיה שנבחרו על ידי מפרסם המודול . זה מאפשר לצרכנים להסיק מסקנות מהסיווג המסוים שנלמד על ידי מודול המוציא לאור, ולא רק מהתכונות הבסיסיות שלו (השוו תמונה תכונה וקטור ).
למודול לחילוץ תכונות תמונה יש חתימת ברירת מחדל שממפה אצווה של תמונות לקבוצת לוגיטים. ניתן להשתמש בו כך:
module_spec = hub.load_module_spec("path/to/module")
height, width = hub.get_expected_image_size(module_spec)
images = ... # A batch of images with shape [batch_size, height, width, 3].
module = hub.Module(module_spec)
logits = module(images) # A batch with shape [batch_size, num_classes].
זה גם מגדיר את החתימה המתאימה.
מפרט חתימה
החתימה המכונה לחילוץ וקטורים של תכונת תמונה מופעלת כ
outputs = module(dict(images=images), signature="image_classification",
as_dict=True)
logits = outputs["default"]
הקלט עוקב אחר המוסכמה הכללית לקלט תמונות .
מילון הפלטים מכיל פלט "default"
של dtype float32
וצורה [batch_size, num_classes]
. ה- batch_size
זהה לקלט, אך אינו ידוע בזמן בניית הגרף. num_classes
הוא מספר המחלקות בסיווג, שהוא קבוע ידוע שאינו תלוי בגודל הקלט.
הערכת outputs["default"][i, c]
מניבה ציון המנבא את החברות בדוגמה i
בכיתה עם אינדקס c
.
זה תלוי בסיווג הבסיסי אם הציונים האלה נועדו לשמש עם softmax (עבור מחלקות סותרות זו את זו), סיגמואיד (עבור מחלקות אורתוגונליות), או משהו אחר. תיעוד המודול צריך לתאר זאת, ולהתייחס להגדרה של מדדי המחלקה.
מילון הפלטים עשוי לספק פלטים נוספים, למשל, הפעלות של שכבות נסתרות בתוך המודול. המפתחות והערכים שלהם תלויים במודול. מומלץ לשים קידומת מפתחות תלויי ארכיטקטורה בשם ארכיטקטורה (למשל, כדי להימנע מבלבול של שכבת הביניים "InceptionV3/Mixed_5c"
עם השכבה הקונבולוציונית העליונה ביותר "InceptionV2/Mixed_5c"
).
קלט תמונה
זה משותף לכל סוגי מודולי התמונה וחתימות התמונה.
חתימה שלוקחת אצווה של תמונות כקלט מקבלת אותן כטנזור 4-D צפוף של dtype float32
וצורה [batch_size, height, width, 3]
שהאלמנטים שלהם הם ערכי צבע RGB של פיקסלים המנורמלים לטווח [0, 1] . זה מה שאתה מקבל מ- tf.image.decode_*()
ואחריו tf.image.convert_image_dtype(..., tf.float32)
.
מודול עם קלט אחד (או עיקרי אחד) של תמונות משתמש בשם "images"
עבור קלט זה.
המודול מקבל כל batch_size
, ובהתאמה מגדיר את הממד הראשון של TensorInfo.tensor_shape ל"לא ידוע". הממד האחרון קבוע למספר 3
של ערוצי RGB. מידות height
width
קבועות לגודל הצפוי של תמונות הקלט. (עבודה עתידית עשויה להסיר את ההגבלה עבור מודולים קונבולוציוניים לחלוטין.)
צרכני המודול לא צריכים לבדוק את הצורה ישירות, אלא לקבל את מידע הגודל על ידי קריאה ל-hub.get_expected_image_size() במפרט המודול או המודול, והם צפויים לשנות את גודל תמונות הקלט בהתאם (בדרך כלל לפני/במהלך אצווה).
למען הפשטות, מודולי TF-Hub משתמשים בפריסת channels_last
(או NHWC
) של Tensors, ומשאירים אותה למיטוב הגרפים של TensorFlow כדי לשכתב ל- channels_first
(או NCHW
) במידת הצורך. הוא עושה זאת כברירת מחדל מאז TensorFlow גרסה 1.7.