क्या एक संवेदी तंत्रिका नेटवर्क के लिए इनपुट के रूप में चर आकार की छवियां देना संभव है?


17

क्या हम वस्तु का पता लगाने के लिए एक दृढ़ तंत्रिका नेटवर्क के इनपुट के रूप में परिवर्तनशील आकार के साथ चित्र दे सकते हैं? यदि संभव हो, तो हम ऐसा कैसे कर सकते हैं?


लेकिन अगर हम छवि को क्रॉप करने की कोशिश करते हैं, तो हम छवि के कुछ हिस्से को खो देंगे और यदि हम आकार बदलने की कोशिश करेंगे, तो, छवि की स्पष्टता खो जाएगी। क्या इसका मतलब यह है कि अंतर्निहित नेटवर्क संपत्ति का उपयोग करना सबसे अच्छा है अगर छवि स्पष्टता विचार का मुख्य बिंदु है?

जवाबों:


9

इसे करने के कई तरीके हैं। इनमें से अधिकांश स्टैकऑवरफ्लो, क्वोरा और अन्य सामग्री वेबसाइटों पर पहले ही कई पदों पर आच्छादित हो चुके हैं।

संक्षेप में, सूचीबद्ध अधिकांश तकनीकों को समाधान के दो वर्गों में वर्गीकृत किया जा सकता है, अर्थात्।

  1. रूपांतरण
  2. निहित नेटवर्क संपत्ति

परिवर्तनों में, कोई इस तरह की तकनीकों को देख सकता है

  • आकार बदलें , जो बताई गई सभी तकनीकों में से सबसे सरल है
  • फसल , जिसे सूचना के नुकसान के साथ फिसलने वाली खिड़की या एक बार की फसल के रूप में किया जा सकता है

एक नेटवर्क में भी देख सकते हैं कि परत व्यवहार के आधार पर इनपुट के आकार के लिए प्रतिरक्षा गुण होना स्वाभाविक है जो नेटवर्क बनाता है। इस के उदाहरण के संदर्भ में पाया जा सकता है,

  • पूरी तरह से कन्वेन्शनल नेटवर्क (FCN) , जिसमें इनपुट आकार की कोई सीमा नहीं है क्योंकि एक बार कर्नेल और स्टेप साइज का वर्णन करने के बाद, प्रत्येक लेयर पर कनवल्शन इसी इनपुट के अनुसार उचित आयाम आउटपुट उत्पन्न कर सकता है।

  • स्थानिक पिरामिड पूलिंग (एसपीपी) , FCNs एक पूरी तरह से जुड़ा हुआ सघन परत नहीं है और इसलिए छवि का आकार करने के लिए नास्तिक हैं, लेकिन कहते हैं कि अगर एक इनपुट परिवर्तनों पर विचार किए बिना सघन परत का उपयोग करना चाहता है, तो वहाँ एक दिलचस्प बात यह है कागज कि में परत बताते हैं एक गहरा सीखने का नेटवर्क।

संदर्भ:

  1. https://www.quora.com/How-are-variably-shaped-and-sized-images-given-inputs-to-convoluted-neural-networks
  2. /ai/2008/how-can-neural-networks-deal-with-varying-input-sizes
  3. https://discuss.pytorch.org/t/how-to-create-convnet-for-variable-size-input-dimension-images/1906

पुनश्च मैं कुछ तकनीकों का हवाला देते हुए चूक गया। यह एक संपूर्ण सूची होने का दावा नहीं कर रहा है।


1
यह सिद्धांत में ठीक लगता है, लेकिन Tensorflow पर काम नहीं करता है। क्या किसी के पास इसके लिए कोई कार्यान्वयन है?
होसैन

1
@ होसेन मैं कुछ मुद्दों पर व्यावहारिक कार्यान्वयन में भी भाग गया, लेकिन मुझे कुछ सीमाओं के साथ आज Tensorflow Keras 2.x में काम करने वाला एक चर आकार CNN मिला। मैंने कुछ व्यावहारिक विवरणों के संबंध में अपने उत्तर में दृष्टिकोण की रूपरेखा पोस्ट की है। शुभकामनाएँ!
जे ट्राना

4

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

1. ग्लोबल पूलिंग: कंसिस्टेंट लेयर्स के अंत में पूरी तरह से कनेक्टेड लेयर्स से बचें, और इसके बजाय (N, H, W, C) के आकार से अपने फ़ीचर मैप्स को कम करने के लिए पूलिंग (जैसे ग्लोबल एवरेज पूलिंग) का इस्तेमाल करें (ग्लोबल पूल से पहले) ) आकार (एन, 1,1, सी) (वैश्विक पूल के बाद), जहां के लिए:

एन = संख्या minibatch नमूनों की
एच = विशेषता मानचित्र के स्थानिक ऊंचाई
डब्ल्यू = स्थानिक चौड़ाई विशेषता मानचित्र के
सी = सुविधा नक्शे (चैनलों की संख्या)

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

