बोर्ड पर डिप्लॉय करना और टेस्ट करना
एक ट्रेंड मॉडल से माइक्रोकंट्रोलर पर चलने वाले प्रोग्राम तक का सफ़र तय करें। फिर इसे असली डेटा पर टेस्ट करें, और पावर तथा प्राइवेसी के फ़ायदों को समझें।
60 सेकंड में
बोर्ड पर डिप्लॉय करना और टेस्ट करना
एक ट्रेंड मॉडल से माइक्रोकंट्रोलर पर चलने वाले प्रोग्राम तक का सफ़र तय करें। फिर इसे असली डेटा पर टेस्ट करें, और पावर तथा प्राइवेसी के फ़ायदों को समझें।
डिप्लॉयमेंट का फ़्लो
- 1
अपने कंप्यूटर पर ट्रेन करें
Python या किसी TinyML प्लेटफ़ॉर्म में, अपने फ़ीचर्स और लेबल्स के साथ। - 2
कन्वर्ट और क्वांटाइज़ करें
रिप्रजेंटेटिव डेटासेट का इस्तेमाल करके मॉडल को रनटाइम के फ़ॉर्मैट में बदलें (LiteRT के लिए, एक .tflite फ़ाइल), आम तौर पर पूरी तरह से int8 में। - 3
कंप्यूटर पर चेक करें
कन्वर्ट किए गए मॉडल को हेल्ड-आउट डेटा पर चलाकर देखें। एक्यूरेसी पहले जैसी ही रहनी चाहिए। - 4
इसे C में बदलें
मॉडल के बाइट्स को एक C array के रूप में सेव करें, ताकि यह फ़्लैश मेमोरी में प्रोग्राम का ही हिस्सा बन जाए। - 5
बोर्ड के लिए प्रोग्राम लिखें
सेंसर से डेटा पढ़ें, वही फ़ीचर्स कैलकुलेट करें, मॉडल चलाएं, और नतीजे के आधार पर काम करें। - 6
फ़्लैश करें और असली डेटा पर टेस्ट करें
बोर्ड पर अपलोड करें, फिर असली लोगों, जगहों और शोर-शराबे के बीच टेस्ट करें।
C array के रूप में मॉडल
xxd -i जैसा कमांड-लाइन टूल यह काम कर सकता है। नीचे दिया गया Python कोड कुछ बाइट्स के साथ यह विचार समझाता है।# 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)};")बोर्ड प्रोग्राम का एक स्केच
#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 सबक का एक प्रैक्टिकल रूप है। अगर फ़ीचर्स की कैलकुलेशन ट्रेनिंग से अलग तरीके से की जाती है, तो मॉडल को ऐसे इनपुट मिलते हैं जो उसने पहले कभी नहीं देखे होते।असली बोर्ड पर टेस्टिंग
- एक जैसा इनपुट, एक जैसा जवाब। बोर्ड पर कुछ विंडोज़ रिकॉर्ड करें, उन्हें अपने कंप्यूटर पर भी मॉडल में चलाएं, और आउटपुट की तुलना करें।
- असली लोग और असली जगहें। उन लोगों के साथ टेस्ट करें जो ट्रेनिंग डेटा में शामिल नहीं थे, असली कमरों, खेतों या मशीनों में।
- लंबे समय तक चलाना। इसे घंटों या दिनों तक चालू रखें और फ़ॉल्स अलार्म गिनें। जांचें कि यह क्रैश न हो या समय के साथ धीमा न पड़े।
- मेमोरी और टाइमिंग। जांचें कि वास्तव में कितने एरीना साइज़ की ज़रूरत है, और मॉडल को एक बार चलने में कितना समय लगता है। अगली विंडो आने से पहले इसका पूरा होना ज़रूरी है।
- एज केसेस। कम बैटरी, ढीला सेंसर, नया फ़ोन केस, बहुत गर्म या ठंडे दिन।
पावर और प्राइवेसी के फ़ायदे
| फ़ायदा | क्यों | इसे कैसे बनाए रखें |
|---|---|---|
| लंबी बैटरी लाइफ़ | चिप ज़्यादातर समय सोती (स्लीप मोड में) रहती है और केवल छोटे नतीजे भेजती है | ड्यूटी साइकिल; मॉडल को केवल तभी चलाएं जब कोई सस्ता चेक यह संकेत दे कि कुछ हो रहा हो |
| प्राइवेसी | रॉ ऑडियो, मोशन या तस्वीरें डिवाइस पर ही रह सकती हैं | डिफ़ॉल्ट रूप से रॉ डेटा अपलोड न करें; अगर सुधार के लिए डेटा जुटाना ज़रूरी है, तो साफ़ तौर पर पूछें और उसे कम से कम रखें |
| ऑफ़लाइन काम करता है | फैसला लेने के लिए किसी नेटवर्क की ज़रूरत नहीं होती | योजना बनाएं कि कनेक्शन न होने पर नतीजे कैसे दिखाए या स्टोर किए जाएंगे |
| तेज़ रिस्पॉन्स | सर्वर तक आने-जाने का कोई चक्कर नहीं | मॉडल को इतना छोटा रखें कि वह एक विंडो के समय के भीतर ही पूरा हो जाए |
और देखें और पढ़ें
लैब
एक TinyML प्रोजेक्ट के लिए डिप्लॉयमेंट और टेस्ट प्लान, और अगर आपके पास कोई बोर्ड है, तो उस पर चलता हुआ एक मॉडल।
समस्या
पहले सबक के अपने आइडिया कार्ड्स में से कोई एक आइडिया चुनें, या इस ट्रैक का एक्टिविटी मॉडल चुनें।
- बजट: Microcontrollers vs computers वाले अपने फ़ंक्शन्स का इस्तेमाल करके, जांचें कि क्या int8 वेट्स और वर्किंग मेमोरी आपके इस्तेमाल किए जा सकने वाले बोर्ड में फ़िट होते हैं। वे संख्याएं और वे सोर्स लिखें जहां से आपको बोर्ड के स्पेसिफ़िकेशन्स मिले।
- पाइपलाइन: ट्रेंड मॉडल से लेकर फ़्लैश किए गए बोर्ड तक के हर कदम की सूची बनाएं, और बताएं कि आप हर कदम के लिए किस टूल का इस्तेमाल करेंगे। टूल के मौजूदा डॉक्स ज़रूर देखें।
- मैच चेक: बताएं कि आप यह कैसे साबित करेंगे कि बोर्ड वही फ़ीचर्स और स्कोर निकालता है जो आपका Python कोड निकालता है।
- फ़ील्ड टेस्ट: एक टेस्ट प्लान लिखें: कौन, कहां, कितने समय के लिए, और आप हर घंटे होने वाले फ़ॉल्स अलार्म और छूटे हुए मामलों (misses) को कैसे गिनेंगे।
- पावर और प्राइवेसी: बताएं कि चिप कब स्लीप मोड में जाती है, कौन सा डेटा डिवाइस से बाहर जाता है, और यूज़र्स को क्या बताया जाता है।
अगर आपके पास कोई सपोर्टेड बोर्ड है: तो इसके ऑफ़िशियल 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%)।