मॉडल बनाएं और कनवर्ट करें

माइक्रोकंट्रोलर्स में सीमित रैम और स्टोरेज होता है, जो मशीन लर्निंग मॉडल के आकार पर प्रतिबंध लगाता है। इसके अलावा, माइक्रोकंट्रोलर्स के लिए टेन्सरफ्लो लाइट वर्तमान में संचालन के सीमित उपसमूह का समर्थन करता है, इसलिए सभी मॉडल आर्किटेक्चर संभव नहीं हैं।

यह दस्तावेज़ माइक्रोकंट्रोलर्स पर चलाने के लिए TensorFlow मॉडल को परिवर्तित करने की प्रक्रिया की व्याख्या करता है। यह समर्थित संचालन की रूपरेखा भी प्रस्तुत करता है और सीमित मेमोरी में फिट होने के लिए एक मॉडल को डिजाइन करने और प्रशिक्षित करने पर कुछ मार्गदर्शन देता है।

किसी मॉडल के निर्माण और रूपांतरण के शुरू से अंत तक चलने योग्य उदाहरण के लिए, हैलो वर्ल्ड उदाहरण देखें।

मॉडल रूपांतरण

प्रशिक्षित TensorFlow मॉडल को माइक्रोकंट्रोलर्स पर चलाने के लिए परिवर्तित करने के लिए, आपको TensorFlow Lite कनवर्टर Python API का उपयोग करना चाहिए। यह मॉडल को FlatBuffer में बदल देगा, मॉडल का आकार कम कर देगा, और इसे TensorFlow Lite संचालन का उपयोग करने के लिए संशोधित कर देगा।

सबसे छोटा संभव मॉडल आकार प्राप्त करने के लिए, आपको प्रशिक्षण के बाद परिमाणीकरण का उपयोग करने पर विचार करना चाहिए।

C सरणी में कनवर्ट करें

कई माइक्रोकंट्रोलर प्लेटफ़ॉर्म में मूल फ़ाइल सिस्टम समर्थन नहीं होता है। अपने प्रोग्राम से किसी मॉडल का उपयोग करने का सबसे आसान तरीका इसे सी सरणी के रूप में शामिल करना और इसे अपने प्रोग्राम में संकलित करना है।

निम्नलिखित यूनिक्स कमांड एक C स्रोत फ़ाइल उत्पन्न करेगा जिसमें char सरणी के रूप में TensorFlow Lite मॉडल शामिल होगा:

xxd -i converted_model.tflite > model_data.cc

आउटपुट निम्न के जैसा दिखेगा:

unsigned char converted_model_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  // <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;

एक बार जब आप फ़ाइल तैयार कर लेते हैं, तो आप इसे अपने प्रोग्राम में शामिल कर सकते हैं। एम्बेडेड प्लेटफ़ॉर्म पर बेहतर मेमोरी दक्षता के लिए सरणी घोषणा को const में बदलना महत्वपूर्ण है।

अपने प्रोग्राम में किसी मॉडल को कैसे शामिल करें और उपयोग करें, इसके उदाहरण के लिए, हैलो वर्ल्ड उदाहरण में hello_world_test.cc देखें।

मॉडल वास्तुकला और प्रशिक्षण

माइक्रोकंट्रोलर्स पर उपयोग के लिए एक मॉडल डिजाइन करते समय, मॉडल के आकार, कार्यभार और उपयोग किए जाने वाले संचालन पर विचार करना महत्वपूर्ण है।

मॉडल का आकार

एक मॉडल इतना छोटा होना चाहिए कि वह आपके लक्ष्य डिवाइस की मेमोरी में आपके बाकी प्रोग्राम के साथ बाइनरी और रनटाइम दोनों में फिट हो सके।

एक छोटा मॉडल बनाने के लिए, आप अपने आर्किटेक्चर में कम और छोटी परतों का उपयोग कर सकते हैं। हालाँकि, छोटे मॉडलों में अंडरफ़िटिंग से पीड़ित होने की अधिक संभावना है। इसका मतलब है कि कई समस्याओं के लिए सबसे बड़े मॉडल का प्रयास करना और उपयोग करना समझ में आता है जो मेमोरी में फिट होगा। हालाँकि, बड़े मॉडलों का उपयोग करने से प्रोसेसर पर कार्यभार भी बढ़ जाएगा।

कार्यभार

मॉडल के आकार और जटिलता का कार्यभार पर प्रभाव पड़ता है। बड़े, जटिल मॉडल के परिणामस्वरूप उच्च कर्तव्य चक्र हो सकता है, जिसका अर्थ है कि आपके डिवाइस का प्रोसेसर काम करने में अधिक समय और निष्क्रिय रहने में कम समय व्यतीत कर रहा है। इससे बिजली की खपत और ताप उत्पादन में वृद्धि होगी, जो आपके आवेदन के आधार पर एक समस्या हो सकती है।

प्रचालन समर्थन

माइक्रोकंट्रोलर्स के लिए TensorFlow Lite वर्तमान में TensorFlow संचालन के एक सीमित उपसमूह का समर्थन करता है, जो मॉडल आर्किटेक्चर को प्रभावित करता है जिसे चलाना संभव है। हम संदर्भ कार्यान्वयन और विशिष्ट आर्किटेक्चर के लिए अनुकूलन दोनों के संदर्भ में ऑपरेशन समर्थन के विस्तार पर काम कर रहे हैं।

समर्थित संचालन को फ़ाइल micro_mutable_ops_resolver.h में देखा जा सकता है

