दिलचस्प पोस्ट
घंटों से 'एक्स' मात्रा जोड़ें जावा में जनरेट क्या हैं? एक संख्या (1, 2, 3) को एक स्ट्रिंग में बदलने (एक, दो, तीन) PHP में खिड़कियों में एक कंसोल विंडो खोलने से मिनगू (जी ++) के साथ संकलित एक प्रोग्राम को कैसे रोकें विज़ुअल स्टूडियो 2015 यूनिट परीक्षणों को नहीं खोजता है कैसे सी में एक समारोह में 2 डी सरणी (मैट्रिक्स) पारित करने के लिए? एनएसडीटे वर्ष / महीना / दिन प्राप्त करें आप एक नियमित अभिव्यक्ति में एक चर का उपयोग कैसे करते हैं? सी # में डायनामिक एन्यूम सदस्यों के रूप में वस्तुओं के साथ सादे जावास्क्रिप्ट ऑब्जेक्ट के माध्यम से लूप कैसे करें? <?> और <में क्या अंतर है? ऑब्जेक्ट> जावा जेनेरिक्स में फैली हुई है? कैसे एक तत्व अन्य तत्वों अतिव्यापी है की जांच करने के लिए? नई asp.net चार्टिंग नियंत्रण – क्या वे एमवीसी (अंततः) के साथ काम करेंगे? ब्रॉडकास्ट रिसीवर के भीतर से अलर्ट डाइलॉग ?? क्या यह किया जा सकता है? संगतता रखने के लिए एंड्रॉइड में बहिष्कृत वर्गों से कैसे निपटें

स्वयं डेटासेट पर ट्रेन टेंस्फोर्लो ऑब्जेक्ट डिटेक्शन

इस कार्य को हासिल करने की कोशिश में कुछ दिन व्यतीत करने के बाद, मैं अपने अनुभव को साझा करना चाहूंगा कि मैं इस प्रश्न का उत्तर देने के बारे में कैसे चला गया हूं:

मैं अपने खुद के डेटासेट का उपयोग करने के लिए टीएस ऑब्जेक्ट डिटेक्शन का उपयोग कैसे करूं?

वेब के समाधान से एकत्रित समाधान "स्वयं डेटासेट पर ट्रेन टेंस्फोर्लो ऑब्जेक्ट डिटेक्शन"

यह मानता है कि मॉड्यूल पहले ही इंस्टॉल हो चुका है। कृपया अपने दस्तावेज़ देखें यदि नहीं

अस्वीकरण

यह जवाब ऑब्जेक्ट डिटेक्शन मॉड्यूल को प्रशिक्षण देने का सही या एकमात्र तरीका नहीं है। यह बस मेरे अनुभव को साझा कर रहा है और मेरे लिए क्या काम किया है मैं सुझावों के लिए खुला हूँ और इस बारे में और अधिक सीख रहा हूं क्योंकि मैं सामान्य रूप में एमएल में अभी भी नया हूं।

टी एल; डॉ

  1. अपना स्वयं का PASCAL VOC प्रारूप डेटासेट बनाएं
  2. इससे TFRecords उत्पन्न करें
  3. एक पाइपलाइन कॉन्फ़िगर करें
  4. कल्पना

इस उत्तर के प्रत्येक अनुभाग में एक संबंधित संपादन (नीचे देखें) शामिल हैं। प्रत्येक अनुभाग को पढ़ने के बाद, कृपया इसके संपादन और स्पष्टीकरण के लिए पढ़ें। प्रत्येक अनुभाग के लिए सुधार और सुझाव जोड़े गए थे

उपकरणों का इस्तेमाल

LabelImg : PASCAL VOC स्वरूप एनोटेशन बनाने के लिए एक उपकरण।

1. अपना स्वयं का पास्कल वीओसी डाटासेट बनाएं

पी एस: सादगी के लिए, मेरे नाम के सम्मेलन का नामकरण फ़ोल्डर पास्कल वीओसी 2012 के अनुसार है

मई 2012 डेटासेट में एक झांकना, आप फ़ोल्डर को निम्नलिखित संरचना के रूप में देखेंगे

+VOCdevkit +VOC2012 +Annotations +ImageSets +Action +Layout +Main +Segmentation +JPEGImages +SegmentationClass +SegmentationObject

