विषयसूची:

K210 बोर्डों और Arduino IDE/Micropython के साथ छवि पहचान: 6 चरण (चित्रों के साथ)
K210 बोर्डों और Arduino IDE/Micropython के साथ छवि पहचान: 6 चरण (चित्रों के साथ)

वीडियो: K210 बोर्डों और Arduino IDE/Micropython के साथ छवि पहचान: 6 चरण (चित्रों के साथ)

वीडियो: K210 बोर्डों और Arduino IDE/Micropython के साथ छवि पहचान: 6 चरण (चित्रों के साथ)
वीडियो: Live stream from anywhere| ESP32-CAM Live Video Streaming through Firebase Realtime Database 2024, जून
Anonim
Image
Image

मैंने पहले ही एक लेख लिखा था कि सिपेड मैक्स बिट पर ओपनएमवी डेमो कैसे चलाया जाए और इस बोर्ड के साथ ऑब्जेक्ट डिटेक्शन डेमो का एक वीडियो भी किया। लोगों द्वारा पूछे गए कई प्रश्नों में से एक है - मैं किसी ऐसी वस्तु को कैसे पहचान सकता हूँ जिसके लिए तंत्रिका नेटवर्क प्रशिक्षित नहीं है? दूसरे शब्दों में अपनी खुद की इमेज क्लासिफायरियर कैसे बनाएं और इसे हार्डवेयर एक्सेलेरेशन के साथ कैसे चलाएं।

यह एक समझने योग्य प्रश्न है, क्योंकि आपकी परियोजना के लिए आपको शायद कुछ सामान्य वस्तुओं, जैसे बिल्लियों और कुत्तों और हवाई जहाज को पहचानने की आवश्यकता नहीं है। आप कुछ विशिष्ट पहचानना चाहते हैं, उदाहरण के लिए, उस स्वचालित पालतू दरवाजे के लिए कुत्ते की नस्ल, या छँटाई के लिए एक पौधे की प्रजाति, या कोई अन्य निकास अनुप्रयोग जिसके बारे में आप सोच सकते हैं!

तुम मुझे मिल गए! इस लेख में मैं आपको सिखाऊंगा कि केरस में ट्रांसफर लर्निंग के साथ अपना खुद का कस्टम इमेज क्लासिफायर कैसे बनाया जाए, प्रशिक्षित मॉडल को.kmodel फॉर्मेट में बदलें और इसे माइक्रोपाइथन का उपयोग करके सिपेड बोर्ड (कोई भी बोर्ड, बिट / डॉक या गो हो सकता है) पर चलाएं। अरुडिनो आईडीई। और केवल आपकी कल्पना ही उन कार्यों की सीमा होगी जो आप इस ज्ञान के साथ कर सकते हैं।

अद्यतन मई २०२०: K210 बोर्डों के साथ छवि पहचान पर मेरा लेख और वीडियो अभी भी बहुत लोकप्रिय है और YouTube और Google पर शीर्ष परिणामों के बीच, मैंने AI के लिए aXeleRate, केरस-आधारित ढांचे के बारे में जानकारी शामिल करने के लिए लेख को अपडेट करने का निर्णय लिया। किनारे मैं विकसित।

aXeleRate, अनिवार्य रूप से, उन लिपियों के संग्रह पर आधारित है जिनका उपयोग मैंने इमेज रिकग्निशन/ऑब्जेक्ट डिटेक्शन मॉडल के प्रशिक्षण के लिए किया था - एक एकल फ्रेमवर्क में संयुक्त और Google Colab पर वर्कफ़्लो के लिए अनुकूलित। यह उपयोग करने के लिए अधिक सुविधाजनक है और अधिक अद्यतित है।

लेख के पुराने संस्करण के लिए, आप इसे अभी भी steemit.com पर देख सकते हैं।

चरण 1: सीएनएन और ट्रांसफर लर्निंग: कुछ सिद्धांत

सीएनएन और ट्रांसफर लर्निंग: कुछ थ्योरी
सीएनएन और ट्रांसफर लर्निंग: कुछ थ्योरी

कन्वेन्शनल न्यूरल नेटवर्क्स या सीएनएन डीप न्यूरल नेटवर्क्स का एक वर्ग है, जो आमतौर पर विज़ुअल इमेजरी के विश्लेषण के लिए लागू होता है। इस विषय पर इंटरनेट पर बहुत सारा साहित्य है और मैं लेख के अंतिम भाग में कुछ लिंक दूंगा। संक्षेप में, आप छवि पर लागू होने वाले फिल्टर की एक श्रृंखला के रूप में सीएनएन के बारे में सोच सकते हैं, प्रत्येक फिल्टर छवि में एक विशिष्ट विशेषता की तलाश में है - निचली दृढ़ परतों पर विशेषताएं आमतौर पर रेखाएं और सरल आकार होती हैं और उच्च परतों पर विशेषताएं होती हैं अधिक विशिष्ट हो सकता है, उदाहरण के लिए शरीर के अंग, विशिष्ट बनावट, जानवरों या पौधों के अंग, आदि। कुछ निश्चित विशेषताओं की उपस्थिति हमें एक सुराग दे सकती है कि छवि में वस्तु क्या हो सकती है। मूंछें, दो आंखें और एक काली नाक? बिल्ली होना चाहिए! हरे पत्ते, एक पेड़ का तना? एक पेड़ लगता है!

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

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

