توضح هذه الصفحة كيف ينبغي لـ TF2 SavedModels للمهام المتعلقة بالصور تنفيذ Reusable SavedModel API . (يحل هذا محل التوقيعات العامة للصور لتنسيق TF1 Hub المهمل الآن.)
ناقل ميزة الصورة
ملخص الاستخدام
ناقل ميزة الصورة عبارة عن موتر كثيف أحادي الأبعاد يمثل صورة كاملة، وعادةً ما يتم استخدامه بواسطة مصنف تغذية أمامي بسيط في نموذج المستهلك. (فيما يتعلق بشبكات CNN الكلاسيكية، هذه هي قيمة عنق الزجاجة بعد تجميع المدى المكاني أو تسويته، ولكن قبل الانتهاء من التصنيف؛ ولهذا السبب، انظر تصنيف الصور أدناه.)
يحتوي النموذج المحفوظ القابل لإعادة الاستخدام لاستخراج ميزات الصورة على طريقة __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
هو ثابت خاص بالوحدة النمطية ومستقل عن حجم الإدخال.
تفاصيل واجهة برمجة التطبيقات
توفر واجهة برمجة التطبيقات SavedModel القابلة لإعادة الاستخدام أيضًا قائمة obj.variables
(على سبيل المثال، للتهيئة عند عدم التحميل بفارغ الصبر).
يوفر النموذج الذي يدعم الضبط الدقيق قائمة obj.trainable_variables
. قد يتطلب منك اجتياز training=True
للتنفيذ في وضع التدريب (على سبيل المثال، للتسرب). تسمح بعض النماذج للوسائط الاختيارية بتجاوز المعلمات الفائقة (على سبيل المثال، معدل التسرب؛ الذي سيتم وصفه في وثائق النموذج). قد يوفر النموذج أيضًا قائمة بـ obj.regularization_losses
. للحصول على التفاصيل، راجع واجهة برمجة التطبيقات SavedModel القابلة لإعادة الاستخدام .
في Keras، يتم الاهتمام بهذا الأمر من خلال hub.KerasLayer
: قم بتهيئته باستخدام trainable=True
لتمكين الضبط الدقيق، و(في الحالات النادرة التي يتم فيها تطبيق تجاوزات hparam) باستخدام arguments=dict(some_hparam=some_value, ...))
.
ملحوظات
ينبغي ترك تطبيق التسرب على ميزات الإخراج (أو لا) للمستهلك النموذجي. يجب ألا يقوم SavedModel نفسه بإجراء التسرب على المخرجات الفعلية (حتى لو كان يستخدم التسرب داخليًا في أماكن أخرى).
أمثلة
تُستخدم النماذج المحفوظة القابلة لإعادة الاستخدام لمتجهات ميزات الصورة في
- البرنامج التعليمي Colab إعادة تدريب مصنف الصور
تصنيف الصور
ملخص الاستخدام
يقوم تصنيف الصور بتعيين وحدات البكسل في الصورة إلى درجات خطية (سجلات) للعضوية في فئات التصنيف المحدد بواسطة ناشر الوحدة . يتيح ذلك للمستهلكين النموذجيين استخلاص استنتاجات من التصنيف المعين الذي تعلمته وحدة الناشر. (بالنسبة لتصنيف الصور مع مجموعة جديدة من الفئات، من الشائع إعادة استخدام نموذج Image Features Vector مع مصنف جديد بدلاً من ذلك.)
يحتوي النموذج المحفوظ القابل لإعادة الاستخدام لتصنيف الصور على طريقة __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 (للفئات المتبادلة)، أو السيني (للفئات المتعامدة)، أو أي شيء آخر. يجب أن تصف وثائق الوحدة هذا الأمر، وتشير إلى تعريف مؤشرات الفئة.
تفاصيل واجهة برمجة التطبيقات
توفر واجهة برمجة التطبيقات SavedModel القابلة لإعادة الاستخدام أيضًا قائمة obj.variables
(على سبيل المثال، للتهيئة عند عدم التحميل بفارغ الصبر).
يوفر النموذج الذي يدعم الضبط الدقيق قائمة obj.trainable_variables
. قد يتطلب منك اجتياز training=True
للتنفيذ في وضع التدريب (على سبيل المثال، للتسرب). تسمح بعض النماذج للوسائط الاختيارية بتجاوز المعلمات الفائقة (على سبيل المثال، معدل التسرب؛ الذي سيتم وصفه في وثائق النموذج). قد يوفر النموذج أيضًا قائمة بـ obj.regularization_losses
. للحصول على التفاصيل، راجع واجهة برمجة التطبيقات SavedModel القابلة لإعادة الاستخدام .
في Keras، يتم الاهتمام بهذا الأمر عن طريق hub.KerasLayer
: قم بتهيئته باستخدام trainable=True
لتمكين الضبط الدقيق، و(في الحالات النادرة التي يتم فيها تطبيق تجاوزات hparam) باستخدام arguments=dict(some_hparam=some_value, ...))
.
إدخال الصورة
وهذا أمر شائع في جميع أنواع نماذج الصور.
النموذج الذي يأخذ مجموعة من الصور كمدخلات يقبلها كموتر رباعي الأبعاد كثيف لـ 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
) إذا لزم الأمر.