विषयसूची:

सिपेड माईएक्स बोर्ड्स के साथ ऑब्जेक्ट डिटेक्शन (केंड्रीटे के २१०): ६ कदम
सिपेड माईएक्स बोर्ड्स के साथ ऑब्जेक्ट डिटेक्शन (केंड्रीटे के २१०): ६ कदम

वीडियो: सिपेड माईएक्स बोर्ड्स के साथ ऑब्जेक्ट डिटेक्शन (केंड्रीटे के २१०): ६ कदम

वीडियो: सिपेड माईएक्स बोर्ड्स के साथ ऑब्जेक्ट डिटेक्शन (केंड्रीटे के २१०): ६ कदम
वीडियो: Object Detection With Sipeed MaiX Boards(Kendryte K210) 2024, नवंबर
Anonim
Image
Image

सिपेड माईएक्स बोर्ड्स के साथ इमेज रिकग्निशन के बारे में अपने पिछले लेख की निरंतरता के रूप में, मैंने ऑब्जेक्ट डिटेक्शन पर ध्यान केंद्रित करते हुए एक और ट्यूटोरियल लिखने का फैसला किया। हाल ही में Kendryte K210 चिप के साथ कुछ दिलचस्प हार्डवेयर पॉप अप हुए, जिनमें एज कंप्यूटिंग के लिए Seeed AI Hat, M5 स्टैक का M5StickV और DFRobot का HuskyLens शामिल है (हालाँकि उसके पास मालिकाना फर्मवेयर है और पूर्ण शुरुआती के लिए अधिक लक्षित है)। इसकी सस्ती कीमत के कारण, Kendryte K210 ने लोगों से अपील की है कि वे अपनी परियोजनाओं में कंप्यूटर विजन जोड़ना चाहते हैं। लेकिन चीनी हार्डवेयर उत्पादों के साथ हमेशा की तरह, तकनीकी सहायता की कमी है और यह कुछ ऐसा है जिसे मैं अपने लेखों और वीडियो के साथ सुधारने की कोशिश कर रहा हूं। लेकिन ध्यान रखें, कि मैं Kendryte या Sipeed Developers टीम में नहीं हूं और उनके उत्पाद से संबंधित सभी सवालों के जवाब नहीं दे सकता।

इसे ध्यान में रखते हुए, चलिए शुरू करते हैं! हम वस्तु पहचान सीएनएन मॉडल के काम करने के तरीके के संक्षिप्त (और सरलीकृत) अवलोकन के साथ शुरुआत करेंगे।

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

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

चरण 1: ऑब्जेक्ट डिटेक्शन मॉडल आर्किटेक्चर समझाया गया

ऑब्जेक्ट डिटेक्शन मॉडल आर्किटेक्चर समझाया गया
ऑब्जेक्ट डिटेक्शन मॉडल आर्किटेक्चर समझाया गया
ऑब्जेक्ट डिटेक्शन मॉडल आर्किटेक्चर समझाया गया
ऑब्जेक्ट डिटेक्शन मॉडल आर्किटेक्चर समझाया गया

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

यहां ऑब्जेक्ट डिटेक्शन मॉडल काम में आते हैं। इस लेख में हम YOLO (आप केवल एक बार देखें) आर्किटेक्चर का उपयोग करेंगे और इस विशेष आर्किटेक्चर के आंतरिक यांत्रिकी पर स्पष्टीकरण पर ध्यान केंद्रित करेंगे।

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

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

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

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

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

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

पास्कल-वीओसी ऑब्जेक्ट डिटेक्शन कोलाब नोटबुक

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

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

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

कोंडा क्रिएट-एन योलो पायथन=3.7

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

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

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

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

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

और फिर इसे उन लिपियों को डाउनलोड करने के लिए चलाएं जिनकी आपको प्रशिक्षण और अनुमान के लिए आवश्यकता होगी:

गिट क्लोन

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

चरण 3: केरास के साथ ऑब्जेक्ट डिटेक्शन मॉडल को प्रशिक्षित करें

केरास के साथ ऑब्जेक्ट डिटेक्शन मॉडल को प्रशिक्षित करें
केरास के साथ ऑब्जेक्ट डिटेक्शन मॉडल को प्रशिक्षित करें

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

आइए एक खिलौने के उदाहरण से शुरू करें और एक रैकून डिटेक्टर को प्रशिक्षित करें। /config फोल्डर के अंदर एक कॉन्फिग फाइल है, raccoon_detector.json। हम MobileNet7_5 को आर्किटेक्चर के रूप में चुनते हैं (जहां 7_5 मूल Mobilenet कार्यान्वयन का अल्फा पैरामीटर है, नेटवर्क की चौड़ाई को नियंत्रित करता है) और इनपुट आकार के रूप में 224x224। आइए कॉन्फ़िगरेशन में सबसे महत्वपूर्ण पैरामीटर देखें:

