एक छवि या एक वीडियो स्ट्रीम को देखते हुए, एक ऑब्जेक्ट डिटेक्शन मॉडल यह पहचान सकता है कि वस्तुओं का कौन सा ज्ञात समूह मौजूद हो सकता है और छवि के भीतर उनकी स्थिति के बारे में जानकारी प्रदान करता है।
उदाहरण के लिए, उदाहरण एप्लिकेशन का यह स्क्रीनशॉट दिखाता है कि कैसे दो वस्तुओं को पहचाना गया है और उनकी स्थिति को एनोटेट किया गया है:
शुरू हो जाओ
मोबाइल ऐप में ऑब्जेक्ट डिटेक्शन का उपयोग करने का तरीका जानने के लिए, उदाहरण एप्लिकेशन और गाइड एक्सप्लोर करें।
यदि आप Android या iOS के अलावा किसी अन्य प्लेटफ़ॉर्म का उपयोग कर रहे हैं, या यदि आप पहले से ही TensorFlow Lite API से परिचित हैं, तो आप हमारे स्टार्टर ऑब्जेक्ट डिटेक्शन मॉडल और साथ के लेबल को डाउनलोड कर सकते हैं।
मेटाडेटा के साथ स्टार्टर मॉडल डाउनलोड करें
मेटाडेटा और संबंधित फ़ील्ड के बारे में अधिक जानकारी के लिए (उदाहरण: labels.txt
) मॉडल से मेटाडेटा पढ़ें देखें
यदि आप अपने स्वयं के कार्य के लिए एक कस्टम डिटेक्शन मॉडल को प्रशिक्षित करना चाहते हैं, तो मॉडल अनुकूलन देखें।
निम्नलिखित उपयोग मामलों के लिए, आपको एक अलग प्रकार के मॉडल का उपयोग करना चाहिए:
- भविष्यवाणी करना कि छवि किस एकल लेबल का सबसे अधिक प्रतिनिधित्व करती है ( छवि वर्गीकरण देखें)
- एक छवि की संरचना की भविष्यवाणी करना, उदाहरण के लिए विषय बनाम पृष्ठभूमि ( विभाजन देखें)
उदाहरण आवेदन और गाइड
यदि आप TensorFlow Lite में नए हैं और Android या iOS के साथ काम कर रहे हैं, तो हम अनुशंसा करते हैं कि आप निम्न उदाहरण एप्लिकेशन की खोज करें जो आरंभ करने में आपकी सहायता कर सकते हैं।
एंड्रॉयड
आप कोड की कुछ पंक्तियों में ऑब्जेक्ट डिटेक्शन मॉडल को एकीकृत करने के लिए TensorFlow Lite टास्क लाइब्रेरी से आउट-ऑफ़-बॉक्स API का लाभ उठा सकते हैं। आप TensorFlow Lite Interpreter Java API का उपयोग करके अपनी स्वयं की कस्टम अनुमान पाइपलाइन भी बना सकते हैं।
नीचे दिया गया Android उदाहरण क्रमशः टास्क लाइब्रेरी और दुभाषिया एपीआई का उपयोग करके दोनों विधियों के कार्यान्वयन को प्रदर्शित करता है।
आईओएस
आप TensorFlow Lite Interpreter Swift API का उपयोग करके मॉडल को एकीकृत कर सकते हैं। नीचे आईओएस उदाहरण देखें।
मॉडल वर्णन
यह खंड TensorFlow Object Detection API से TensorFlow Lite में परिवर्तित सिंगल-शॉट डिटेक्टर मॉडल के लिए हस्ताक्षर का वर्णन करता है।
ऑब्जेक्ट डिटेक्शन मॉडल को कई वर्गों की वस्तुओं की उपस्थिति और स्थान का पता लगाने के लिए प्रशिक्षित किया जाता है। उदाहरण के लिए, एक मॉडल को उन छवियों के साथ प्रशिक्षित किया जा सकता है जिनमें फलों के विभिन्न टुकड़े होते हैं, साथ ही एक लेबल जो उनके द्वारा प्रतिनिधित्व किए जाने वाले फलों की श्रेणी (जैसे एक सेब, एक केला, या एक स्ट्रॉबेरी) को निर्दिष्ट करता है, और डेटा निर्दिष्ट करता है कि प्रत्येक वस्तु कहाँ दिखाई देती है छवि।
जब मॉडल को बाद में एक छवि प्रदान की जाती है, तो यह उन वस्तुओं की एक सूची का उत्पादन करेगा जो यह पता लगाता है, एक बाउंडिंग बॉक्स का स्थान जिसमें प्रत्येक वस्तु होती है, और एक स्कोर जो इस विश्वास को इंगित करता है कि पता लगाना सही था।
इनपुट हस्ताक्षर
मॉडल इनपुट के रूप में एक छवि लेता है।
आइए मान लें कि अपेक्षित छवि 300x300 पिक्सेल है, जिसमें तीन चैनल (लाल, नीला और हरा) प्रति पिक्सेल है। इसे 270,000 बाइट मान (300x300x3) के चपटा बफर के रूप में मॉडल को खिलाया जाना चाहिए। यदि मॉडल को परिमाणित किया गया है, तो प्रत्येक मान 0 और 255 के बीच के मान का प्रतिनिधित्व करने वाला एक बाइट होना चाहिए।
एंड्रॉइड पर इस प्री-प्रोसेसिंग को कैसे करना है, यह समझने के लिए आप हमारे उदाहरण ऐप कोड पर एक नज़र डाल सकते हैं।
आउटपुट हस्ताक्षर
मॉडल चार सरणियों को आउटपुट करता है, जिन्हें 0-4 के सूचकांक में मैप किया जाता है। सरणी 0, 1, और 2 N
खोजी गई वस्तुओं का वर्णन करते हैं, प्रत्येक वस्तु के अनुरूप प्रत्येक सरणी में एक तत्व के साथ।
अनुक्रमणिका | नाम | विवरण |
---|---|---|
0 | स्थानों | [एन] [4] की बहुआयामी सरणी 0 और 1 के बीच फ़्लोटिंग पॉइंट मान, आंतरिक सरणियाँ [ऊपर, बाएँ, नीचे, दाएं] के रूप में बाउंडिंग बॉक्स का प्रतिनिधित्व करती हैं। |
1 | कक्षाओं | N पूर्णांकों की सरणी (फ्लोटिंग पॉइंट मान के रूप में आउटपुट) प्रत्येक लेबल फ़ाइल से एक वर्ग लेबल के सूचकांक को दर्शाता है |
2 | स्कोर | 0 और 1 के बीच एन फ़्लोटिंग पॉइंट मानों की सरणी संभावना का प्रतिनिधित्व करती है कि एक वर्ग का पता चला था |
3 | पता लगाने की संख्या | N का पूर्णांक मान |
उदाहरण के लिए, कल्पना कीजिए कि सेब, केले और स्ट्रॉबेरी का पता लगाने के लिए एक मॉडल को प्रशिक्षित किया गया है। जब एक छवि प्रदान की जाती है, तो यह एक निश्चित संख्या में खोज परिणामों को आउटपुट करेगा - इस उदाहरण में, 5।
कक्षा | अंक | जगह |
---|---|---|
सेब | 0.92 | [18, 21, 57, 63] |
केला | 0.88 | [100, 30, 180, 150] |
स्ट्रॉबेरी | 0.87 | [7, 82, 89, 163] |
केला | 0.23 | [42, 66, 57, 83] |
सेब | 0.11 | [6, 42, 31, 58] |
आत्मविश्वास स्कोर
इन परिणामों की व्याख्या करने के लिए, हम प्रत्येक खोजी गई वस्तु के लिए स्कोर और स्थान देख सकते हैं। स्कोर 0 और 1 के बीच की एक संख्या है जो इस विश्वास को इंगित करता है कि वस्तु वास्तव में पहचानी गई थी। संख्या 1 के जितनी करीब होगी, मॉडल उतना ही अधिक आश्वस्त होगा।
आपके आवेदन के आधार पर, आप एक कट-ऑफ सीमा तय कर सकते हैं जिसके नीचे आप खोज परिणामों को छोड़ देंगे। वर्तमान उदाहरण के लिए, एक समझदार कट-ऑफ़ 0.5 का स्कोर है (मतलब 50% संभावना है कि पता लगाना मान्य है)। उस स्थिति में, सरणी में अंतिम दो वस्तुओं को अनदेखा कर दिया जाएगा क्योंकि वे आत्मविश्वास स्कोर 0.5 से नीचे हैं:
कक्षा | अंक | जगह |
---|---|---|
सेब | 0.92 | [18, 21, 57, 63] |
केला | 0.88 | [100, 30, 180, 150] |
स्ट्रॉबेरी | 0.87 | [7, 82, 89, 163] |
केला | 0.23 | [42, 66, 57, 83] |
सेब | 0.11 | [6, 42, 31, 58] |
आपके द्वारा उपयोग किया जाने वाला कट-ऑफ़ इस पर आधारित होना चाहिए कि क्या आप झूठे सकारात्मक (ऐसी वस्तुएँ जिन्हें गलत तरीके से पहचाना जाता है, या छवि के ऐसे क्षेत्र जिन्हें गलत तरीके से वस्तुओं के रूप में पहचाना जाता है, जबकि वे नहीं हैं) के साथ अधिक सहज हैं, या झूठी नकारात्मक (वास्तविक वस्तुएँ जो हैं चूक गए क्योंकि उनका आत्मविश्वास कम था)।
उदाहरण के लिए, निम्नलिखित छवि में, एक नाशपाती (जो एक वस्तु नहीं है जिसे पहचानने के लिए मॉडल को प्रशिक्षित किया गया था) को "व्यक्ति" के रूप में गलत पहचाना गया था। यह गलत सकारात्मक का एक उदाहरण है जिसे उचित कट-ऑफ का चयन करके अनदेखा किया जा सकता है। इस मामले में, 0.6 (या 60%) का कट-ऑफ आराम से झूठे सकारात्मक को बाहर कर देगा।
जगह
प्रत्येक खोजी गई वस्तु के लिए, मॉडल अपनी स्थिति के चारों ओर एक बाउंडिंग आयत का प्रतिनिधित्व करने वाली चार संख्याओं की एक सरणी लौटाएगा। प्रदान किए गए स्टार्टर मॉडल के लिए, संख्याओं का क्रम इस प्रकार है:
[ | ऊपर, | बाएं, | तल, | सही | ] |
शीर्ष मान पिक्सेल में छवि के शीर्ष से आयत के शीर्ष किनारे की दूरी को दर्शाता है। बायाँ मान इनपुट छवि के बाएँ किनारे से बाएँ किनारे की दूरी को दर्शाता है। अन्य मान समान तरीके से नीचे और दाएँ किनारों का प्रतिनिधित्व करते हैं।
प्रदर्शन बेंचमार्क
हमारे स्टार्टर मॉडल के लिए प्रदर्शन बेंचमार्क नंबर यहां वर्णित टूल से उत्पन्न होते हैं।
मॉडल नाम | मॉडल का आकार | उपकरण | जीपीयू | CPU |
---|---|---|---|---|
कोको एसएसडी मोबाइलनेट v1 | 27 एमबी | पिक्सेल 3 (एंड्रॉइड 10) | 22 मि.से | 46ms* |
पिक्सेल 4 (एंड्रॉइड 10) | 20 मि.से | 29ms* | ||
आईफोन एक्सएस (आईओएस 12.4.1) | 7.6ms | 11ms** |
* 4 धागों का इस्तेमाल किया गया है।
** सर्वोत्तम प्रदर्शन परिणाम के लिए iPhone पर 2 थ्रेड्स का उपयोग किया गया।
मॉडल अनुकूलन
पूर्व प्रशिक्षित मॉडल
डिटेक्शन ज़ू में विभिन्न प्रकार की विलंबता और सटीक विशेषताओं वाले मोबाइल-अनुकूलित डिटेक्शन मॉडल पाए जा सकते हैं। उनमें से प्रत्येक निम्नलिखित अनुभागों में वर्णित इनपुट और आउटपुट हस्ताक्षरों का अनुसरण करता है।
अधिकांश डाउनलोड ज़िप में एक model.tflite
फ़ाइल होती है। यदि कोई नहीं है, तो इन निर्देशों का उपयोग करके एक TensorFlow Lite फ्लैटबफ़र उत्पन्न किया जा सकता है। TF2 ऑब्जेक्ट डिटेक्शन ज़ू के SSD मॉडल को भी यहाँ दिए गए निर्देशों का उपयोग करके TensorFlow Lite में बदला जा सकता है। यह ध्यान रखना महत्वपूर्ण है कि डिटेक्शन मॉडल को सीधे TensorFlow Lite कन्वर्टर का उपयोग करके परिवर्तित नहीं किया जा सकता है, क्योंकि उन्हें मोबाइल-फ्रेंडली स्रोत मॉडल बनाने के एक मध्यवर्ती चरण की आवश्यकता होती है। ऊपर लिंक की गई स्क्रिप्ट इस चरण को पूरा करती हैं।
दोनों TF1 और TF2 निर्यात स्क्रिप्ट में ऐसे पैरामीटर हैं जो बड़ी संख्या में आउटपुट ऑब्जेक्ट या धीमे, अधिक सटीक पोस्ट प्रोसेसिंग को सक्षम कर सकते हैं। समर्थित तर्कों की विस्तृत सूची देखने के लिए कृपया स्क्रिप्ट के साथ --help
उपयोग करें।
वर्तमान में, ऑन-डिवाइस अनुमान केवल SSD मॉडल के साथ ऑप्टिमाइज़ किया गया है। सेंटरनेट और एफिशिएंटडेट जैसे अन्य आर्किटेक्चर के लिए बेहतर समर्थन की जांच की जा रही है।
अनुकूलित करने के लिए मॉडल कैसे चुनें?
प्रत्येक मॉडल अपनी सटीकता (एमएपी मूल्य द्वारा परिमाणित) और विलंबता विशेषताओं के साथ आता है। आपको एक ऐसा मॉडल चुनना चाहिए जो आपके उपयोग-मामले और इच्छित हार्डवेयर के लिए सबसे अच्छा काम करे। उदाहरण के लिए, एज टीपीयू मॉडल Google के एज टीपीयू पर पिक्सेल 4 पर अनुमान लगाने के लिए आदर्श हैं।
आप मॉडल का मूल्यांकन करने और उपलब्ध सबसे कुशल विकल्प चुनने के लिए हमारे बेंचमार्क टूल का उपयोग कर सकते हैं।
कस्टम डेटा पर फ़ाइन-ट्यूनिंग मॉडल
हम जो पूर्व-प्रशिक्षित मॉडल प्रदान करते हैं, उन्हें 90 वर्गों की वस्तुओं का पता लगाने के लिए प्रशिक्षित किया जाता है। कक्षाओं की पूरी सूची के लिए, मॉडल मेटाडेटा में लेबल फ़ाइल देखें।
मूल सेट में नहीं कक्षाओं को पहचानने के लिए आप एक मॉडल को फिर से प्रशिक्षित करने के लिए स्थानांतरण सीखने के रूप में जाने वाली तकनीक का उपयोग कर सकते हैं। उदाहरण के लिए, मूल प्रशिक्षण डेटा में केवल एक सब्जी होने के बावजूद, आप कई प्रकार की सब्जियों का पता लगाने के लिए मॉडल को फिर से प्रशिक्षित कर सकते हैं। ऐसा करने के लिए, आपको प्रत्येक नए लेबल के लिए प्रशिक्षण छवियों के एक सेट की आवश्यकता होगी जिसे आप प्रशिक्षित करना चाहते हैं। अनुशंसित तरीका TensorFlow Lite मॉडल मेकर लाइब्रेरी का उपयोग करना है, जो कोड की कुछ पंक्तियों के साथ कस्टम डेटासेट का उपयोग करके TensorFlow Lite मॉडल के प्रशिक्षण की प्रक्रिया को सरल करता है। यह आवश्यक प्रशिक्षण डेटा और समय की मात्रा को कम करने के लिए ट्रांसफर लर्निंग का उपयोग करता है। आप कुछ उदाहरणों के साथ पूर्व-प्रशिक्षित मॉडल को फ़ाइन-ट्यूनिंग करने के उदाहरण के रूप में फ्यू-शॉट डिटेक्शन Colab से भी सीख सकते हैं।
बड़े डेटासेट के साथ फाइन-ट्यूनिंग के लिए, TensorFlow Object Detection API: TF1 , TF2 के साथ अपने खुद के मॉडल को प्रशिक्षित करने के लिए इन गाइडों पर एक नज़र डालें। एक बार प्रशिक्षित होने के बाद, उन्हें यहां दिए गए निर्देशों के साथ TFLite के अनुकूल प्रारूप में परिवर्तित किया जा सकता है: TF1 , TF2