कमाल लगता है, है ना? आइए देखें कि इसे कैसे लागू किया जाए।

चरण 2: अपना पर्यावरण तैयार करें

अपना पर्यावरण तैयार करें
अपना पर्यावरण तैयार करें

AXeleRate का उपयोग करने के दो तरीके हैं: स्थानीय रूप से Ubuntu मशीन पर या Google Colab में चलाना। Google Colab में चलाने के लिए, इस उदाहरण पर एक नज़र डालें:

छवि वर्गीकरण कोलाब नोटबुक

अपने मॉडल को स्थानीय रूप से प्रशिक्षित करना और इसे हार्डवेयर त्वरण के साथ उपयोग करने के लिए निर्यात करना भी अब बहुत आसान है।

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

आइए मिनिकोंडा को स्थापित करके शुरू करें, जो कि पायथन के लिए पर्यावरण प्रबंधक है। हम अलग-थलग वातावरण बनाएंगे, इसलिए हम गलती से आपके सिस्टम पायथन वातावरण में कुछ भी नहीं बदलेंगे।

यहां इंस्टॉलर डाउनलोड करें

स्थापना पूर्ण होने के बाद, एक नया वातावरण बनाएँ:

conda create -n ml python=3.7

आइए नए परिवेश को सक्रिय करें

कोंडा सक्रिय एमएल

आपके बैश शेल से पहले एक उपसर्ग पर्यावरण के नाम के साथ दिखाई देगा, यह दर्शाता है कि आप अभी उस वातावरण में काम कर रहे हैं।

चरण 3: AXeleRate स्थापित करें और परीक्षण चलाएँ

AXeleRate स्थापित करें और परीक्षण चलाएँ
AXeleRate स्थापित करें और परीक्षण चलाएँ

के साथ अपने स्थानीय मशीन पर aXeleRate स्थापित करें

पाइप स्थापित करें git+https://github.com/AIWintermuteAI/aXeleRate

उदाहरण डाउनलोड करने के लिए चलाएँ:

गिट क्लोन

आप aXeleRate फ़ोल्डर में test_training.py के साथ त्वरित परीक्षण चला सकते हैं। यह प्रत्येक मॉडल प्रकार के लिए प्रशिक्षण और अनुमान चलाएगा, प्रशिक्षित मॉडल को बचाएगा और परिवर्तित करेगा। चूंकि यह केवल 5 युगों के लिए प्रशिक्षण है और डेटासेट बहुत छोटा है, आप उपयोगी मॉडल प्राप्त करने में सक्षम नहीं होंगे, लेकिन यह स्क्रिप्ट केवल त्रुटियों की अनुपस्थिति की जांच के लिए है।

चरण 4: मॉडल को फिर से प्रशिक्षित करें, केरस मॉडल को.kmodel में बदलें

मॉडल को फिर से प्रशिक्षित करें, केरस मॉडल को.kmodel में बदलें
मॉडल को फिर से प्रशिक्षित करें, केरस मॉडल को.kmodel में बदलें

इस खिलौने के उदाहरण के लिए हम सांता क्लॉज़ और अरुडिनो ऊनो को पहचानने के लिए मॉडल को प्रशिक्षित करेंगे। जाहिर है आप अन्य वर्ग चुन सकते हैं। डेटासेट यहाँ से डाउनलोड करें। कॉन्फिग फोल्डर में क्लासिफायर.जेसन फाइल की एक कॉपी बनाएं, फिर इसे स्क्रीनशॉट में कॉन्फिग फाइल की तरह ही बदलें - सुनिश्चित करें कि ट्रेनिंग और वेलिडेशन फोल्डर का पाथ सही है!

AXeleRate फ़ोल्डर से निम्न आदेश चलाएँ:

अजगर axelerate/train.py - c configs/santa_uno.json

प्रशिक्षण शुरू होगा। यदि सत्यापन सटीकता (हमारी सत्यापन मीट्रिक) 20 युगों के लिए नहीं सुधर रही है, तो प्रशिक्षण समय से पहले बंद हो जाएगा। हर बार सत्यापन सटीकता में सुधार होता है, मॉडल प्रोजेक्ट फ़ोल्डर में सहेजा जाता है। प्रशिक्षण समाप्त होने के बाद, aXeleRate स्वचालित रूप से सर्वश्रेष्ठ मॉडल को निर्दिष्ट प्रारूपों में परिवर्तित करता है - आप अभी तक "tflite", "k210" या "edgetpu" चुन सकते हैं।

चरण 5: मॉडल को सिपेड मैक्स बिट पर चलाएं