प्रकार है मॉडल फ़्रंटएंड - क्लासिफ़ायर, डिटेक्टर या सेगनेटआर्किटेक्चर मॉडल बैकएंड (फ़ीचर एक्सट्रैक्टर) है

- पूर्ण योलो - टिनी योलो - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - स्क्वीज़नेट - VGG16 - ResNet50

एंकरों के बारे में अधिक जानकारी के लिए, कृपया यहाँ पढ़ें

लेबल आपके डेटासेट में मौजूद लेबल होते हैं। महत्वपूर्ण: कृपया डेटासेट में मौजूद सभी लेबलों को सूचीबद्ध करें।

object_scale निर्धारित करता है कि वस्तु भविष्यवक्ताओं के विश्वास की गलत भविष्यवाणी को कितना दंडित करना है

no_object_scale निर्धारित करता है कि गैर-ऑब्जेक्ट भविष्यवक्ताओं के विश्वास की गलत भविष्यवाणी को कितना दंडित करना है

coord_scale निर्धारित करता है कि गलत स्थिति और आकार की भविष्यवाणियों (x, y, w, h) को कितना दंडित करना है

class_scale निर्धारित करता है कि गलत वर्ग भविष्यवाणी को कितना दंडित करना है

ऑगमेंटेशन - ओवरफिटिंग को रोकने के लिए इमेज ऑगमेंटेशन, रीसाइज़िंग, शिफ्टिंग और इमेज को धुंधला करना और डेटासेट में अधिक विविधता है।

ट्रेन_टाइम्स, वेलिडेशन_टाइम्स - डेटासेट को कितनी बार दोहराना है। उपयोगी अगर आपके पास वृद्धि है

सक्षम

first_trainable_layer - यदि आप पूर्व-प्रशिक्षित फीचर नेटवर्क का उपयोग कर रहे हैं तो आपको कुछ परतों को फ्रीज करने की अनुमति देता है

अब हमें डेटासेट डाउनलोड करने की आवश्यकता है, जिसे मैंने अपने Google ड्राइव (मूल डेटासेट) पर साझा किया है, जो एक रैकून डिटेक्शन डेटासेट है, जिसमें 150 एनोटेट चित्र हैं।

कॉन्फ़िगरेशन फ़ाइल (train_image_folder, train_annot_folder) में लाइनों को तदनुसार बदलना सुनिश्चित करें और फिर निम्नलिखित कमांड के साथ प्रशिक्षण शुरू करें:

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

train.py.json फ़ाइल से कॉन्फ़िगरेशन पढ़ता है और मॉडल को axelerate/networks/yolo/yolo_frontend.py स्क्रिप्ट के साथ प्रशिक्षित करता है। yolo/backend/loss.py वह जगह है जहां कस्टम लॉस फंक्शन लागू किया जाता है और yolo/backend/network.py वह जगह है जहां मॉडल बनाया जाता है (इनपुट, फीचर एक्सट्रैक्टर और डिटेक्शन लेयर्स को एक साथ रखा जाता है)। axelerate/networks/common_utils/fit.py वह स्क्रिप्ट है जो प्रशिक्षण प्रक्रिया को लागू करती है और axelerate/networks/common_utils/feature.py में फीचर एक्सट्रैक्टर्स होते हैं। यदि आप K210 चिप और माइक्रोपायथन फर्मवेयर के साथ प्रशिक्षित मॉडल का उपयोग करने का इरादा रखते हैं, तो स्मृति सीमाओं के कारण आप MobileNet(2_5, 5_0 और 7_5) और TinyYolo के बीच चयन कर सकते हैं, लेकिन मैंने पाया है कि MobileNet बेहतर पहचान सटीकता प्रदान करता है।

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

चरण 4: इसे.kmodel फ़ॉर्मेट में बदलें

इसे.kmodel फ़ॉर्मेट में बदलें
इसे.kmodel फ़ॉर्मेट में बदलें

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

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

अब अंतिम चरण में, वास्तव में हमारे मॉडल को सिपेड हार्डवेयर पर चलाना!

चरण 5: Micropython फर्मवेयर पर चलाएँ

माइक्रोपायथन फर्मवेयर पर चलाएं
माइक्रोपायथन फर्मवेयर पर चलाएं

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

यहाँ से MaixPy IDE और यहाँ से micropython फर्मवेयर डाउनलोड करें। आप फर्मवेयर को जलाने के लिए अजगर स्क्रिप्ट kflash.py का उपयोग कर सकते हैं या यहां अलग जीयूआई फ्लैश टूल डाउनलोड कर सकते हैं।

