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

تصف هذه الصفحة كيف يجب أن تقوم TF2 SavedModels للمهام المتعلقة بالصور بتنفيذ واجهة برمجة تطبيقات SavedModel القابلة لإعادة الاستخدام . (يحل هذا محل التوقيعات العامة للصور لتنسيق TF1 Hub الذي تم إيقافه الآن.)

ناقل ميزة الصورة

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

متجه ميزة الصورة هو موتر كثيف 1-D يمثل صورة كاملة ، عادةً للاستخدام بواسطة مصنف بسيط للتغذية الأمامية في نموذج المستهلك. (فيما يتعلق بشبكات CNN الكلاسيكية ، فهذه هي قيمة الاختناق بعد تجميع النطاق المكاني أو تسويته بعيدًا ، ولكن قبل إجراء التصنيف ؛ لذلك ، انظر تصنيف الصور أدناه.)

يحتوي نموذج 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].
features = obj(images)   # A batch with shape [batch_size, num_features].

في Keras ، المكافئ هو

features = hub.KerasLayer("path/to/model")(images)

الإدخال يتبع العرف العام لإدخال الصور . تحدد وثائق النموذج النطاق المسموح به height width المدخلات.

الإخراج هو موتر واحد من dtype float32 والشكل [batch_size, num_features] . batch_size هو نفسه الموجود في الإدخال. num_features ثابت خاص بالوحدة النمطية ومستقل عن حجم الإدخال.

تفاصيل API

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

أمثلة

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

تصنيف الصور

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

يقوم تصنيف الصور بتعيين وحدات البكسل الخاصة بالصورة إلى الدرجات الخطية (السجلات) للعضوية في فئات التصنيف المحددة بواسطة ناشر الوحدة النمطية . يتيح ذلك للمستهلكين النموذجيين استخلاص استنتاجات من التصنيف المعين الذي تعلمته وحدة الناشر. (لتصنيف الصور بمجموعة جديدة من الفئات ، من الشائع إعادة استخدام نموذج Image Feature Vector بمصنف جديد بدلاً من ذلك.)

يحتوي نموذج 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].

في Keras ، المكافئ هو

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

توفر واجهة برمجة التطبيقات 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 ) إذا لزم الأمر.