TinyML: नन्हीं चिप्स पर AIमध्यमपाठ 2808 मिनट का पाठ

बोर्ड पर डिप्लॉय करना और टेस्ट करना

एक ट्रेंड मॉडल से माइक्रोकंट्रोलर पर चलने वाले प्रोग्राम तक का सफ़र तय करें। फिर इसे असली डेटा पर टेस्ट करें, और पावर तथा प्राइवेसी के फ़ायदों को समझें।

पाठ वीडियो में

60 सेकंड में

बोर्ड पर डिप्लॉय करना और टेस्ट करना

एक ट्रेंड मॉडल से माइक्रोकंट्रोलर पर चलने वाले प्रोग्राम तक का सफ़र तय करें। फिर इसे असली डेटा पर टेस्ट करें, और पावर तथा प्राइवेसी के फ़ायदों को समझें।

1/4
आसान शब्दों में
घर पर कोई रेसिपी लिखना एक बात है। उसे हॉस्टल की रसोई में एक छोटे स्टोव और कुछ बर्तनों के साथ पकाना दूसरी बात है। आप देखते हैं कि सब कुछ ठीक से आ जाए, आप उसे सचमुच पकाते हैं, और उसका स्वाद चखते हैं। मॉडल को डिप्लॉय करना अपनी रेसिपी को उस छोटी रसोई में ले जाने और नतीजे का स्वाद चखने जैसा ही है।

डिप्लॉयमेंट का फ़्लो

  1. 1

    अपने कंप्यूटर पर ट्रेन करें

    Python या किसी TinyML प्लेटफ़ॉर्म में, अपने फ़ीचर्स और लेबल्स के साथ।
  2. 2

    कन्वर्ट और क्वांटाइज़ करें

    रिप्रजेंटेटिव डेटासेट का इस्तेमाल करके मॉडल को रनटाइम के फ़ॉर्मैट में बदलें (LiteRT के लिए, एक .tflite फ़ाइल), आम तौर पर पूरी तरह से int8 में।
  3. 3

    कंप्यूटर पर चेक करें

    कन्वर्ट किए गए मॉडल को हेल्ड-आउट डेटा पर चलाकर देखें। एक्यूरेसी पहले जैसी ही रहनी चाहिए।
  4. 4

    इसे C में बदलें

    मॉडल के बाइट्स को एक C array के रूप में सेव करें, ताकि यह फ़्लैश मेमोरी में प्रोग्राम का ही हिस्सा बन जाए।
  5. 5

    बोर्ड के लिए प्रोग्राम लिखें

    सेंसर से डेटा पढ़ें, वही फ़ीचर्स कैलकुलेट करें, मॉडल चलाएं, और नतीजे के आधार पर काम करें।
  6. 6

    फ़्लैश करें और असली डेटा पर टेस्ट करें

    बोर्ड पर अपलोड करें, फिर असली लोगों, जगहों और शोर-शराबे के बीच टेस्ट करें।
Edge Impulse जैसे प्लेटफ़ॉर्म इनमें से ज़्यादातर काम आपके लिए कर सकते हैं और सपोर्टेड बोर्ड्स के लिए तैयार लाइब्रेरी या फ़र्मवेयर एक्सपोर्ट कर सकते हैं। इन्हें एक बार खुद अपने हाथों से करने से आपको यह समझने में मदद मिलती है कि वे टूल्स क्या करते हैं। चाहे जो भी तरीका अपनाएं, मौजूदा डॉक्स ज़रूर देखें: वर्शन बदलने पर फ़ाइल नाम, कमांड और API बदल जाते हैं।

C array के रूप में मॉडल

फ़ाइल सिस्टम न होने पर, मॉडल फ़ाइल को बाइट्स के रूप में सीधे प्रोग्राम में पेस्ट कर दिया जाता है। xxd -i जैसा कमांड-लाइन टूल यह काम कर सकता है। नीचे दिया गया Python कोड कुछ बाइट्स के साथ यह विचार समझाता है।
Python: turning model bytes into a C arraypython
# What "convert the model to a C array" means: the model file is just bytes.
# Here we use a few made-up bytes instead of a real .tflite file.
model_bytes = bytes([0x1C, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4C, 0x33, 0x14, 0x00, 0x20, 0x00])

lines = []
for i in range(0, len(model_bytes), 8):
    chunk = ", ".join(f"0x{b:02x}" for b in model_bytes[i:i + 8])
    lines.append("  " + chunk + ",")
