तंत्रिका नेटवर्क - सबसे अधिक समान चित्र खोजें


11

मैं पायथन, स्किट-लर्न और केरस के साथ काम कर रहा हूं। मेरे पास सामने वाले घड़ियों की 3000 हज़ार छवियां हैं जैसे निम्नलिखित: Watch_1 , Watch_2 , Watch_3

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

ऐसा करने के लिए सबसे कुशल मशीन लर्निंग एल्गोरिदम क्या है?

उदाहरण के लिए, इस लिंक का अनुसरण करके मेरे मन में दो अलग-अलग समाधान हैं:

1) एक सीएनएन को फीचर एक्सट्रैक्टर के रूप में उपयोग करना और इनपुट इमेज के संदर्भ में प्रत्येक जोड़ी छवियों के लिए इन सुविधाओं के बीच की दूरी की तुलना करना।

2) छवियों की तुलना करने के लिए एक सियामी तंत्रिका नेटवर्क में दो सीएनएन का उपयोग करना।

क्या ये दो विकल्प इस कार्य के लिए सबसे अच्छे हैं या आप कुछ और सुझाव देंगे?

क्या आप इस कार्य के लिए किसी पूर्व-प्रशिक्षित तंत्रिका नेटवर्क (पूर्व-निर्धारित हाइपरपामेटर्स के साथ) को जानते हैं?

मुझे इस बारे में StackOverflow पर कुछ दिलचस्प पोस्ट मिली हैं, लेकिन वे बहुत पुराने हैं: Post_1 , Post_2 , Post_3


साइट पर आपका स्वागत है! एक एम्बेडिंग सीखें (मैं एक हजार बिट्स के आदेश पर तेजी से पुनर्प्राप्ति के लिए एक बाइनरी हैश की सिफारिश करता हूं ) फिर समानता खोज करें।
एमर

! यह यहाँ होने के लिए ... haha ... हाँ, यह एक अच्छा विचार है और मैं पहले से ही इस पत्र पढ़ा था ... मेरा सौभाग्य है
निर्वासित

जवाबों:


4

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

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

यह काम आपके द्वारा पोस्ट किए गए (एक अच्छे टूल सेट और अधिक विस्तृत पेपर के साथ) की तुलना में बहुत अधिक हालिया (2016/17) है ।

क्यों ट्रिपल aka डीप रैंकिंग का उपयोग कर?

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

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

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


आपकी प्रतिक्रिया के लिए धन्यवाद। यह एक दिलचस्प एक है (मैंने इसे ऊपर उठाया)। ट्रिपल के बारे में विचार अच्छा है, भले ही मुझे यकीन नहीं है कि छवियों के ट्रिपल का उपयोग करना आवश्यक रूप से मेरे कार्य के लिए छवियों के जोड़े का उपयोग करने से बेहतर है। यदि आप चाहते हैं, तो आप इसे अपनी पोस्ट पर अधिक समझा सकते हैं। इसके अलावा मैं TiefVision पर एक नज़र होगा।
निर्वासित

@Universalis संकेत (और upvote) के लिए धन्यवाद। मैंने अपने उत्तर को ट्रिपल और तर्क के बारे में कुछ और विवरणों के साथ अद्यतन किया। पेपर भी बहुत अच्छा लिखा गया है इसलिए सभी विवरणों पर एक नज़र डालें। हालांकि TiefVision और DeepRanking के आने के बाद से इसे करने के लिए नए फैंसी तरीके हो सकते हैं।
Gegenwind

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

हम्म शायद मैं आपके दृष्टिकोण को गलत समझा। ट्रिपलेट तुलनात्मक जानकारी प्रदान करता है कि छवि 1 छवि 2 की तुलना में छवि 3 के करीब है। केवल 2 छवियां और बताते हुए "ये 2 समान हैं" में एक तुलनात्मक कारक का अभाव है "समान सम्मान क्या" क्योंकि इस दृष्टिकोण में आप मान लेते हैं कि समतल दूरी सुविधा वेक्टर आपको पर्याप्त नहीं बताता है। दूसरे शब्दों में: आप ऑर्डर द्वारा समानता सीखते हैं और आपके पास ऑर्डर करने के लिए कम से कम 2 आइटम होने के बिना कमी है।
Gegenwind

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

2

मैं VGG-16 की तरह एक क्लासिफायरियर चुनूंगा, जो इमेजनेट कक्षाओं पर अच्छा काम करता है। फिर, इसके माध्यम से अपनी घड़ी की छवियां चलाएँ। निश्चित रूप से, आप उम्मीद कर सकते हैं कि आउटपुट उच्च संभावना के साथ ज्यादातर "घड़ी" हो।

हालाँकि, फिर आपको अतिरिक्त सुविधाएँ मिलती हैं: अन्य सभी श्रेणियों का सक्रियण स्तर। यह आपको 0 और 1 के बीच एक हज़ार मान का वेक्टर प्रदान करता है।

आप नेटवर्क में विभिन्न बिंदुओं पर सक्रियण भी निकाल सकते हैं। फिर, उन सक्रियण और आउटपुट की समानता केवल दो मामलों के बीच समान होनी चाहिए, यदि छवियां समान हैं।


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

2

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

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

उदाहरण के लिए, आपको एक छवि के साथ क्लासिफायर चलाने और यह परिणाम प्राप्त करने की अनुमति देता है:

Watch1: 0.51

Watch2: 0.30

Watch3: 0.25

सीएनएन कह रहा है कि इसमें 51% विश्वास है कि Watch1 इनपुट छवि में घड़ी है। लेकिन यह भी सच है कि यह वही है जो सोचता है कि यह अधिक समान है, वॉच 2 अगले एक समान और इसी तरह होगा।

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


1
आपकी प्रतिक्रिया (upvote) के लिए धन्यवाद। हां, मेरे दिमाग में पहले से ही डेटा वृद्धि थी। हालाँकि, आपकी प्रतिक्रिया काफी अस्पष्ट है। आपके पास "प्रत्येक घड़ी के लिए एक लेबल है" से क्या मतलब है? क्या आपका मतलब है कि प्रत्येक घड़ी को व्यक्तिगत रूप से लेबल करना या उन्हें एक जोड़ी के रूप में लेबल करना, जो इस बात पर निर्भर करता है कि वे समान हैं या नहीं? (यदि यह पूर्व है तो समझाइए कि यह कुशल क्यों है)
आउटकास्ट करें

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

हम्म, हाँ अब यह अधिक स्पष्ट है कि आपका क्या मतलब था .... यह निश्चित रूप से एक अच्छा सामान्य सुझाव है: मूल बातों से शुरू करें और कदम-दर-कदम अधिक जटिल सामान पर जाएं ... किसी भी मामले में धन्यवाद ...
निर्वासित
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.