APIهای رایج SavedModel برای وظایف تصویر

این صفحه توضیح می دهد که چگونه TF2 SavedModels برای کارهای مرتبط با تصویر باید API قابل استفاده مجدد SavedModel را پیاده سازی کند. (این جایگزین امضاهای رایج برای تصاویر برای قالب منسوخ شده TF1 Hub می شود.)

وکتور ویژگی تصویر

خلاصه استفاده

بردار ویژگی تصویر ، یک تانسور 1 بعدی متراکم است که یک تصویر کامل را نشان می‌دهد، معمولاً برای استفاده توسط یک طبقه‌بندی کننده پیش‌خور ساده در مدل مصرف‌کننده. (از نظر 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].

در کراس، معادل آن است

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

ورودی از قرارداد کلی برای ورودی تصاویر پیروی می کند. مستندات مدل محدوده مجاز height و width ورودی را مشخص می کند.

خروجی یک تانسور منفرد از نوع dtype float32 و شکل [batch_size, num_features] است. batch_size مانند ورودی است. num_features یک ثابت مخصوص ماژول مستقل از اندازه ورودی است.

جزئیات API

Reusable SavedModel API همچنین فهرستی از obj.variables (به عنوان مثال، برای مقداردهی اولیه در زمانی که مشتاقانه بارگیری نمی شود) ارائه می دهد.

مدلی که از تنظیم دقیق پشتیبانی می کند، فهرستی از obj.trainable_variables را ارائه می دهد. ممکن است از شما نیاز داشته باشد که training=True را در حالت آموزش اجرا کنید (مثلاً برای ترک تحصیل). برخی از مدل‌ها به آرگومان‌های اختیاری اجازه می‌دهند که فراپارامترها را نادیده بگیرند (مثلاً نرخ انصراف، در مستندات مدل توضیح داده شود). این مدل همچنین ممکن است فهرستی از obj.regularization_losses را ارائه دهد. برای جزئیات، به API SavedModel قابل استفاده مجدد مراجعه کنید.

در Keras، این مورد توسط hub انجام می شود hub.KerasLayer : آن را با trainable=True مقداردهی اولیه کنید تا تنظیم دقیق فعال شود، و (در موارد نادری که لغو hparam اعمال می شود) با arguments=dict(some_hparam=some_value, ...)) .

یادداشت

اعمال انصراف برای ویژگی های خروجی (یا نه) باید به مصرف کننده مدل واگذار شود. خود SavedModel نباید خروجی‌های واقعی را انجام دهد (حتی اگر در مکان‌های دیگر از انصراف استفاده کند).

مثال ها

SavedModels قابل استفاده مجدد برای بردارهای ویژگی تصویر در استفاده می شود

طبقه بندی تصویر

خلاصه استفاده

طبقه‌بندی تصویر، پیکسل‌های یک تصویر را برای عضویت در کلاس‌های طبقه‌بندی انتخاب‌شده توسط ناشر ماژول به امتیازات خطی (logits) ترسیم می‌کند. این به مصرف کنندگان مدل اجازه می دهد تا از طبقه بندی خاصی که توسط ماژول ناشر آموخته است، نتیجه گیری کنند. (برای طبقه‌بندی تصویر با مجموعه‌ای از کلاس‌های جدید، استفاده مجدد از مدل بردار ویژگی تصویر با یک طبقه‌بندی‌کننده جدید معمول است.)

یک SavedModel قابل استفاده مجدد برای طبقه بندی تصویر دارای یک روش __call__ در شی ریشه است که دسته ای از تصاویر را به دسته ای از logit ها نگاشت می کند. می توان از آن به این صورت استفاده کرد:

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 (برای کلاس‌های متقابل انحصاری)، sigmoid (برای کلاس‌های متعامد) یا چیز دیگری به کار می‌روند، به طبقه‌بندی اساسی بستگی دارد. مستندات ماژول باید این را توصیف کند و به تعریف شاخص های کلاس اشاره کند.

جزئیات API

Reusable SavedModel API همچنین فهرستی از obj.variables (به عنوان مثال، برای مقداردهی اولیه در زمانی که مشتاقانه بارگیری نمی شود) ارائه می دهد.

مدلی که از تنظیم دقیق پشتیبانی می کند، فهرستی از obj.trainable_variables را ارائه می دهد. ممکن است از شما نیاز داشته باشد که training=True را در حالت آموزش اجرا کنید (مثلاً برای ترک تحصیل). برخی از مدل‌ها به آرگومان‌های اختیاری اجازه می‌دهند که فراپارامترها را نادیده بگیرند (مثلاً نرخ انصراف، در مستندات مدل توضیح داده شود). این مدل همچنین ممکن است فهرستی از obj.regularization_losses را ارائه دهد. برای جزئیات، به API SavedModel قابل استفاده مجدد مراجعه کنید.

در Keras، این مورد توسط hub انجام می شود hub.KerasLayer : آن را با trainable=True مقداردهی اولیه کنید تا تنظیم دقیق فعال شود، و (در موارد نادری که لغو hparam اعمال می شود) با arguments=dict(some_hparam=some_value, ...)) .

ورودی تصویر

این در همه انواع مدل های تصویر مشترک است.

مدلی که دسته ای از تصاویر را به عنوان ورودی می گیرد، آنها را به عنوان یک تانسور متراکم 4 بعدی از نوع 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 ) بازنویسی کند.