छवियों के लिए सामान्य हस्ताक्षर

यह पृष्ठ सामान्य हस्ताक्षरों का वर्णन करता है जिन्हें छवि से संबंधित कार्यों के लिए TF1 हब प्रारूप में मॉड्यूल द्वारा कार्यान्वित किया जाना चाहिए। ( TF2 SavedModel फॉर्मेट के लिए, समान SavedModel API देखें।)

कुछ मॉड्यूल का उपयोग एक से अधिक कार्यों के लिए किया जा सकता है (उदाहरण के लिए, छवि वर्गीकरण मॉड्यूल रास्ते में कुछ फीचर निष्कर्षण करते हैं)। इसलिए, प्रत्येक मॉड्यूल प्रकाशक द्वारा प्रत्याशित सभी कार्यों के लिए (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"]

इनपुट छवियों के इनपुट के लिए सामान्य परंपरा का अनुसरण करता है।

आउटपुट डिक्शनरी में dtype float32 और आकार [batch_size, num_features] का "default" आउटपुट होता है। batch_size इनपुट के समान है, लेकिन ग्राफ़ निर्माण समय पर ज्ञात नहीं है। num_features एक ज्ञात, मॉड्यूल-विशिष्ट निरंतर इनपुट आकार से स्वतंत्र है।

ये फीचर वैक्टर एक साधारण फीड-फॉरवर्ड क्लासिफायरियर के साथ वर्गीकरण के लिए उपयोग करने योग्य हैं (जैसे छवि वर्गीकरण के लिए एक विशिष्ट सीएनएन में सबसे ऊपरी दृढ़ परत से पूल की गई विशेषताएं)।

आउटपुट सुविधाओं के लिए ड्रॉपआउट लागू करना (या नहीं) मॉड्यूल उपभोक्ता पर छोड़ दिया जाना चाहिए। मॉड्यूल को वास्तविक आउटपुट पर ड्रॉपआउट नहीं करना चाहिए (भले ही वह अन्य स्थानों पर आंतरिक रूप से ड्रॉपआउट का उपयोग करता हो)।

आउटपुट डिक्शनरी आगे के आउटपुट प्रदान कर सकती है, उदाहरण के लिए, मॉड्यूल के अंदर छिपी परतों की सक्रियता। उनकी चाबियाँ और मूल्य मॉड्यूल-निर्भर हैं। आर्किटेक्चर नाम के साथ आर्किटेक्चर-निर्भर कुंजियों को उपसर्ग करने की अनुशंसा की जाती है (उदाहरण के लिए, मध्यवर्ती परत "InceptionV3/Mixed_5c" को सबसे ऊपरी दृढ़ परत "InceptionV2/Mixed_5c" InceptionV2/Mixed_5c" के साथ भ्रमित करने से बचने के लिए)।

छवि वर्गीकरण

उपयोग सारांश

छवि वर्गीकरण मॉड्यूल प्रकाशक द्वारा चयनित वर्गीकरण की कक्षाओं में सदस्यता के लिए एक छवि के पिक्सेल को रैखिक स्कोर (लॉग) में मैप करता है। यह उपभोक्ताओं को प्रकाशक मॉड्यूल द्वारा सीखे गए विशेष वर्गीकरण से निष्कर्ष निकालने की अनुमति देता है, न कि केवल इसकी अंतर्निहित विशेषताओं (cf. छवि फ़ीचर वेक्टर ) से।

छवि सुविधा निष्कर्षण के लिए एक मॉड्यूल में एक डिफ़ॉल्ट हस्ताक्षर होता है जो छवियों के एक बैच को लॉग के बैच में मैप करता है। इसे इस तरह इस्तेमाल किया जा सकता है:

  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"]

इनपुट छवियों के इनपुट के लिए सामान्य परंपरा का अनुसरण करता है।

आउटपुट डिक्शनरी में dtype float32 और आकार [batch_size, num_classes] का "default" आउटपुट होता है। batch_size इनपुट के समान है, लेकिन ग्राफ़ निर्माण समय पर ज्ञात नहीं है। num_classes वर्गीकरण में वर्गों की संख्या है, जो इनपुट आकार से स्वतंत्र एक ज्ञात स्थिरांक है।

outputs["default"][i, c] इंडेक्स c के साथ कक्षा में उदाहरण i की सदस्यता की भविष्यवाणी करने वाला स्कोर उत्पन्न करता है।

यह अंतर्निहित वर्गीकरण पर निर्भर करता है कि क्या ये स्कोर सॉफ्टमैक्स (पारस्परिक रूप से अनन्य वर्गों के लिए), सिग्मॉइड (ऑर्थोगोनल कक्षाओं के लिए), या कुछ और के साथ उपयोग किए जाने के लिए हैं। मॉड्यूल प्रलेखन को इसका वर्णन करना चाहिए, और वर्ग सूचकांकों की परिभाषा का संदर्भ लेना चाहिए।

आउटपुट डिक्शनरी आगे के आउटपुट प्रदान कर सकती है, उदाहरण के लिए, मॉड्यूल के अंदर छिपी परतों की सक्रियता। उनकी चाबियाँ और मूल्य मॉड्यूल-निर्भर हैं। आर्किटेक्चर नाम के साथ आर्किटेक्चर-निर्भर कुंजियों को उपसर्ग करने की अनुशंसा की जाती है (उदाहरण के लिए, मध्यवर्ती परत "InceptionV3/Mixed_5c" को सबसे ऊपरी दृढ़ परत "InceptionV2/Mixed_5c" InceptionV2/Mixed_5c" के साथ भ्रमित करने से बचने के लिए)।

छवि इनपुट

यह सभी प्रकार के छवि मॉड्यूल और छवि हस्ताक्षरों के लिए सामान्य है।

एक हस्ताक्षर जो इनपुट के रूप में छवियों का एक बैच लेता है, उन्हें डीटाइप फ्लोट32 और आकार [ float32 [batch_size, height, width, 3] के घने 4-डी टेंसर के रूप में स्वीकार करता है, जिनके तत्व आरजीबी रंग के पिक्सेल के मान होते हैं जो कि श्रेणी के लिए सामान्यीकृत होते हैं [0, 1] . यह आपको tf.image.decode_*() इसके बाद tf.image.convert_image_dtype(..., tf.float32) से मिलता है।

छवियों के बिल्कुल एक (या एक प्रिंसिपल) इनपुट वाला एक मॉड्यूल इस इनपुट के लिए "images" नाम का उपयोग करता है।

मॉड्यूल किसी भी batch_size को स्वीकार करता है, और तदनुसार TensorInfo.tensor_shape के पहले आयाम को "अज्ञात" पर सेट करता है। अंतिम आयाम आरजीबी चैनलों की संख्या 3 के लिए तय किया गया है। height और width के आयाम इनपुट छवियों के अपेक्षित आकार के लिए तय किए गए हैं। (भविष्य का काम पूरी तरह से दृढ़ मॉड्यूल के लिए उस प्रतिबंध को हटा सकता है।)

मॉड्यूल के उपभोक्ताओं को सीधे आकार का निरीक्षण नहीं करना चाहिए, लेकिन मॉड्यूल या मॉड्यूल स्पेक पर हब.get_expected_image_size() पर कॉल करके आकार की जानकारी प्राप्त करनी चाहिए, और तदनुसार इनपुट छवियों का आकार बदलने की अपेक्षा की जाती है (आमतौर पर बैचिंग से पहले/दौरान)।

सादगी के लिए, TF-Hub मॉड्यूल Tensors के channel_last (या NHWC ) लेआउट का उपयोग करते channels_last , और इसे TensorFlow के ग्राफ़ ऑप्टिमाइज़र पर छोड़ देते हैं, यदि आवश्यक हो तो NCHW channels_first पर फिर से लिखें। यह डिफ़ॉल्ट रूप से TensorFlow संस्करण 1.7 के बाद से कर रहा है।