print("alignas(16) const unsigned char g_model_data[] = {")
print("\n".join(lines))
print("};")
print(f"const unsigned int g_model_data_len = {len(model_bytes)};")

बोर्ड प्रोग्राम का एक स्केच

यह TensorFlow Lite for Microcontrollers के स्टाइल में लिखा गया एक आसान C++ स्केच है। यह असली बोर्ड के लिए है, ब्राउज़र के लिए नहीं। वर्शन के साथ फ़ंक्शन नाम और हेडर बदल जाते हैं, इसलिए अपने बोर्ड के मौजूदा ऑफ़िशियल उदाहरणों से शुरुआत करें।
C++ (for the board, not runnable here): run one window through the modelcpp
#include "tensorflow/lite/micro/micro_interpreter.h"
#include "tensorflow/lite/micro/micro_mutable_op_resolver.h"
#include "tensorflow/lite/schema/schema_generated.h"
#include "model_data.h"   // g_model_data: the C array made from the .tflite file

constexpr int kArenaSize = 20 * 1024;           // working memory; measure and adjust
alignas(16) static uint8_t tensor_arena[kArenaSize];

static tflite::MicroMutableOpResolver<3> resolver;  // only the layer types the model uses
static tflite::MicroInterpreter* interpreter = nullptr;

void setup_model() {
  const tflite::Model* model = tflite::GetModel(g_model_data);
  resolver.AddFullyConnected();
  resolver.AddRelu();
  resolver.AddSoftmax();
  static tflite::MicroInterpreter interp(model, resolver, tensor_arena, kArenaSize);
  interpreter = &interp;
  interpreter->AllocateTensors();                // fails if the arena is too small
}

int classify(const float* features, int n) {
  TfLiteTensor* input = interpreter->input(0);
  for (int i = 0; i < n; i++) {                  // float feature -> int8, same scale as training
    int q = (int)roundf(features[i] / input->params.scale) + input->params.zero_point;
    input->data.int8[i] = (int8_t)(q < -128 ? -128 : (q > 127 ? 127 : q));
  }
  if (interpreter->Invoke() != kTfLiteOk) return -1;
  TfLiteTensor* output = interpreter->output(0);
  int best = 0;
  for (int c = 1; c < output->dims->data[1]; c++)
    if (output->data.int8[c] > output->data.int8[best]) best = c;
  return best;                                   // index of the most likely class
}
नोट
classify में क्वांटाइज़ेशन स्टेप को देखें: बोर्ड इनपुट के स्केल और ज़ीरो पॉइंट का इस्तेमाल करके हर फ़्लोट फ़ीचर को int8 में बदलता है। यह Shrinking it to fit सबक का एक प्रैक्टिकल रूप है। अगर फ़ीचर्स की कैलकुलेशन ट्रेनिंग से अलग तरीके से की जाती है, तो मॉडल को ऐसे इनपुट मिलते हैं जो उसने पहले कभी नहीं देखे होते।

असली बोर्ड पर टेस्टिंग

  • एक जैसा इनपुट, एक जैसा जवाब। बोर्ड पर कुछ विंडोज़ रिकॉर्ड करें, उन्हें अपने कंप्यूटर पर भी मॉडल में चलाएं, और आउटपुट की तुलना करें।
  • असली लोग और असली जगहें। उन लोगों के साथ टेस्ट करें जो ट्रेनिंग डेटा में शामिल नहीं थे, असली कमरों, खेतों या मशीनों में।
  • लंबे समय तक चलाना। इसे घंटों या दिनों तक चालू रखें और फ़ॉल्स अलार्म गिनें। जांचें कि यह क्रैश न हो या समय के साथ धीमा न पड़े।
  • मेमोरी और टाइमिंग। जांचें कि वास्तव में कितने एरीना साइज़ की ज़रूरत है, और मॉडल को एक बार चलने में कितना समय लगता है। अगली विंडो आने से पहले इसका पूरा होना ज़रूरी है।
  • एज केसेस। कम बैटरी, ढीला सेंसर, नया फ़ोन केस, बहुत गर्म या ठंडे दिन।

पावर और प्राइवेसी के फ़ायदे

