این صفحه امضاهای رایجی را توضیح میدهد که باید توسط ماژولها در قالب TF1 Hub برای کارهای مرتبط با تصویر پیادهسازی شوند. (برای فرمت TF2 SavedModel ، به API مشابه SavedModel مراجعه کنید.)
برخی از ماژول ها را می توان برای بیش از یک کار استفاده کرد (به عنوان مثال، ماژول های طبقه بندی تصویر تمایل دارند برخی از ویژگی ها را در راه استخراج کنند). بنابراین، هر ماژول (1) امضاهای نامگذاری شده را برای تمام وظایف پیش بینی شده توسط ناشر، و (2) یک output = m(images)
برای وظیفه اصلی تعیین شده خود ارائه می دهد.
وکتور ویژگی تصویر
خلاصه استفاده
بردار ویژگی تصویر یک تانسور 1 بعدی متراکم است که یک تصویر کامل را نشان می دهد، معمولاً برای طبقه بندی توسط مدل مصرف کننده. (برخلاف فعالسازیهای میانی سیانان، تفکیک فضایی ارائه نمیکند. برخلاف طبقهبندی تصویر ، طبقهبندیهای آموختهشده توسط مدل ناشر را کنار میگذارد.)
یک ماژول برای استخراج ویژگی تصویر دارای یک امضای پیش فرض است که دسته ای از تصاویر را به دسته ای از بردارهای ویژگی نگاشت می کند. می توان از آن به این صورت استفاده کرد:
module_spec = hub.load_module_spec("path/to/module")
height, width = hub.get_expected_image_size(module_spec)
images = ... # A batch of images with shape [batch_size, height, width, 3].
module = hub.Module(module_spec)
features = module(images) # A batch with shape [batch_size, num_features].
همچنین امضای نامگذاری شده مربوطه را تعریف می کند.
مشخصات امضا
امضای نامگذاری شده برای استخراج بردارهای ویژگی تصویر به صورت فراخوانی می شود
outputs = module(dict(images=images), signature="image_feature_vector",
as_dict=True)
features = outputs["default"]
ورودی از قرارداد کلی برای ورودی تصاویر پیروی می کند.
فرهنگ لغت خروجی ها حاوی یک خروجی "default"
از نوع dtype float32
و شکل [batch_size, num_features]
است. batch_size
مانند ورودی است، اما در زمان ساخت نمودار مشخص نیست. num_features
یک ثابت شناخته شده و مخصوص ماژول مستقل از اندازه ورودی است.
این بردارهای ویژگی برای طبقهبندی با یک طبقهبندی کننده ساده پیشخور (مانند ویژگیهای تلفیقی از بالاترین لایه کانولوشن در یک CNN معمولی برای طبقهبندی تصویر) قابل استفاده هستند.
اعمال انصراف برای ویژگی های خروجی (یا نه) باید به مصرف کننده ماژول سپرده شود. خود ماژول نباید خروجیهای واقعی را انجام دهد (حتی اگر در مکانهای دیگر از انصراف داخلی استفاده کند).
فرهنگ لغت خروجی ممکن است خروجی های بیشتری را ارائه دهد، به عنوان مثال، فعال سازی لایه های پنهان در داخل ماژول. کلیدها و مقادیر آنها به ماژول وابسته است. توصیه می شود کلیدهای وابسته به معماری را با نام معماری پیشوند قرار دهید (به عنوان مثال، برای جلوگیری از اشتباه گرفتن لایه میانی "InceptionV3/Mixed_5c"
با بالاترین لایه کانولوشن "InceptionV2/Mixed_5c"
).
طبقه بندی تصویر
خلاصه استفاده
طبقهبندی تصویر ، پیکسلهای یک تصویر را برای عضویت در کلاسهای طبقهبندی انتخابشده توسط ناشر ماژول به امتیازات خطی (logits) ترسیم میکند. این به مصرفکنندگان اجازه میدهد تا از طبقهبندی خاصی که توسط ماژول ناشر آموخته است، نتیجهگیری کنند، و نه فقط ویژگیهای زیربنایی آن (ر.ک. بردار ویژگی تصویر ).
یک ماژول برای استخراج ویژگی تصویر دارای یک امضای پیش فرض است که دسته ای از تصاویر را به دسته ای از لاجیت ها نگاشت می کند. می توان از آن به این صورت استفاده کرد:
module_spec = hub.load_module_spec("path/to/module")
height, width = hub.get_expected_image_size(module_spec)
images = ... # A batch of images with shape [batch_size, height, width, 3].
module = hub.Module(module_spec)
logits = module(images) # A batch with shape [batch_size, num_classes].
همچنین امضای نامگذاری شده مربوطه را تعریف می کند.
مشخصات امضا
امضای نامگذاری شده برای استخراج بردارهای ویژگی تصویر به صورت فراخوانی می شود
outputs = module(dict(images=images), signature="image_classification",
as_dict=True)
logits = outputs["default"]
ورودی از قرارداد کلی برای ورودی تصاویر پیروی می کند.
فرهنگ لغت خروجی ها حاوی یک خروجی "default"
از نوع dtype float32
و شکل [batch_size, num_classes]
است. batch_size
مانند ورودی است، اما در زمان ساخت نمودار مشخص نیست. num_classes
تعداد کلاسهای طبقهبندی است که یک ثابت شناخته شده مستقل از اندازه ورودی است.
ارزیابی outputs["default"][i, c]
امتیازی را به دست میدهد که عضویت مثال i
در کلاس با شاخص c
را پیشبینی میکند.
این که آیا این امتیازها برای استفاده با softmax (برای کلاسهای متقابل انحصاری)، sigmoid (برای کلاسهای متعامد) یا چیز دیگری به کار میروند، به طبقهبندی اساسی بستگی دارد. مستندات ماژول باید این را توصیف کند و به تعریف شاخص های کلاس اشاره کند.
فرهنگ لغت خروجی ممکن است خروجی های بیشتری را ارائه دهد، به عنوان مثال، فعال سازی لایه های پنهان در داخل ماژول. کلیدها و مقادیر آنها به ماژول وابسته است. توصیه می شود کلیدهای وابسته به معماری را با نام معماری پیشوند قرار دهید (به عنوان مثال، برای جلوگیری از اشتباه گرفتن لایه میانی "InceptionV3/Mixed_5c"
با بالاترین لایه کانولوشن "InceptionV2/Mixed_5c"
).
ورودی تصویر
این در همه انواع ماژول های تصویر و امضاهای تصویر مشترک است.
امضایی که دسته ای از تصاویر را به عنوان ورودی می گیرد، آنها را به عنوان یک تانسور 4 بعدی متراکم از نوع dtype float32
و شکل [batch_size, height, width, 3]
می پذیرد که عناصر آن مقادیر رنگی RGB پیکسل های نرمال شده در محدوده [0، 1] است. . این چیزی است که از tf.image.decode_*()
و سپس tf.image.convert_image_dtype(..., tf.float32)
دریافت می کنید.
یک ماژول با دقیقا یک (یا یک ورودی اصلی) تصاویر از نام "images"
برای این ورودی استفاده می کند.
ماژول هر batch_size
را می پذیرد و به همین ترتیب اولین بعد TensorInfo.tensor_shape را روی "ناشناخته" تنظیم می کند. آخرین بعد به شماره 3
کانال های RGB ثابت شده است. ابعاد height
و width
به اندازه مورد انتظار تصاویر ورودی ثابت می شود. (کار آینده ممکن است این محدودیت را برای ماژول های کاملاً کانولوشن حذف کند.)
مصرف کنندگان ماژول نباید شکل را مستقیماً بررسی کنند، بلکه اطلاعات اندازه را با فراخوانی hub.get_expected_image_size() در ماژول یا مشخصات ماژول به دست آورند و انتظار می رود اندازه تصاویر ورودی را بر این اساس تغییر دهند (معمولاً قبل از / در حین دسته بندی).
برای سادگی، ماژولهای TF-Hub از طرحبندی channels_last
(یا NHWC
) Tensors استفاده میکنند و آن را به بهینهساز گراف TensorFlow میسپارند تا در صورت نیاز در channels_first
(یا NCHW
) بازنویسی کند. از زمان TensorFlow نسخه 1.7 به طور پیش فرض این کار را انجام داده است.