C++ लाइब्रेरी को समझना

माइक्रोकंट्रोलर C++ लाइब्रेरी के लिए TensorFlow Lite, TensorFlow रिपॉज़िटरी का हिस्सा है. इसे इस तरह से डिज़ाइन किया गया है कि यह आसानी से पढ़ा जा सके, इसमें बदलाव किया जा सकता है, और इसे अच्छी तरह से टेस्ट किया गया है. यह इंटिग्रेट करने में आसान है और सामान्य TensorFlow Lite के साथ काम करता है.

नीचे दिया गया दस्तावेज़ C++ लाइब्रेरी के बुनियादी स्ट्रक्चर के बारे में बताता है. साथ ही, अपना प्रोजेक्ट बनाने के बारे में भी जानकारी देता है.

फ़ाइल का स्ट्रक्चर

micro रूट डायरेक्ट्री का स्ट्रक्चर बहुत आसान है. हालांकि, यह TensorFlow के बड़े डेटा संग्रह के अंदर है, इसलिए हमने स्क्रिप्ट और पहले से जनरेट की गई प्रोजेक्ट फ़ाइलें बनाई हैं. ये फ़ाइलें एम्बेड किए गए अलग-अलग डेवलपमेंट एनवायरमेंट में, काम की सोर्स फ़ाइलों को अलग से उपलब्ध कराती हैं.

मुख्य फ़ाइलें

माइक्रोकंट्रोलर के लिए इंटरप्रेटर के लिए TensorFlow Lite का इस्तेमाल करने के लिए सबसे ज़रूरी फ़ाइलें, प्रोजेक्ट के रूट में मौजूद होती हैं. साथ ही, इन फ़ाइलों पर टेस्ट भी किए जाते हैं:

[`micro_mutable_op_resolver.h`](https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/micro_mutable_op_resolver.h)
can be used to provide the operations used by the interpreter to run the
model.
  • micro_error_reporter.h डीबग की जानकारी देता है.
  • micro_interpreter.h इसमें मॉडल मैनेज करने और चलाने के लिए कोड होता है.

सामान्य इस्तेमाल के बारे में जानने के लिए माइक्रोकंट्रोलर का इस्तेमाल शुरू करना देखें.

बिल्ड सिस्टम कुछ फ़ाइलों को प्लैटफ़ॉर्म के हिसाब से लागू करने की सुविधा देता है. ये प्लैटफ़ॉर्म के नाम वाली डायरेक्ट्री में मौजूद होते हैं, जैसे कि cortex-m.

कई अन्य डायरेक्ट्री मौजूद हैं, जिनमें शामिल हैं:

  • kernel, जिसमें कार्रवाई को लागू करने के तरीके और उससे जुड़ा कोड शामिल है.
  • tools, जिसमें बिल्ड टूल और उनका आउटपुट शामिल है.
  • examples, जिसमें सैंपल कोड होता है.

नया प्रोजेक्ट शुरू करें

हमारा सुझाव है कि नए प्रोजेक्ट के लिए, टेंप्लेट के तौर पर Hello World का उदाहरण इस्तेमाल करें. इस सेक्शन में दिए गए निर्देशों का पालन करके, अपनी पसंद के प्लैटफ़ॉर्म के लिए इसका वर्शन डाउनलोड किया जा सकता है.

Arduino लाइब्रेरी इस्तेमाल करें

अगर आपने Arduino इस्तेमाल किया है, तो Hello World का उदाहरण Arduino_TensorFlowLite Arduino लाइब्रेरी में शामिल किया गया है. इसे Arduino IDE और Arduino Create में मैन्युअल तरीके से इंस्टॉल किया जा सकता है.

लाइब्रेरी जोड़ने के बाद, File -> Examples पर जाएं. आपको TensorFlowLite:hello_world नाम की सूची के नीचे एक उदाहरण दिखेगा. इसे चुनें और उदाहरण लोड करने के लिए hello_world पर क्लिक करें. इसके बाद, उस उदाहरण की कॉपी सेव की जा सकती है और उसका इस्तेमाल अपने प्रोजेक्ट के आधार के तौर पर किया जा सकता है.

अन्य प्लैटफ़ॉर्म के लिए प्रोजेक्ट जनरेट करें

माइक्रोकंट्रोलर के लिए TensorFlow Lite, Makefile का इस्तेमाल करके ऐसे स्टैंडअलोन प्रोजेक्ट जनरेट कर सकता है जिनमें सभी ज़रूरी सोर्स फ़ाइलें शामिल होती हैं. मौजूदा समय में Keil, Make, और Mbed प्लैटफ़ॉर्म का इस्तेमाल किया जा रहा है.

इन प्रोजेक्ट को बनाने के लिए, TensorFlow/tflite-micro रिपॉज़िटरी का क्लोन बनाएं और यह कमांड चलाएं:

make -f tensorflow/lite/micro/tools/make/Makefile generate_projects

इसमें कुछ मिनट लगेंगे, क्योंकि इसे डिपेंडेंसी के लिए कुछ बड़े टूलचेन डाउनलोड करने होंगे. प्रोसेस पूरी होने के बाद, आपको gen/linux_x86_64/prj/ जैसे पाथ में कुछ फ़ोल्डर बनाए हुए दिखेंगे. इसका सटीक पाथ, आपके होस्ट के ऑपरेटिंग सिस्टम पर निर्भर करता है. इन फ़ोल्डर में जनरेट किए गए प्रोजेक्ट और सोर्स फ़ाइलें होती हैं.