,

माइक्रोकंट्रोलर्स में सीमित रैम और स्टोरेज होता है, जो मशीन लर्निंग मॉडल के आकार पर प्रतिबंध लगाता है। इसके अलावा, माइक्रोकंट्रोलर्स के लिए टेन्सरफ्लो लाइट वर्तमान में संचालन के सीमित उपसमूह का समर्थन करता है, इसलिए सभी मॉडल आर्किटेक्चर संभव नहीं हैं।

यह दस्तावेज़ माइक्रोकंट्रोलर्स पर चलाने के लिए TensorFlow मॉडल को परिवर्तित करने की प्रक्रिया की व्याख्या करता है। यह समर्थित संचालन की रूपरेखा भी प्रस्तुत करता है और सीमित मेमोरी में फिट होने के लिए एक मॉडल को डिजाइन करने और प्रशिक्षित करने पर कुछ मार्गदर्शन देता है।

किसी मॉडल के निर्माण और रूपांतरण के शुरू से अंत तक चलने योग्य उदाहरण के लिए, हैलो वर्ल्ड उदाहरण देखें।

मॉडल रूपांतरण

प्रशिक्षित TensorFlow मॉडल को माइक्रोकंट्रोलर्स पर चलाने के लिए परिवर्तित करने के लिए, आपको TensorFlow Lite कनवर्टर Python API का उपयोग करना चाहिए। यह मॉडल को FlatBuffer में बदल देगा, मॉडल का आकार कम कर देगा, और इसे TensorFlow Lite संचालन का उपयोग करने के लिए संशोधित कर देगा।

सबसे छोटा संभव मॉडल आकार प्राप्त करने के लिए, आपको प्रशिक्षण के बाद परिमाणीकरण का उपयोग करने पर विचार करना चाहिए।

C सरणी में कनवर्ट करें

कई माइक्रोकंट्रोलर प्लेटफ़ॉर्म में मूल फ़ाइल सिस्टम समर्थन नहीं होता है। अपने प्रोग्राम से किसी मॉडल का उपयोग करने का सबसे आसान तरीका इसे सी सरणी के रूप में शामिल करना और इसे अपने प्रोग्राम में संकलित करना है।

निम्नलिखित यूनिक्स कमांड एक C स्रोत फ़ाइल उत्पन्न करेगा जिसमें char सरणी के रूप में TensorFlow Lite मॉडल शामिल होगा:

xxd -i converted_model.tflite > model_data.cc

आउटपुट निम्न के जैसा दिखेगा:

unsigned char converted_model_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  // <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;

एक बार जब आप फ़ाइल तैयार कर लेते हैं, तो आप इसे अपने प्रोग्राम में शामिल कर सकते हैं। एम्बेडेड प्लेटफ़ॉर्म पर बेहतर मेमोरी दक्षता के लिए सरणी घोषणा को const में बदलना महत्वपूर्ण है।

अपने प्रोग्राम में किसी मॉडल को कैसे शामिल करें और उपयोग करें, इसके उदाहरण के लिए, हैलो वर्ल्ड उदाहरण में hello_world_test.cc देखें।

मॉडल वास्तुकला और प्रशिक्षण

माइक्रोकंट्रोलर्स पर उपयोग के लिए एक मॉडल डिजाइन करते समय, मॉडल के आकार, कार्यभार और उपयोग किए जाने वाले संचालन पर विचार करना महत्वपूर्ण है।

मॉडल का आकार

एक मॉडल इतना छोटा होना चाहिए कि वह आपके लक्ष्य डिवाइस की मेमोरी में आपके बाकी प्रोग्राम के साथ बाइनरी और रनटाइम दोनों में फिट हो सके।

एक छोटा मॉडल बनाने के लिए, आप अपने आर्किटेक्चर में कम और छोटी परतों का उपयोग कर सकते हैं। हालाँकि, छोटे मॉडलों में अंडरफ़िटिंग से पीड़ित होने की अधिक संभावना है। इसका मतलब है कि कई समस्याओं के लिए सबसे बड़े मॉडल का प्रयास करना और उपयोग करना समझ में आता है जो मेमोरी में फिट होगा। हालाँकि, बड़े मॉडलों का उपयोग करने से प्रोसेसर पर कार्यभार भी बढ़ जाएगा।

कार्यभार

मॉडल के आकार और जटिलता का कार्यभार पर प्रभाव पड़ता है। बड़े, जटिल मॉडल के परिणामस्वरूप उच्च कर्तव्य चक्र हो सकता है, जिसका अर्थ है कि आपके डिवाइस का प्रोसेसर काम करने में अधिक समय और निष्क्रिय रहने में कम समय व्यतीत कर रहा है। इससे बिजली की खपत और ताप उत्पादन में वृद्धि होगी, जो आपके आवेदन के आधार पर एक समस्या हो सकती है।

प्रचालन समर्थन

माइक्रोकंट्रोलर्स के लिए TensorFlow Lite वर्तमान में TensorFlow संचालन के एक सीमित उपसमूह का समर्थन करता है, जो मॉडल आर्किटेक्चर को प्रभावित करता है जिसे चलाना संभव है। हम संदर्भ कार्यान्वयन और विशिष्ट आर्किटेक्चर के लिए अनुकूलन दोनों के संदर्भ में ऑपरेशन समर्थन के विस्तार पर काम कर रहे हैं।

समर्थित संचालन को फ़ाइल micro_mutable_ops_resolver.h में देखा जा सकता है