यह पृष्ठ वर्णन करता है कि छवि-संबंधित कार्यों के लिए TF2 SavedModels को पुन: प्रयोज्य SavedModel API को कैसे कार्यान्वित करना चाहिए। (यह अब अप्रचलित TF1 हब प्रारूप के लिए छवियों के लिए सामान्य हस्ताक्षर को प्रतिस्थापित करता है।)
छवि फ़ीचर वेक्टर
उपयोग सारांश
एक छवि फ़ीचर वेक्टर एक सघन 1-डी टेंसर है जो पूरी छवि का प्रतिनिधित्व करता है, आमतौर पर उपभोक्ता मॉडल में एक सरल फ़ीड-फ़ॉरवर्ड क्लासिफायर द्वारा उपयोग के लिए। (क्लासिक सीएनएन के संदर्भ में, स्थानिक सीमा को एकत्रित या समतल करने के बाद, लेकिन वर्गीकरण किए जाने से पहले यह बाधा मूल्य है; उसके लिए, नीचे छवि वर्गीकरण देखें।)
छवि सुविधा निष्कर्षण के लिए पुन: प्रयोज्य सेव्डमॉडल में रूट ऑब्जेक्ट पर एक __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
के लिए अनुमेय सीमा निर्दिष्ट करता है।
आउटपुट float32
और आकार [batch_size, num_features]
का एकल टेंसर है। batch_size
इनपुट के समान है। num_features
इनपुट आकार से स्वतंत्र एक मॉड्यूल-विशिष्ट स्थिरांक है।
एपीआई विवरण
पुन: प्रयोज्य सेव्डमॉडल एपीआई obj.variables
की एक सूची भी प्रदान करता है (उदाहरण के लिए, उत्सुकता से लोड नहीं होने पर आरंभीकरण के लिए)।
एक मॉडल जो फ़ाइन-ट्यूनिंग का समर्थन करता है, obj.trainable_variables
की एक सूची प्रदान करता है। प्रशिक्षण मोड में निष्पादित करने के लिए आपको training=True
पास करने की आवश्यकता हो सकती है (उदाहरण के लिए, ड्रॉपआउट के लिए)। कुछ मॉडल हाइपरपैरामीटर को ओवरराइड करने के लिए वैकल्पिक तर्कों की अनुमति देते हैं (उदाहरण के लिए, ड्रॉपआउट दर; मॉडल दस्तावेज़ीकरण में वर्णित)। मॉडल obj.regularization_losses
की एक सूची भी प्रदान कर सकता है। विवरण के लिए, पुन: प्रयोज्य सेव्डमॉडल एपीआई देखें।
केरस में, इसका ध्यान hub.KerasLayer
द्वारा रखा जाता है: फ़ाइन-ट्यूनिंग को सक्षम करने के लिए इसे trainable=True
के साथ आरंभ करें, और (दुर्लभ मामले में जब hparam ओवरराइड लागू होता है) arguments=dict(some_hparam=some_value, ...))
.
टिप्पणियाँ
आउटपुट सुविधाओं पर ड्रॉपआउट लागू करना (या नहीं करना) मॉडल उपभोक्ता पर छोड़ दिया जाना चाहिए। सेव्डमॉडल को स्वयं वास्तविक आउटपुट पर ड्रॉपआउट नहीं करना चाहिए (भले ही वह अन्य स्थानों पर आंतरिक रूप से ड्रॉपआउट का उपयोग करता हो)।
उदाहरण
छवि सुविधा वैक्टर के लिए पुन: प्रयोज्य सेव्डमॉडल का उपयोग किया जाता है
- कोलाब ट्यूटोरियल एक इमेज क्लासिफायर को फिर से प्रशिक्षित करना ,
छवि वर्गीकरण
उपयोग सारांश
छवि वर्गीकरण मॉड्यूल प्रकाशक द्वारा चयनित वर्गीकरण की कक्षाओं में सदस्यता के लिए छवि के पिक्सेल को रैखिक स्कोर (लॉगिट) पर मैप करता है। यह मॉडल उपभोक्ताओं को प्रकाशक मॉड्यूल द्वारा सीखे गए विशेष वर्गीकरण से निष्कर्ष निकालने की अनुमति देता है। (कक्षाओं के नए सेट के साथ छवि वर्गीकरण के लिए, इसके बजाय एक नए वर्गीकरणकर्ता के साथ छवि फ़ीचर वेक्टर मॉडल का पुन: उपयोग करना आम बात है।)
छवि वर्गीकरण के लिए पुन: प्रयोज्य सेव्डमॉडल में रूट ऑब्जेक्ट पर एक __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
float32
और आकार [batch_size, num_classes]
का एक एकल टेंसर है। batch_size
इनपुट के समान है। num_classes
वर्गीकरण में वर्गों की संख्या है, जो एक मॉडल-विशिष्ट स्थिरांक है।
मान logits[i, c]
सूचकांक c
वाले वर्ग में उदाहरण i
की सदस्यता की भविष्यवाणी करने वाला एक स्कोर है।
यह अंतर्निहित वर्गीकरण पर निर्भर करता है कि क्या ये स्कोर सॉफ्टमैक्स (पारस्परिक रूप से अनन्य वर्गों के लिए), सिग्मॉइड (ऑर्थोगोनल वर्गों के लिए), या कुछ और के साथ उपयोग किए जाने के लिए हैं। मॉड्यूल दस्तावेज़ीकरण में इसका वर्णन होना चाहिए, और वर्ग सूचकांकों की परिभाषा का संदर्भ देना चाहिए।
एपीआई विवरण
पुन: प्रयोज्य सेव्डमॉडल एपीआई obj.variables
की एक सूची भी प्रदान करता है (उदाहरण के लिए, उत्सुकता से लोड नहीं होने पर आरंभीकरण के लिए)।
एक मॉडल जो फ़ाइन-ट्यूनिंग का समर्थन करता है, obj.trainable_variables
की एक सूची प्रदान करता है। प्रशिक्षण मोड में निष्पादित करने के लिए आपको training=True
पास करने की आवश्यकता हो सकती है (उदाहरण के लिए, ड्रॉपआउट के लिए)। कुछ मॉडल हाइपरपैरामीटर को ओवरराइड करने के लिए वैकल्पिक तर्कों की अनुमति देते हैं (उदाहरण के लिए, ड्रॉपआउट दर; मॉडल दस्तावेज़ीकरण में वर्णित)। मॉडल obj.regularization_losses
की एक सूची भी प्रदान कर सकता है। विवरण के लिए, पुन: प्रयोज्य सेव्डमॉडल एपीआई देखें।
केरस में, इसका ध्यान hub.KerasLayer
द्वारा रखा जाता है: फ़ाइन-ट्यूनिंग को सक्षम करने के लिए इसे trainable=True
के साथ आरंभ करें, और (दुर्लभ मामले में जब hparam ओवरराइड लागू होता है) arguments=dict(some_hparam=some_value, ...))
.
छवि इनपुट
यह सभी प्रकार के छवि मॉडलों के लिए सामान्य है।
एक मॉडल जो छवियों के एक बैच को इनपुट के रूप में लेता है, उन्हें डीटाइप float32
और आकार के घने 4-डी टेंसर के रूप में स्वीकार करता है [batch_size, height, width, 3]
जिनके तत्व पिक्सेल के आरजीबी रंग मान हैं जो सीमा के लिए सामान्यीकृत हैं [0, 1] . यह आपको tf.image.decode_*()
और उसके बाद tf.image.convert_image_dtype(..., tf.float32)
से मिलता है।
मॉडल किसी भी batch_size
स्वीकार करता है। मॉडल दस्तावेज़ height
और width
के लिए अनुमेय सीमा निर्दिष्ट करता है। अंतिम आयाम 3 आरजीबी चैनलों के लिए तय किया गया है।
यह अनुशंसा की जाती है कि मॉडल पूरे टेन्सर के channels_last
(या NHWC
) लेआउट का उपयोग करें, और यदि आवश्यक हो तो channels_first
(या NCHW
) को फिर से लिखने के लिए इसे टेन्सरफ्लो के ग्राफ ऑप्टिमाइज़र पर छोड़ दें।