मॉडल को सिपेड मैक्स बिट पर चलाएं
मॉडल को सिपेड मैक्स बिट पर चलाएं
मॉडल को सिपेड मैक्स बिट पर चलाएं
मॉडल को सिपेड मैक्स बिट पर चलाएं
मॉडल को सिपेड मैक्स बिट पर चलाएं
मॉडल को सिपेड मैक्स बिट पर चलाएं

अब आपके पास सिपेड मैक्स हार्डवेयर पर मॉडल को चलाने के दो तरीके हैं: माइक्रोपीथॉन फर्मवेयर और अरुडिनो आईडीई। माइक्रोपायथन हार्डवेयर का उपयोग करना आसान है, लेकिन यह उपलब्ध मेमोरी के महत्वपूर्ण हिस्से पर कब्जा कर लेता है, इसलिए मॉडल के लिए कम जगह बची है। Arduino IDE मूल रूप से C कोड है, जो बहुत अधिक कुशल है और इसमें छोटी मेमोरी फ़ुटप्रिंट है। मेरा मॉडल सिर्फ 1.9Mb है, इसलिए दोनों विकल्प इसके लिए काम करते हैं। आप Micropython के साथ 2.9 Mb जितने बड़े मॉडल का उपयोग कर सकते हैं, किसी भी बड़ी चीज़ के लिए आपको Arduino IDE का उपयोग करने पर विचार करना होगा।

OpenMV IDE को यहाँ से डाउनलोड करें और न्यूनतम micropython फर्मवेयर यहाँ से डाउनलोड करें।

फर्मवेयर को kflash_gui टूल से बर्न करें। आप प्रशिक्षित मॉडल को फ्लैश करने के लिए बर्न करना भी चुन सकते हैं, जैसा कि स्क्रीनशॉट में दिखाया गया है। या इसे एसडी कार्ड में कॉपी करें (उस स्थिति में.kmodel को एसडी कार्ड के रूट पर कॉपी करें और एसडी कार्ड को सिपेड मैक्स बिट में डालें)

ओपनएमवी आईडीई खोलें और कनेक्ट बटन दबाएं। example_scripts फ़ोल्डर से santa_uno.py स्क्रिप्ट खोलें और स्टार्ट बटन दबाएं। आप कैमरे से एक लाइव स्ट्रीम देख रहे होंगे और यदि आप सीरियल टर्मिनल खोलते हैं तो आप आत्मविश्वास स्कोर के साथ शीर्ष छवि पहचान परिणाम प्राप्त करेंगे!

Arduino IDE के साथ प्रयोग करने के लिए, सबसे पहले आपको Arduino IDE में सिपेड बोर्ड जोड़ने की प्रक्रिया का पालन करना होगा, जिसे यहां प्रलेखित किया गया है। आपका Arduino IDE संस्करण कम से कम 1.8.12 होना चाहिए। आपके द्वारा बोर्ड जोड़ने के बाद, mobilenet_v1_transfer_learning.ino स्केच खोलें और इसे सिपेड मैक्स बिट पर अपलोड करें। एसडी कार्ड पर मॉडल का नाम "मॉडल" में बदलें (या इस नाम से एक कॉपी बनाएं)। आप name.cpp में लेबल के नाम बदल सकते हैं। यह शीर्ष छवि पहचान परिणाम के साथ सिपेड मैक्स स्क्रीन पर लाइव कैमरा स्ट्रीम दिखाएगा।

चरण 6: निष्कर्ष

सीएनएन और ट्रांसफर लर्निंग के विषय पर पढ़ने के लिए यहां कुछ और सामग्री दी गई है:

Mobilenet और Keras का उपयोग करके ट्रांसफर लर्निंग ट्रांसफर लर्निंग की एक बेहतरीन व्याख्या, यह ट्यूटोरियल उस लेख के कोड के संशोधित संस्करण का उपयोग करता है।

बिल्लियों और कुत्तों और दृढ़ तंत्रिका नेटवर्क सीएनएन के पीछे मूल बातें बताते हैं और कुछ फिल्टर की कल्पना करते हैं। बिल्लियों के साथ!

ट्रेन, कनवर्ट करें, मोबाइलनेट को सिपेड मैक्सपी और मैक्सडुइनो पर चलाएं! मोबाइलनेट 1000 कक्षाओं को शुरू से कैसे प्रशिक्षित किया जाए, इस पर सिपेड टीम का एक ट्यूटोरियल (कोई ट्रांसफर लर्निंग नहीं)। आप उनके पूर्व-प्रशिक्षित मॉडल को डाउनलोड कर सकते हैं और इसे आजमा सकते हैं!

आशा है कि आप अपने पास मौजूद ज्ञान का उपयोग मशीन विजन के साथ कुछ शानदार परियोजनाओं के निर्माण में कर सकते हैं! आप यहां सिपेड बोर्ड खरीद सकते हैं, वे एम्बेडेड सिस्टम पर एमएल के लिए उपलब्ध सबसे सस्ते विकल्पों में से हैं।

सिफारिश की: