تصف هذه الصفحة التوقيعات الشائعة التي يجب تنفيذها بواسطة الوحدات النمطية بتنسيق TF1 Hub للمهام المتعلقة بالصور. (للحصول على تنسيق TF2 SavedModel ، راجع واجهة برمجة تطبيقات SavedModel المماثلة.)
يمكن استخدام بعض الوحدات لأكثر من مهمة واحدة (على سبيل المثال، تميل وحدات تصنيف الصور إلى القيام ببعض استخراج الميزات في الطريق). لذلك، توفر كل وحدة (1) توقيعات مسماة لجميع المهام المتوقعة من قبل الناشر، و(2) output = m(images)
للمهمة الأساسية المعينة لها.
ناقل ميزة الصورة
ملخص الاستخدام
ناقل ميزة الصورة عبارة عن موتر كثيف أحادي الأبعاد يمثل صورة كاملة، وعادةً ما يتم تصنيفه بواسطة نموذج المستهلك. (على عكس التنشيط الوسيط لشبكات CNN، فإنه لا يقدم تحليلًا مكانيًا. وعلى عكس تصنيف الصور ، فإنه يتجاهل التصنيف الذي تعلمه نموذج الناشر.)
تحتوي وحدة استخراج ميزات الصورة على توقيع افتراضي يقوم بتعيين مجموعة من الصور لمجموعة من متجهات الميزات. ويمكن استخدامه على النحو التالي:
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"
).
تصنيف الصور
ملخص الاستخدام
يقوم تصنيف الصور بتعيين وحدات البكسل في الصورة إلى درجات خطية (سجلات) للعضوية في فئات التصنيف المحدد بواسطة ناشر الوحدة . يتيح ذلك للمستهلكين استخلاص استنتاجات من التصنيف المعين الذي تعلمته وحدة الناشر، وليس فقط ميزاته الأساسية (راجع: Image Features Vector ).
تحتوي وحدة استخراج ميزات الصورة على توقيع افتراضي يقوم بتعيين مجموعة من الصور لمجموعة من السجلات. ويمكن استخدامه على النحو التالي:
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"
).
إدخال الصورة
وهذا أمر شائع في جميع أنواع وحدات الصور وتوقيعات الصور.
التوقيع الذي يأخذ مجموعة من الصور كمدخلات يقبلها كموتر رباعي الأبعاد كثيف لـ 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
) إذا لزم الأمر. لقد تم القيام بذلك افتراضيًا منذ الإصدار 1.7 من TensorFlow.