समय के लिए, निम्न फ़ोल्डरों में संशोधन किए गए थे:

टिप्पणियां : यह सभी छवियां हैं 'संबंधित XML फ़ाइलों को रखा जाएगा। एनोटेशन बनाने के लिए उपर्युक्त उपकरण का उपयोग करें। <truncated> और <difficulty> टैग के बारे में चिंता न करें क्योंकि उन्हें प्रशिक्षण और eval binaries द्वारा अनदेखा कर दिया जाएगा।

JPEG छवियों: आपके वास्तविक चित्रों का स्थान। सुनिश्चित करें कि वे जेपीईजी प्रकार के होते हैं क्योंकि वर्तमान में इसकी उपलब्ध स्क्रिप्ट का उपयोग करके TFRecords बनाने के लिए इसका समर्थन किया गया है।

ImageSets-> मुख्य : यह केवल पाठ फाइलों के होते हैं प्रत्येक वर्ग के लिए, एक समान train.txt , trainval.txt और val.txt मौजूद है । नीचे वीओसी 2012 फ़ोल्डर में एयरोपल्ने_ट्रेन.टी.टी . की सामग्री का एक नमूना है

 2008_000008 -1 2008_000015 -1 2008_000019 -1 2008_000023 -1 2008_000028 -1 2008_000033 1 

संरचना मूल रूप से छवि नाम है जिसके बाद बुलियन कहता है कि संबंधित ऑब्जेक्ट उस छवि में मौजूद है या नहीं। उदाहरण के लिए उदाहरण 2008_000008 में एक हवाई जहाज शामिल नहीं है, इसलिए एक -1 के साथ चिह्नित किया गया है, लेकिन 2008_000033 छवि है।

मैंने इन पाठ फ़ाइलों को उत्पन्न करने के लिए एक छोटी पायथन स्क्रिप्ट लिखी है। बस छवि नामों के माध्यम से पुनरावृत्त करें और ऑब्जेक्ट अस्तित्व के लिए उनके पास 1 या -1 असाइन करें। मैंने छवि नामों को फेरबदल करके मेरी पाठ फ़ाइलों में कुछ यादृच्छिकता जोड़ दी थी।

{Classname} _val.txt फ़ाइलों में परीक्षण सत्यापन डेटासेट शामिल हैं। प्रशिक्षण के दौरान परीक्षण डेटा के रूप में इसे सोचें आप अपने डेटासेट को प्रशिक्षण और सत्यापन में विभाजित करना चाहते हैं। अधिक जानकारी यहां पाई जा सकती है । इन फ़ाइलों का प्रारूप प्रशिक्षण के समान है।

इस बिंदु पर, आपका फ़ोल्डर संरचना होना चाहिए

+VOCdevkit +VOC2012 +Annotations --(for each image, generated annotation) +ImageSets +Main --(for each class, generated *classname*_train.txt and *classname*_val.txt) +JPEGImages --(a bunch of JPEG images)


1.1 उत्पन्न लेबल नक्शा

डेटासेट तैयार होने के साथ, हमें संबंधित लेबल मानचित्र बनाना होगा। मॉडल / ऑब्जेक्ट_डेटाइज़ / डेटा पर जाएं और pascal_label_map.pbtxt खोलें।

इस फ़ाइल में एक JSON शामिल है जो प्रत्येक आइटम के लिए एक आईडी और नाम निर्दिष्ट करता है। अपने वांछित वस्तुओं को प्रदर्शित करने के लिए इस फाइल में संशोधन करें


2. उत्पन्न TFRecords

यदि आप अपने कोड को विशेष रूप से इस लाइन में देखते हैं , तो वे स्पष्ट रूप से एरोप्लेन_ट्रेन । क्युरियो दिमाग के लिए, यहां क्यों है इस फ़ाइल का नाम अपनी किसी भी क्लास ट्रेन टेक्स्ट फ़ाइल में बदलें।

सुनिश्चित करें कि VOCdevkit मॉडल / object_detection के अंदर है, तो आप आगे जा सकते हैं और TFRecords उत्पन्न कर सकते हैं।

