paint-brush
मिनिओ और योलो के साथ कस्टम डेटासेट का उपयोग करके ऑब्जेक्ट डिटेक्शन मॉडल को कैसे प्रशिक्षित करेंद्वारा@minio
9,150 रीडिंग
9,150 रीडिंग

मिनिओ और योलो के साथ कस्टम डेटासेट का उपयोग करके ऑब्जेक्ट डिटेक्शन मॉडल को कैसे प्रशिक्षित करें

द्वारा MinIO13m2023/11/22
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

इस पोस्ट में, हम एक कस्टम इमेज डेटासेट बनाएंगे और फिर ऑब्जेक्ट डिटेक्शन के सर्वव्यापी कार्य के लिए यू-ओनली-लुक-वन्स (YOLO) मॉडल को प्रशिक्षित करेंगे। फिर हम मिनियो बकेट नोटिफिकेशन का उपयोग करके एक सिस्टम लागू करेंगे जो स्वचालित रूप से एक नई छवि पर अनुमान लगा सकता है।
featured image - मिनिओ और योलो के साथ कस्टम डेटासेट का उपयोग करके ऑब्जेक्ट डिटेक्शन मॉडल को कैसे प्रशिक्षित करें
MinIO HackerNoon profile picture
0-item
1-item

कंप्यूटर विज़न कृत्रिम बुद्धिमत्ता का एक अत्यंत सम्मोहक अनुप्रयोग बना हुआ है। चाहे वह युद्ध के मैदान में तत्वों को पहचानना हो या फसल की पैदावार की भविष्यवाणी करना हो, कंप्यूटर विज़न यकीनन एआई के सबसे व्यावसायिक रूप से मूल्यवान (और सामाजिक रूप से महत्वपूर्ण) क्षेत्रों में से एक है।


हालाँकि, सर्वोत्तम कंप्यूटर विज़न क्षमताओं को अपनाने के लिए एक दर-सीमक अक्सर डेटासेट के निर्माण और एक सरल एंड-टू-एंड सिस्टम को डिज़ाइन करने से जुड़ी जटिलताएँ होती हैं जो आपके कंप्यूटर विज़न कार्य को एक नई छवि पर निष्पादित करेगा।


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

परिसर

मान लीजिए कि हम उपग्रह इमेजरी में मौजूद विमानों के प्रकारों को पहचानने में सक्षम होना चाहते हैं। आइए यह भी मान लें कि हम शून्य से शुरू कर रहे हैं: कोई पूर्व-निर्मित डेटासेट नहीं, कोई पूर्व-प्रशिक्षित मॉडल नहीं। यहां दो नमूना विमान हैं जिन्हें हम अपने उपग्रह इमेजरी में पता लगाना और पहचानना चाहते हैं:


बाएँ से दाएँ: (1) Su-30, (2) Tu-95


इस पोस्ट में उल्लिखित चरणों को किसी भी डोमेन के लिए सामान्यीकृत किया जा सकता है। विमान के प्रकारों का पता लगाने के बजाय, हम फसल की पैदावार की भविष्यवाणी करने के लिए भूमि उपयोग को वर्गीकृत कर सकते हैं या प्रतिगमन कर सकते हैं। पारंपरिक छवियों से परे, हम अन्य प्रकार के बहु-आयामी डेटा जैसे LiDAR बिंदु बादलों या 3D भूकंपीय छवियों पर भी प्रशिक्षण और अनुमान लगा सकते हैं; यह सिर्फ एक प्रश्न बन जाता है कि प्रशिक्षण डेटा कैसा दिखता है (और संभावित रूप से YOLO के बजाय एक अलग गहन शिक्षण मॉडल)। यदि आपके पास इस बारे में अधिक प्रश्न हैं कि किसी विशिष्ट उपयोग के मामले में यह कैसा दिखेगा, तो बेझिझक GitHub रेपो पर एक मुद्दा बनाएं!


चरण 1: प्रशिक्षण नमूने प्राप्त करना और प्रबंधित करना

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

चरण 2: डेटासेट बनाना

डेटासेट बनाना