निर्देश देने के बाद, आपको gen/linux_x86_64/prj/hello_world में Hello World के प्रोजेक्ट दिखेंगे. उदाहरण के लिए, hello_world/keil में Keil प्रोजेक्ट शामिल होगा.

टेस्ट चलाना

लाइब्रेरी बनाने और इसके सभी यूनिट टेस्ट चलाने के लिए, नीचे दिए गए कमांड का इस्तेमाल करें:

make -f tensorflow/lite/micro/tools/make/Makefile test

अलग-अलग टेस्ट चलाने के लिए, <test_name> को टेस्ट के नाम से बदलते हुए, नीचे दिए गए निर्देश का इस्तेमाल करें:

make -f tensorflow/lite/micro/tools/make/Makefile test_<test_name>

आपको प्रोजेक्ट की मेकफ़ाइल में टेस्ट के नाम मिल सकते हैं. उदाहरण के लिए, examples/hello_world/Makefile.inc नमस्ते World के उदाहरण के लिए टेस्ट के नाम बताता है.

बाइनरी बनाएं

किसी प्रोजेक्ट (जैसे, ऐप्लिकेशन) के लिए रन करने लायक बाइनरी बनाने के लिए, नीचे दिए गए निर्देश का इस्तेमाल करें. साथ ही, <project_name> को उस प्रोजेक्ट से बदलें जिसे आपको बनाना है:

make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin

उदाहरण के लिए, यह निर्देश नमस्ते दुनिया ऐप्लिकेशन के लिए एक बाइनरी बनाएगा:

make -f tensorflow/lite/micro/tools/make/Makefile hello_world_bin

डिफ़ॉल्ट रूप से, प्रोजेक्ट को होस्ट ऑपरेटिंग सिस्टम के लिए कंपाइल किया जाएगा. कोई दूसरा टारगेट आर्किटेक्चर बताने के लिए, TARGET= और TARGET_ARCH= का इस्तेमाल करें. इस उदाहरण में, जेनरिक कॉर्टेक्स-m0 के लिए Hello World का उदाहरण बनाने का तरीका बताया गया है:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=cortex_m_generic TARGET_ARCH=cortex-m0 hello_world_bin

कोई टारगेट तय होने पर, ओरिजनल कोड की जगह टारगेट के लिए खास सोर्स फ़ाइलों का इस्तेमाल किया जाएगा. उदाहरण के लिए, सबडायरेक्ट्री examples/hello_world/cortex_m_generic में, constants.cc और output_handler.cc फ़ाइलों को SparkFun Edge लागू करने की सुविधा शामिल है. इसका इस्तेमाल तब किया जाएगा, जब टारगेट cortex_m_generic के बारे में बताया गया हो.

आपको प्रोजेक्ट की मेकफ़ाइल में प्रोजेक्ट के नाम मिल सकते हैं. उदाहरण के लिए, examples/hello_world/Makefile.inc Hello World के उदाहरण के लिए बाइनरी नाम के बारे में बताता है.

ऑप्टिमाइज़ किए गए कर्नेल

tensorflow/lite/micro/kernels के रूट में मौजूद रेफ़रंस कर्नेल, पूरी तरह C/C++ में लागू किए जाते हैं. इनमें प्लैटफ़ॉर्म के हिसाब से हार्डवेयर ऑप्टिमाइज़ेशन शामिल नहीं किए जाते.

कर्नेल के ऑप्टिमाइज़ किए गए वर्शन, सबडायरेक्ट्री में दिए गए हैं. उदाहरण के लिए, kernels/cmsis-nn में कई ऑप्टिमाइज़ किए गए कर्नेल होते हैं, जो Arm की CMSIS-NN लाइब्रेरी का इस्तेमाल करते हैं.

ऑप्टिमाइज़ किए गए कर्नेल का इस्तेमाल करके प्रोजेक्ट जनरेट करने के लिए, इस कमांड का इस्तेमाल करें. साथ ही, <subdirectory_name> को ऑप्टिमाइज़ेशन वाली सबडायरेक्ट्री के नाम से बदलें:

make -f tensorflow/lite/micro/tools/make/Makefile TAGS=<subdirectory_name> generate_projects

अपने खुद के ऑप्टिमाइज़ेशन जोड़ने के लिए, उनके लिए एक नया सब-फ़ोल्डर बनाएं. हम नए ऑप्टिमाइज़ किए गए लागू करने के लिए पुल के अनुरोधों को बढ़ावा देते हैं.

Arduino लाइब्रेरी जनरेट करें

अगर आपको लाइब्रेरी का नया बिल्ड जनरेट करना है, तो TensorFlow के डेटा स्टोर करने की जगह से, इस स्क्रिप्ट को चलाएं:

./tensorflow/lite/micro/tools/ci_build/test_arduino.sh

आपको जो लाइब्रेरी बनानी है वह gen/arduino_x86_64/prj/tensorflow_lite.zip में देखी जा सकती है.

नए डिवाइसों पर पोर्ट करना

माइक्रोकंट्रोलर के लिए TensorFlow Lite को नए प्लैटफ़ॉर्म और डिवाइस पर पोर्ट करने से जुड़ी जानकारी micro/docs/new_platform_support.md में देखी जा सकती है.