واجهات برمجة تطبيقات SavedModel الشائعة لمهام الصور

توضح هذه الصفحة كيف ينبغي لـ 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 نفسه بإجراء التسرب على المخرجات الفعلية (حتى لو كان يستخدم التسرب داخليًا في أماكن أخرى).

أمثلة

تُستخدم النماذج المحفوظة القابلة لإعادة الاستخدام لمتجهات ميزات الصورة في

تصنيف الصور

ملخص الاستخدام

يقوم تصنيف الصور بتعيين وحدات البكسل في الصورة إلى درجات خطية (سجلات) للعضوية في فئات التصنيف المحدد بواسطة ناشر الوحدة . يتيح ذلك للمستهلكين النموذجيين استخلاص استنتاجات من التصنيف المعين الذي تعلمته وحدة الناشر. (بالنسبة لتصنيف الصور مع مجموعة جديدة من الفئات، من الشائع إعادة استخدام نموذج 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 ) إذا لزم الأمر.