आपके उपयोग के मामले में ऑब्जेक्ट डिटेक्शन मॉडल को प्रशिक्षित करने के लिए, एक लेबल (या 'एनोटेटेड') डेटासेट की आवश्यकता होती है। इसके लिए एक बढ़िया उपकरण OpenCV द्वारा CVAT है। एक अच्छी सुविधा यह है कि सीवीएटी आपके मिनियो बकेट को "क्लाउड स्टोरेज" के रूप में कनेक्ट करने के लिए एक उपयोगिता प्रदान करता है ताकि आपके बकेट की छवियों को सीधे डेटासेट एनोटेशन टूल में फीड किया जा सके। ऐसा करने के लिए, सुनिश्चित करें कि आपके मिनिओ सर्वर का होस्ट सीवीएटी सर्वर तक पहुंच योग्य है, खासकर यदि आप मिनिओ सर्वर को ऑन-प्रिमाइसेस या स्थानीय रूप से अपने लैपटॉप पर चला रहे हैं। इसके अलावा, एक नोट के रूप में, सीवीएटी का उपयोग करने के दो तरीके हैं: (1) ऐप.सीवीएटी.एआई पर उनके प्रदान किए गए वेब ऐप का उपयोग करना या (2) इसे स्थानीय रूप से चलाना। किसी भी स्थिति में, एक बार जब आपका सीवीएटी खुल जाए, तो मेनू बार में "क्लाउड स्टोरेज" पर क्लिक करें। वहां से, आप अपना (एस3-संगत) मिनियो बकेट संलग्न करने के लिए एक फॉर्म भर सकते हैं:


क्लाउड स्टोरेज बनाएं


आइए अब "कार्य" के अंतर्गत अपना नया लेबलिंग कार्य बनाएं:


लेबलिंग कार्य


आपको भरने के लिए एक फॉर्म पूछा जाना चाहिए:


एक नया कार्य बनाएँ


कार्य बनाते समय, क्लास लेबल को सही ढंग से परिभाषित करना महत्वपूर्ण है (मैंने "SU30" और "TU95" शीर्षक वाले दो आयताकार लेबल परिभाषित किए, जो उन दो विमानों के अनुरूप हैं जिनका मैं पता लगाना चाहता था):


वर्ग लेबल को परिभाषित करना


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


मिनियो बकेट को डेटा स्रोत के रूप में संलग्न करना


अपलोड करने की प्रक्रिया में कुछ मिनट लगेंगे. एक बार यह पूरा हो जाने पर, आप "जॉब्स" के अंतर्गत अपना एनोटेशन कार्य उपलब्ध देख पाएंगे।


अपलोडिंग पूर्ण


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


टिप्पणी करना प्रारंभ कर रहा हूँ


एक बार जब आप एनोटेट करना समाप्त कर लें, तो डेटासेट को YOLO प्रारूप में निर्यात करें।


डेटा निर्यात करना

चरण 3: प्रशिक्षण डेटा व्यवस्थित करना

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


इस बिंदु पर, एक नई कार्यशील निर्देशिका बनाएं (या जो आपने पहले ही बनाई है उसे दर्ज करें)। इस निर्देशिका के भीतर, 'डेटासेट' नामक एक उपनिर्देशिका बनाएं। 'डेटासेट' के भीतर, निर्देशिकाएं बनाएं ताकि आपकी कार्यशील निर्देशिका इस तरह दिखे:


 my_cv_project (WORKING DIRECTORY) |---- dataset |----images |----train |----val |----test |----annotations |----train |----val |----test



अब आपको दोनों छवियों और उनके संबंधित एनोटेशन (पाठ फ़ाइलों) के लिए ट्रेन, वैल और परीक्षण उपनिर्देशिकाओं को पॉप्युलेट करना होगा। यह आप पर निर्भर है कि आप अपने नमूनों को कैसे पुनः प्राप्त करना और विभाजित करना चाहते हैं। एक अच्छा अभ्यास यह है कि अपने प्रशिक्षण नमूनों की कुल मात्रा को 80% प्रशिक्षण, 10% सत्यापन और 10% परीक्षण में विभाजित करें। अपनी छवियों को विभाजित करने से पहले उन्हें बेतरतीब ढंग से फेरबदल करना सुनिश्चित करें।


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


अंततः, सुनिश्चित करें कि प्रत्येक छवि के लिए जिसे आपने छवियों/ट्रेन, छवियों/वैल, या छवियों/परीक्षण में रखा है, मिलान एनोटेशन .txt फ़ाइल भी एनोटेशन/निर्देशिका के भीतर संबंधित उपनिर्देशिका में है। उदाहरण के लिए:


 my_cv_project (WORKING DIRECTORY) |---- dataset |----images |----train - 5.png - 3.png - 2.png |----val - 4.png |----test - 1.png |----annotations |----train - 5.txt - 3.txt - 2.txt |----val - 4.txt |----test - 1.txt