फ़ायदाक्योंइसे कैसे बनाए रखें
लंबी बैटरी लाइफ़चिप ज़्यादातर समय सोती (स्लीप मोड में) रहती है और केवल छोटे नतीजे भेजती हैड्यूटी साइकिल; मॉडल को केवल तभी चलाएं जब कोई सस्ता चेक यह संकेत दे कि कुछ हो रहा हो
प्राइवेसीरॉ ऑडियो, मोशन या तस्वीरें डिवाइस पर ही रह सकती हैंडिफ़ॉल्ट रूप से रॉ डेटा अपलोड न करें; अगर सुधार के लिए डेटा जुटाना ज़रूरी है, तो साफ़ तौर पर पूछें और उसे कम से कम रखें
ऑफ़लाइन काम करता हैफैसला लेने के लिए किसी नेटवर्क की ज़रूरत नहीं होतीयोजना बनाएं कि कनेक्शन न होने पर नतीजे कैसे दिखाए या स्टोर किए जाएंगे
तेज़ रिस्पॉन्ससर्वर तक आने-जाने का कोई चक्कर नहींमॉडल को इतना छोटा रखें कि वह एक विंडो के समय के भीतर ही पूरा हो जाए
सावधान रहें
डिवाइस पर चलने का मतलब यह नहीं है कि यह अपने आप प्राइवेट या सुरक्षित हो गया। जिसके हाथ में बोर्ड होगा, वह फ़र्मवेयर और मॉडल को पढ़ सकता है। जो नतीजे आप भेजते हैं, वे भी लोगों के बारे में कुछ न कुछ बताते ही हैं। आपके द्वारा भेजे जाने वाले किसी भी डेटा को सुरक्षित रखें, और यूज़र्स के प्रति ईमानदार रहें कि डिवाइस क्या डिटेक्ट करता है।
इसे आज़माएं। C++ स्केच को पढ़ें और ऐसी तीन चीज़ें ढूंढें जो आपकी Python ट्रेनिंग से हूबहू मेल खानी चाहिए। (संकेत: फ़ीचर्स, इनपुट स्केल और क्लासों के क्रम के बारे में सोचें।)

और देखें और पढ़ें

लैब

एक TinyML प्रोजेक्ट के लिए डिप्लॉयमेंट और टेस्ट प्लान, और अगर आपके पास कोई बोर्ड है, तो उस पर चलता हुआ एक मॉडल।

~45 min

समस्या

पहले सबक के अपने आइडिया कार्ड्स में से कोई एक आइडिया चुनें, या इस ट्रैक का एक्टिविटी मॉडल चुनें।

  1. बजट: Microcontrollers vs computers वाले अपने फ़ंक्शन्स का इस्तेमाल करके, जांचें कि क्या int8 वेट्स और वर्किंग मेमोरी आपके इस्तेमाल किए जा सकने वाले बोर्ड में फ़िट होते हैं। वे संख्याएं और वे सोर्स लिखें जहां से आपको बोर्ड के स्पेसिफ़िकेशन्स मिले।
  2. पाइपलाइन: ट्रेंड मॉडल से लेकर फ़्लैश किए गए बोर्ड तक के हर कदम की सूची बनाएं, और बताएं कि आप हर कदम के लिए किस टूल का इस्तेमाल करेंगे। टूल के मौजूदा डॉक्स ज़रूर देखें।
  3. मैच चेक: बताएं कि आप यह कैसे साबित करेंगे कि बोर्ड वही फ़ीचर्स और स्कोर निकालता है जो आपका Python कोड निकालता है।
  4. फ़ील्ड टेस्ट: एक टेस्ट प्लान लिखें: कौन, कहां, कितने समय के लिए, और आप हर घंटे होने वाले फ़ॉल्स अलार्म और छूटे हुए मामलों (misses) को कैसे गिनेंगे।
  5. पावर और प्राइवेसी: बताएं कि चिप कब स्लीप मोड में जाती है, कौन सा डेटा डिवाइस से बाहर जाता है, और यूज़र्स को क्या बताया जाता है।

अगर आपके पास कोई सपोर्टेड बोर्ड है: तो इसके ऑफ़िशियल TinyML उदाहरण को फ़ॉलो करें (उदाहरण के लिए जेस्चर या कीवर्ड वाला उदाहरण), इसे चलाएं, फिर मॉडल को अपने मॉडल से बदलें और अपना टेस्ट प्लान चलाएं।

आपका काम तब पूरा होगा जब

कठिन सवाल

उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।