कृपया पहले अपने कोड के माध्यम से जाने के लिए आपको किसी भी समस्या में भाग लेना चाहिए। यह आत्म व्याख्यात्मक और अच्छी तरह से प्रलेखित है।


3. पाइपलाइन कॉन्फ़िगरेशन

इस सेगमेंट को कवर करने के लिए निर्देश स्वयं स्पष्टीकरण होना चाहिए। नमूना कॉन्फ़िग्स object_detection / samples / configs में पाई जा सकती हैं

उन लोगों के लिए जिन्हें मैंने खरोंच से ट्रेनिंग की तलाश की थी, बस fine_tune_checkpoint और से- from_detection_checkpoint नोड्स को निकालना सुनिश्चित करें संदर्भ के लिए मेरी कॉन्फ़िग फ़ाइल कैसी दिखती है I

यहां से आप ट्यूटोरियल जारी रख सकते हैं और प्रशिक्षण प्रक्रिया को चला सकते हैं।


4. विज़ुअलाइज़ करें

सीखने की प्रक्रिया को देखने में सक्षम होने के लिए प्रशिक्षण के समानांतर में eval को चलाने के लिए सुनिश्चित करें। जोनाथन हुआंग को उद्धृत करने के लिए

सबसे अच्छा तरीका है सिर्फ eval.py बाइनरी चलाने के लिए हम आम तौर पर इस द्विआधारी को प्रशिक्षण के समानांतर चलाते हैं, इसे निर्देशित करने वाली निर्देशिका में इंगित करते हैं जिसे प्रशिक्षित किया जा रहा है। Eval.py बाइनरी एक eval_dir लिए लॉग eval_dir जो आप निर्दिष्ट करते हैं जो आप फिर Tensorboard के साथ इंगित कर सकते हैं

आप यह देखना चाहते हैं कि पहले कुछ घंटों में एमएपी ने "बंद" किया है, और तब आप देखना चाहते हैं कि यह कब होता है इन भूखंडों को देखे बिना यह बताना मुश्किल है कि आपको कितने कदम चाहिए।


संपादित करें I (28 जुलाई '17):

मुझे इस बारे में ज्यादा ध्यान देने की मेरी उम्मीद नहीं थी, इसलिए मैंने वापस आना और उसकी समीक्षा करने का फैसला किया।

उपकरण

मेरे साथी एप्पल प्रयोक्ताओं के लिए, आप वास्तव में एनोटेशन के लिए रीक्टलैबल का उपयोग कर सकते हैं।

पास्कल वीओसी

चारों ओर खुदाई करने के बाद, मुझे अंत में पता चला कि trainval.txt वास्तव में प्रशिक्षण और सत्यापन डेटासेट का संघ है।

प्रारूप को समझने के लिए कृपया अपनी आधिकारिक विकास किट को देखें।

लेबल नक्शा पीढ़ी

मेरे लेखन के समय, आईडी 0 प्रतिनिधित्व करता है none_of_the_above यह अनुशंसा की जाती है कि आपकी आईडी 1 से शुरू हो

कल्पना

अपने मूल्यांकन को चलाने और निर्देशित करने के बाद, आपकी Eval निर्देशिका को निर्देशित करें, यह प्रत्येक श्रेणी के प्रदर्शन के साथ आपको प्रत्येक श्रेणी के एमएपी दिखाएगा। यह अच्छा है, लेकिन मुझे अपना प्रशिक्षण डेटा और साथ ही समान रूप से Eval के साथ देखना पसंद है।

ऐसा करने के लिए, एक अलग बंदरगाह पर tensorboard चलाने के लिए और यह अपनी ट्रेन निर्देशिका को इंगित करें

 tensorboard --logdir=${PATH_TO_TRAIN} --port=${DESIRED_NUMBER} 

मैंने अपने अनुभव के बारे में माध्यम पर एक ब्लॉग पोस्ट लिखा था, साथ ही साथ मैं अपने डेटासेट पर एक वस्तु डिटेक्टर (विशेष रूप से, यह एक रैकून डिटेक्टर) को प्रशिक्षित किया है, Tensorflow के साथ। यह अन्य लोगों के लिए उपयोगी भी हो सकता है और स्पीरिफा के उत्तर के लिए मानार्थ है।