अब, हमारा डेटा सही जगह पर है। अब हमारे ऑब्जेक्ट डिटेक्शन मॉडल पर एक नज़र डालने और प्रशिक्षण शुरू करने का समय आ गया है।

चरण 4: ऑब्जेक्ट डिटेक्शन मॉडल

वस्तु पहचान के लिए वर्तमान स्वर्ण मानक (प्रदर्शन और उपयोग में आसानी के संदर्भ में) मॉडलों का YOLO (यू ओनली लुक वन्स) वर्ग है। लेखन के समय, YOLOv8 नवीनतम संस्करण है और Ultralytics द्वारा इसे ओपन-सोर्स के रूप में बनाए रखा गया है। YOLOv8 एक सरल एपीआई प्रदान करता है जिसका लाभ हम अपने नव निर्मित एनोटेशन पर मॉडल को प्रशिक्षित करने के लिए उठा सकते हैं (और अंततः अनुमान भी चला सकते हैं)।


आइए YOLOv8 डाउनलोड करें:


 $ pip install ultralytics


अब हम प्रशिक्षण, सत्यापन और भविष्यवाणी करने के लिए YOLOv8 CLI टूल या Python SDK का उपयोग कर सकते हैं। अधिक जानकारी के लिए YOLOv8 दस्तावेज़ देखें।

चरण 5: प्रशिक्षण

अपनी कार्यशील निर्देशिका में, एक YAML फ़ाइल परिभाषित करें जो डेटासेट के स्थान और कक्षाओं के बारे में विवरण निर्दिष्ट करती है। ध्यान दें कि कैसे पथ वही हैं जो मैंने पहले कार्यशील निर्देशिका में बनाए थे। मैंने अपनी फ़ाइल का नाम ' objdetect.yaml ' रखा। साथ ही, ध्यान दें कि दो विमान श्रेणी लेबलों को उसी क्रम में परिभाषित किया जाना चाहिए जैसे वे सीवीएटी में थे।


 train: ./dataset/images/train/ val: ./dataset/images/val/ test: ./dataset/images/test/ # number of classes nc: 2 # class names names: ["SU-30","TU-95"]


निम्नलिखित कमांड (YOLO CLI टूल का उपयोग करके) के साथ हमारे डेटासेट पर YOLOv8 मॉडल का प्रशिक्षण शुरू करें। प्रशिक्षण के लिए कॉन्फ़िगर किए जा सकने वाले सभी विभिन्न विकल्पों के बारे में अधिक जानने के लिए YOLO दस्तावेज़ देखें। यहां, मैं 100 युगों के लिए प्रशिक्षण शुरू कर रहा हूं और 640 पिक्सेल का एक छवि आकार निर्धारित कर रहा हूं (हमारे सभी प्रशिक्षण चित्र प्रशिक्षण के दौरान तदनुसार स्केल किए जाएंगे):


 $ yolo task=detect \ mode=train \ model=yolov8s.pt \ data=objdetect.yaml \ epochs=100 \ imgsz=640


प्रशिक्षण में थोड़ा समय लगेगा, खासकर यदि आप लैपटॉप पर काम कर रहे हैं (जैसे मैं हूं), तो अब ब्रेक लेने का अच्छा समय है (या आगे पढ़ें 😀)!


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


 Results saved to runs/detect/train


नोट: रन/डिटेक्ट/ट्रेन/वेट/ में सटीक प्रशिक्षित वजन के साथ पीटी फ़ाइलें शामिल होंगी। इस स्थान को बाद के लिए याद रखें.

चरण 5बी: मॉडल सत्यापन और परीक्षण

आप निम्न आदेश के साथ सत्यापन चला सकते हैं:


 $ yolo task=detect \ mode=val \ model=path/to/best.pt \ data=objdetect.yaml


परिणाम स्वचालित रूप से आपकी कार्यशील निर्देशिका में 'रन/डिटेक्ट/वैल' फ़ॉर्म के पथ के साथ एक फ़ोल्डर में संग्रहीत हो जाएंगे।