Q1int8 कन्वर्ज़न के बाद Python में आपके मॉडल का स्कोर अच्छा है, लेकिन बोर्ड पर हर विंडो को एक ही क्लास मिलती है। इसके तीन संभावित कारण बताएं।दिखाएं

पहला, इनपुट उस तरह quantised नहीं है जैसा मॉडल उम्मीद करता है: गलत scale या zero point, या int8 tensor में लिखे गए floats। दूसरा, features अलग हैं: अलग units, axis order, window length या sampling rate। तीसरा, इनपुट buffer भरा नहीं जा रहा है (उदाहरण के लिए sensor शुरू नहीं किया गया है, इसलिए हर window में सिर्फ शून्य हैं)। बोर्ड पर एक window रिकॉर्ड करें, इसके features और इनपुट tensor प्रिंट करें, और कदम-दर-कदम Python से इसकी तुलना करें।

Q2एक यूज़र पूछता है: "क्या आपकी always-listening डिवाइस मुझे रिकॉर्ड करती है?" आप इसे कैसे डिज़ाइन करेंगे ताकि आप ईमानदारी से 'नहीं' जवाब दे सकें?दिखाएं

ऑडियो को केवल RAM के एक छोटे rolling buffer में रखें जो लगातार overwrite होता रहे, और इसे कभी भी flash में न लिखें या भेजें। डिफ़ॉल्ट रूप से सिर्फ इवेंट ("wake word detected") भेजें और कुछ नहीं। अगर आप मॉडल को बेहतर बनाने के लिए रिकॉर्डिंग चाहते हैं, तो इसे एक अलग, साफ़ तौर पर समझाया गया opt-in बनाएं। फिर इसे यूज़र्स को आसान शब्दों में समझाएं, और पक्का करें कि firmware वाकई वही करता है जो आप कहते हैं।

जारी रखने के लिए कृपया साइन इन करें।

अक्सर पूछे जाने वाले सवाल

मुझे सबसे पहले कौन सा बोर्ड खरीदना चाहिए?

ऐसा बोर्ड चुनें जिसे आपका चुना हुआ टूल ऑफ़िशियली सपोर्ट करता हो, जिसमें आपकी ज़रूरत का सेंसर पहले से मौजूद हो (जैसे मोशन सेंसर या माइक्रोफ़ोन), और अच्छे उदाहरण उपलब्ध हों। कई मेकर बोर्ड इस कसौटी पर खरे उतरते हैं। खरीदने से पहले टूल की सपोर्टेड बोर्ड्स वाली मौजूदा लिस्ट ज़रूर देख लें।

अगर मॉडल मेरे बोर्ड में फ़िट न हो तो क्या करें?

इस ट्रैक में पीछे जाकर दोबारा काम करें: कम फ़ीचर्स या छोटा मॉडल इस्तेमाल करें, पक्का करें कि यह पूरी तरह int8 हो, इनपुट बफ़र्स को छोटा करें, और केवल वही ऑपरेशन्स शामिल करें जिनका मॉडल इस्तेमाल करता है। अगर यह फिर भी फ़िट नहीं होता है, तो ज़्यादा मेमोरी वाला बोर्ड लेना ही सही हल हो सकता है।

मैं कैसे देखूं कि मॉडल बोर्ड पर क्या कर रहा है?

टेस्टिंग के दौरान अपने कंप्यूटर के सीरियल कनेक्शन पर स्कोर प्रिंट करें। कई बोर्ड्स में एक LED भी होती है जिसे आप हर क्लास के लिए जला सकते हैं। फ़ाइनल वर्शन में भारी-भरकम डिबग प्रिंटिंग हटा दें, क्योंकि इसमें पावर और समय खर्च होता है।

मैं बाद में मॉडल को कैसे अपडेट करूं?

आप नए मॉडल एरे के साथ एक नया प्रोग्राम फ़्लैश करते हैं। कुछ प्रोडक्ट्स वायरलेस लिंक के ज़रिए अपडेट सपोर्ट करते हैं। एक टेस्ट सेट अपने पास रखें ताकि फ़ील्ड में मौजूद डिवाइसेज़ को अपडेट करने से पहले आप यह साबित कर सकें कि नया मॉडल वाकई बेहतर है।

पाठ का टेस्ट

5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।

टेस्ट देने और अपनी प्रोग्रेस सेव करने के लिए साइन इन करें