2. चर आकार पूलिंग:विभिन्न इनपुट आकारों के लिए समान सुविधा मानचित्र आकार प्राप्त करने के लिए चर आकार पूलिंग क्षेत्रों का उपयोग करें।

3. फसल / आकार / पैड इनपुट छवियां: आप अपने इनपुट चित्रों को सभी प्रकार के समान करने के लिए पुनर्विक्रय / क्रॉप / पैड कर सकते हैं।


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

। 4. नई पूरी तरह से जुड़ी हुई परतें बनाएं: आप मूल रूप से पूरी तरह से जुड़ी हुई परतों को पूरी तरह से खोद सकते हैं और आपको जिस आयाम की आवश्यकता है, उसके साथ एक नई पूरी तरह से जुड़ी परत को आरंभीकृत कर सकते हैं और इसे खरोंच से प्रशिक्षित कर सकते हैं।

5. पूरी तरह से जुड़ी हुई परत को एक संधि के रूप में समझें: आम तौर पर, हम पूरी तरह से जुड़ी हुई परत को खिलाने से पहले (N, H, W, C) से (N, H * W * C) फीचर मैप को फिर से खोल देते हैं। लेकिन आप (एच, डब्ल्यू) के ग्रहणशील क्षेत्र के साथ एक दृढ़ विश्वास के रूप में पूरी तरह से जुड़े परत का भी इलाज कर सकते हैं। फिर, आप इस कर्नेल को अपने फीचर मैप्स से उनके आकार की परवाह किए बिना मना सकते हैं (यदि आवश्यक हो तो शून्य पैडिंग का उपयोग करें) [http://cs231n.github.io/transfer-learning/ ]।


1

मुझे आज इस समस्या के माध्यम से काम करना था इसलिए मैंने सोचा कि जो काम किया है उसे साझा करूँगा। मैंने पाया है कि वेब पर काफी कुछ "यह सिद्धांत में काम कर सकता है" जवाब और tidbits लेकिन कम से कम एक व्यावहारिक "यहाँ है कि आप इसे कैसे लागू करें"।

Tensorflow Keras का उपयोग करके इसे लागू करने के लिए, मुझे निम्नलिखित कार्य करने थे। शायद कोई और मिल सकता है इनमें से कुछ को संशोधित, आराम से या गिराया जा सकता है।

  1. नेटवर्क के इनपुट को इनपुट_शैप पर प्लेसहोल्डर आयाम के रूप में "कोई नहीं" का उपयोग करके एक चर आकार के इनपुट के लिए अनुमति दें। फ्रेंकोइस चॉलेट का जवाब यहां देखें ।
  2. जब तक एक वैश्विक पूलिंग ऑपरेशन नहीं हुआ है (जैसे GlobalMaxPooling2D) तब तक संकेंद्रित परतों का उपयोग करें। फिर घने परतों आदि का उपयोग किया जा सकता है क्योंकि आकार अब तय हो गया है।
  3. केवल 1 के बैच आकार का उपयोग करें। यह एक बैच के भीतर मिश्रित आकारों से निपटने से बचता है।
  4. एक छोटी सी कस्टम अनुक्रम लिखें जो इनपुट की सूची से आकार 1 के बैच बनाता है। मैंने एक एकल Numpy सरणी के अंदर विभिन्न आकारों से निपटने से बचने के लिए ऐसा किया।
  5. प्रशिक्षण और सत्यापन के लिए अपने कस्टम अनुक्रम पर Model.fit_generator का उपयोग करें। (मॉडल बनाम एफिट)
  6. किसी कारण से, Model.predict_generator ऊपर के रूप में अनुक्रम का उपयोग करते समय भी पॉप हुआ। मुझे व्यक्तिगत इनपुट पर Model.predict का उपयोग करने का सहारा लेना पड़ा।

ध्यान दें कि Model.predict पर कॉल ने प्रदर्शन के बारे में शिकायत की - जो समाधान की अक्षमता को देखते हुए अनिश्चित है - लेकिन यह काम करता है!


-2

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


3
आप गलत नहीं हैं, लेकिन आपका उत्तर बहुत जानकारीपूर्ण नहीं है - इसका विस्तार करने के बारे में यह बताने के लिए कि अधिकांश आधुनिक सीएनएन चर आकार की छवियों के साथ क्यों काम कर सकते हैं? इसके अलावा, इस परिवर्तनशीलता की सीमाएं क्या हैं (उदाहरण के लिए, एक ही मिनी-बैच में विभिन्न आकार की छवियों को मिलाने की कोशिश न करें ...)? ज्यादातर लोग पुराने जमाने के एमएलपी (इनपुट की लंबाई तय है) या पुराने जमाने वाले सीएनएन (एलेक्सनेट एंड वीजीजी -1 एक्स) से आते हैं, वे अपनी रेशमी Flattenपरतों के साथ यह नहीं समझते कि आधुनिक सीएनएन किसी भी आकार की छवियों को कैसे ले सकते हैं।
डेल्टा 18
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.