परीक्षण सेट पर अनुमान लगाने के लिए, आप निम्नलिखित कमांड का उपयोग कर सकते हैं:


 $ yolo task=detect \ mode=predict \ model=path/to/best.pt \ conf=0.5 \ source=dataset/images/test


परिणाम 'रन/डिटेक्ट/प्रीडिक्ट' में संग्रहीत किए जाएंगे। यहां परीक्षण सेट पर कुछ पूर्वानुमान परिणाम दिए गए हैं:


भविष्यवाणी परिणाम


चरण 6: मिनियो बकेट नोटिफिकेशन का उपयोग करके नई छवि का अनुमान

अब जबकि हमारे पास एक प्रशिक्षित मॉडल है जो उपग्रह छवि में मौजूद कुछ विमान प्रकारों को पहचान सकता है, तो हम इसे सरल तरीके से नई छवियों के लिए कैसे उपयोग कर सकते हैं ?


मिनियो बकेट नोटिफिकेशन का उपयोग करना


मिनियो बकेट नोटिफिकेशन इसके लिए एक आदर्श उपकरण है। हम एक ऐसा सिस्टम बना सकते हैं जो वेबहुक की मदद से हमारी बकेट में डाली गई एक नई छवि पर स्वचालित रूप से ऑब्जेक्ट डिटेक्शन अनुमान लगा सकता है।


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


यहां एक साधारण फ्लास्क-आधारित सर्वर ( डिटेक्शन_सर्वर.py ) के लिए कोड दिया गया है, जो मिनिओ बकेट में जोड़ी गई एक नई छवि पर अनुमान चलाता है:


 """ This is a simple Flask inference server implementation that serves as a webhook for the event of a new image being added to a MinIO bucket. Object detection using YOLO will be performed on that image and the resulting predictions will be returned. """ from flask import Flask, request, abort, make_response from ultralytics import YOLO import tempfile from minio import Minio # Make sure the following are populated with your MinIO details # (Best practice is to use environment variables!) MINIO_ENDPOINT = '' MINIO_ACCESS_KEY = '' MINIO_SECRET_KEY = '' model = YOLO('/PATH/TO/best.pt') # load a custom model (path to trained weights) client = Minio( MINIO_ENDPOINT, access_key=MINIO_ACCESS_KEY, secret_key=MINIO_SECRET_KEY, ) app = Flask(__name__) @app.route('/', methods=['POST']) async def inference_bucket_webhook(): """ This endpoint will be called when a new object is placed in your inference bucket """ if request.method == 'POST': # Get the request event from the 'POST' call event = request.json bucket = event['Records'][0]['s3']['bucket']['name'] obj_name = event['Records'][0]['s3']['object']['key'] with tempfile.TemporaryDirectory() as temp_dir: temp_file_name = temp_dir+'/'+obj_name client.fget_object(bucket, obj_name, temp_file_name) # See https://docs.ultralytics.com/modes/predict/ for more information about YOLO inference options results = model.predict(source=temp_file_name, conf=0.5, stream=False) # A list of bounding boxes (if any) is returned. # Each bounding box is in the format [x1, y1, x2, y2, probability, class]. result = {"results": results[0].boxes.data.tolist()} print(result) resp = make_response(result, 200) return resp else: abort(400) if __name__ == '__main__': app.run()


आइए अनुमान सर्वर शुरू करें:


 $ python detection_server.py * Serving Flask app 'detection_server' * Debug mode: off * Running on http://127.0.0.1:5000 Press CTRL+C to quit


उस होस्टनाम और पोर्ट पर ध्यान दें जिस पर फ्लास्क एप्लिकेशन चल रहा है।


इसके बाद, आइए मिनिआईओ पक्ष पर वेबहुक को कॉन्फ़िगर करने पर काम करना शुरू करें। सबसे पहले, निम्नलिखित पर्यावरण चर सेट करें। <YOURFUNCTIONNAME> को अपनी पसंद के फ़ंक्शन नाम से बदलें। सरलता के लिए, मैं 'अनुमान' के साथ गया। साथ ही, सुनिश्चित करें कि एंडपॉइंट पर्यावरण चर आपके अनुमान सर्वर के लिए सही होस्ट और पोर्ट पर सेट है। इस मामले में, http://localhost:5000 वह जगह है जहां हमारा फ्लास्क एप्लिकेशन चल रहा है।


 $ export MINIO_NOTIFY_WEBHOOK_ENABLE_<YOURFUNCTIONNAME>=on $ export MINIO_NOTIFY_WEBHOOK_ENDPOINT_<YOURFUNCTIONNAME>=http://localhost:5000