मॉडल.केमॉडल को एसडी कार्ड के रूट पर कॉपी करें और एसडी कार्ड को सिपेड मैक्स बिट (या अन्य K210 डिवाइस) में डालें। वैकल्पिक रूप से आप.kmodel को डिवाइस की फ्लैश मेमोरी में बर्न कर सकते हैं। मेरी उदाहरण स्क्रिप्ट फ्लैश मेमोरी से.kmodel पढ़ती है। यदि आप एसडी कार्ड का उपयोग कर रहे हैं, तो कृपया इस लाइन को बदलें

कार्य = kpu.लोड (0x200000)

प्रति

कार्य = kpu.load("/sd/model.kmodel")

MaixPy IDE खोलें और कनेक्ट बटन दबाएं। example_scripts/k210/डिटेक्टर फ़ोल्डर से raccoon_detector.py स्क्रिप्ट खोलें और स्टार्ट बटन दबाएं। आप कैमरे से एक लाइव स्ट्रीम देख रहे होंगे जिसमें चारों ओर बाउंडिंग बॉक्स हों … ठीक है, रैकून। आप अधिक प्रशिक्षण उदाहरण प्रदान करके मॉडल की सटीकता बढ़ा सकते हैं, लेकिन ध्यान रखें कि यह परी छोटा मॉडल (1.9 एम) है और इसमें छोटी वस्तुओं का पता लगाने में परेशानी होगी (कम रिज़ॉल्यूशन के कारण)।

छवि पहचान पर मेरे पिछले लेख की टिप्पणियों में मुझे प्राप्त प्रश्नों में से एक यह है कि UART/I2C पर सिपेड डेवलपमेंट बोर्ड से जुड़े अन्य डिवाइस पर पता लगाने के परिणाम कैसे भेजें। मेरे जीथब रिपॉजिटरी में आप एक और उदाहरण स्क्रिप्ट, raccoon_detector_uart.py पा सकेंगे, जो (आपने अनुमान लगाया है) रैकून का पता लगाता है और UART पर बाउंडिंग बॉक्स के निर्देशांक भेजता है। ध्यान रखें, यूएआरटी संचार के लिए उपयोग किए जाने वाले पिन अलग-अलग बोर्डों से भिन्न होते हैं, यह कुछ ऐसा है जो आपको दस्तावेज़ीकरण में स्वयं की जांच करने की आवश्यकता है।

चरण 6: सारांश

Kendryte K210 कंप्यूटर दृष्टि के लिए एक ठोस चिप है, लचीली है, यद्यपि सीमित मेमोरी उपलब्ध है। अब तक, मेरे ट्यूटोरियल्स में हमने कस्टम ऑब्जेक्ट्स को पहचानने, कस्टम ऑब्जेक्ट्स का पता लगाने और कुछ ओपनएमवी आधारित कंप्यूटर विज़न कार्यों को चलाने के लिए इसका इस्तेमाल किया है। मैं इस तथ्य के लिए जानता हूं कि यह चेहरे की पहचान के लिए भी उपयुक्त है और कुछ छेड़छाड़ के साथ पोज़ डिटेक्शन और इमेज सेगमेंटेशन करना संभव होना चाहिए (आप सिमेंटिक सेगमेंटेशन मॉडल को प्रशिक्षित करने के लिए aXeleRate का उपयोग कर सकते हैं, लेकिन मैंने अभी तक K210 के साथ अनुमान को लागू नहीं किया है). बेझिझक aXeleRate रिपोजिटरी मुद्दों पर एक नज़र डालें और अगर आपको लगता है कि कुछ सुधार हैं जिनमें आप योगदान कर सकते हैं तो एक पीआर बनाएं!

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

बाउंडिंग बॉक्स ऑब्जेक्ट डिटेक्टर: YOLO को समझना, आप केवल एक बार देखते हैं

योलो को समझना (अधिक गणित)

YOLO ऑब्जेक्ट लोकलाइज़ेशन केरस के साथ कैसे काम करता है, इस पर कोमल गाइड (भाग 2)

YOLO, YOLOv2 और अब YOLOv3. के साथ रीयल-टाइम ऑब्जेक्ट डिटेक्शन

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

यदि आपके कोई प्रश्न हैं तो मुझे लिंक्डइन पर जोड़ें और मशीन लर्निंग और रोबोटिक्स से जुड़ी और दिलचस्प परियोजनाओं के बारे में सूचित करने के लिए मेरे YouTube चैनल को सब्सक्राइब करें।

सिफारिश की: