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