अब, mc admin service restart ALIAS कमांड का उपयोग करके मिनियो सर्वर को पुनरारंभ करें या यदि आप पहली बार सर्वर शुरू कर रहे हैं तो आप मिनियो सर्वर कमांड का भी उपयोग कर सकते हैं। MiniIO सर्वर को पुनः/प्रारंभ करने के बारे में अधिक जानकारी के लिए, MiniIO दस्तावेज़ देखें। नोट: आपके मिनिओ सर्वर परिनियोजन के लिए उपनाम को उपनाम से बदला जाना चाहिए। उपनाम कैसे सेट करें या मौजूदा उपनाम कैसे देखें, इसके बारे में अधिक जानकारी के लिए दस्तावेज़ देखें।


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


 $ mc event add ALIAS/BUCKET arn:minio:sqs::<YOURFUNCTIONNAME>:webhook --event put


जब आप यह कमांड चलाते हैं तो " s3:ObjectCreated:* " आउटपुट होता है या नहीं, यह सत्यापित करके आप यह जांच सकते हैं कि आपने बकेट नोटिफिकेशन के लिए सही ईवेंट प्रकार कॉन्फ़िगर किया है:


 $ mc event ls local/detect-inference arn:minio:sqs::<YOURFUNCTIONNAME>:webhook


वेबहुक पर बकेट इवेंट प्रकाशित करने की अधिक विस्तृत व्याख्या के लिए, दस्तावेज़ देखें। अब हम बिल्कुल नई छवि पर ऑब्जेक्ट डिटेक्शन का प्रयास करने के लिए तैयार हैं!

हमारी अनुमान प्रणाली को आज़माना

यहां नई छवि है (शीर्षक '1.png') मैं इस पर निष्कर्ष निकालना चाहता हूं:


अनुमान प्रणाली का प्रयास कर रहा हूँ


मैं नई छवि को अपनी 'पता-अनुमान' बकेट में छोड़ता हूँ:


छवि को एक नई बाल्टी में डालना


लगभग तुरंत ही, मैं अपने फ्लास्क सर्वर पर निम्नलिखित परिणाम देख पा रहा हूँ:


 $ python detection_server.py * Serving Flask app 'detection_server' * Debug mode: off * Running on http://127.0.0.1:5000 Press CTRL+C to quit image 1/1 /var/folders/xf/q7x0z8sn5nvckccp1g0m1vpm0000gn/T/tmpo6jx3w8u/1.png: 448x736 2 SU-30s, 101.0ms Speed: 4.1ms preprocess, 101.0ms inference, 5.8ms postprocess per image at shape (1, 3, 448, 736) {'results': [[1927.78369140625, 627.7123413085938, 1995.090576171875, 715.3443603515625, 0.8142037987709045, 0.0], [1735.740234375, 477.2108154296875, 1809.181640625, 555.767578125, 0.7766116261482239, 0.0]]} 127.0.0.1 - - [14/Sep/2023 15:39:21] "POST / HTTP/1.1" 200 -


ध्यान दें कि परिणाम सूची में प्रत्येक पाया गया बाउंडिंग बॉक्स YOLO प्रारूप [x1, y1, x2, y2, प्रायिकता, वर्ग] में है। यहां मूल छवि पर लगाए गए बाउंडिंग बॉक्स और अनुमानित कक्षाएं दी गई हैं:


अन्य दो जेट Su-30 नहीं हैं। मेरे प्रारंभिक डेटासेट में ~100 छवियां शामिल थीं, इसलिए मुझे आश्चर्य हुआ कि मॉडल पहले से ही समान दिखने वाले विमानों के बीच की बारीकियों को समझने में सक्षम था। मुझे लगता है कि यहां सबक यह है कि ग्रेडिएंट डिसेंट को कभी कम मत समझो!


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

समापन विचार

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


मिनिओ और योलो किनारे पर तैनात हैं।


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


यदि आपके कोई प्रश्न हैं तो हमारे स्लैक चैनल से जुड़ें या हमें [email protected] पर एक नोट छोड़ें। हम यहां आपकी सहायता के लिए उपलब्ध हैं।


यहाँ भी प्रकाशित किया गया है.