सीएनएन में बड़े आकारों की छवियों को कैसे संभालना है?


15

मान लीजिए कि CNN में उपयोग करने के लिए 24K x 2400 आकार की 10K छवियों की आवश्यकता है। मेरे विचार से पारंपरिक कंप्यूटर जो लोग उपयोग करते हैं, वे उपयोग के होंगे। अब सवाल यह है कि ऐसे बड़े इमेज साइज को कैसे हैंडल किया जाए जहां डाउनस्मैपलिंग के विशेषाधिकार न हों।

यहाँ सिस्टम आवश्यकताएँ हैं: -

उबंटू 16.04 64-बिट रैम 16 जीबी जीपीयू 8 जीबी एचडीडी 500 जीबी

1) क्या ऐसी बड़ी छवियों को संभालने के लिए कोई तकनीक है जिसे प्रशिक्षित किया जाना है?
2) क्या बैच आकार का उपयोग करने के लिए उचित है?
3) क्या हार्डवेयर संसाधनों में कोई वृद्धि या कमी लेने की कोई सावधानी है जो मैं कर सकता हूं?

जवाबों:


14

अब सवाल यह है कि ऐसे बड़े इमेज साइज को कैसे हैंडल किया जाए जहां डाउनस्मैपलिंग के कोई विशेषाधिकार न हों

मुझे लगता है कि downsampling द्वारा आप CNN में पारित करने से पहले इनपुट नीचे स्केलिंग का मतलब है । संकेंद्रित परत एक नेटवर्क के भीतर छवि को नीचे उतारने की अनुमति देती है, एक बड़ी स्ट्राइड चुनकर, जो अगली परतों के लिए संसाधनों को बचाने जा रही है। वास्तव में, यह वही करना है, अन्यथा आपका मॉडल GPU में फिट नहीं होगा।

1) क्या ऐसी बड़ी छवियों को संभालने के लिए कोई तकनीक है जिसे प्रशिक्षित किया जाना है?

आमतौर पर शोध छवियों को एक प्रतिध्वनि आकार के पैमाने पर रखते हैं। लेकिन अगर यह आपके लिए कोई विकल्प नहीं है, तो आपको अपने सीएनएन को प्रतिबंधित करना होगा। शुरुआती परतों में डाउनसमलिंग के अलावा, मैं आपको एफसी लेयर (जो आमतौर पर अधिकांश मापदंडों को लेता हूं) को कंफर्टेबल लेयर के पक्ष में निकालने की सलाह दूंगा । इसके अलावा, आपको प्रत्येक युग में अपना डेटा स्ट्रीम करना होगा, क्योंकि यह आपके GPU में फिट नहीं होगा।

ध्यान दें कि इस में से कोई भी प्रारंभिक परतों में भारी कम्प्यूटेशनल लोड को नहीं रोकेगा, बिल्कुल इसलिए क्योंकि इनपुट इतना बड़ा है: कनविक्शन एक महंगा ऑपरेशन है और पहली परतें प्रत्येक फॉरवर्ड और बैकवर्ड पास में बहुत सारे प्रदर्शन करेगी । संक्षेप में, प्रशिक्षण धीमा होगा।

2) क्या बैच आकार का उपयोग करने के लिए उचित है?

यहाँ एक और समस्या है। एक एकल छवि लेता है 2400x2400x3x4(प्रति पिक्सेल 3 चैनल और 4 बाइट्स) जो ~ 70Mb है, इसलिए आप शायद ही एक बैच आकार 10. बर्दाश्त कर सकते हैं। अधिक वास्तविक रूप से 5 होगा। ध्यान दें कि अधिकांश मेमोरी सीएनएन मापदंडों द्वारा ली जाएगी। मुझे लगता है कि इस मामले में यह 32-बिट के बजाय 16-बिट मान का उपयोग करके आकार को कम करता है - इस तरह आप बैचों को दोगुना करने में सक्षम होंगे।

3) क्या हार्डवेयर संसाधनों में कोई वृद्धि या कमी लेने की कोई सावधानी है जो मैं कर सकता हूं?

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


1
धन्यवाद। मैंने पहले से ही इस उत्तर में आपके द्वारा दिए गए कुछ सुझावों का पालन किया है। अच्छा उत्तर।
वाटररकेट 8236

5

आमतौर पर छवियों के लिए फीचर सेट पिक्सेल घनत्व मूल्य होता है और इस मामले में यह काफी बड़ा फीचर सेट होगा; छवियों के नमूने के नीचे भी अनुशंसित नहीं है क्योंकि आप खो सकते हैं (वास्तव में) ढीले महत्वपूर्ण डेटा।

[१] लेकिन कुछ तकनीकें हैं जो सुविधा सेट आकार को कम करने में आपकी मदद कर सकती हैं, जैसे पीसीए (सिद्धांत घटक विश्लेषण) आपको महत्वपूर्ण फीचर सबसेट के चयन में मदद करता है।

विस्तृत जानकारी के लिए लिंक http://spark.apache.org/docs/latest/ml-features.html#pca देखें

[२] इसके अलावा अपने न्यूरल नेटवर्क को प्रशिक्षित करते समय कम्प्यूटेशनल खर्च को कम करने के लिए, आप स्टोचस्टिक ग्रेडिएंट डिसेंट का उपयोग कर सकते हैं, न कि ग्रेडिएंट डिसेंट दृष्टिकोण के पारंपरिक उपयोग के बजाय, जो प्रत्येक सेशन में प्रशिक्षण के लिए आवश्यक डेटासेट के आकार को कम करेगा। इस प्रकार आपके डेटासेट का आकार एक पुनरावृत्ति में उपयोग किया जाएगा, इस प्रकार नेटवर्क को प्रशिक्षित करने के लिए आवश्यक समय कम हो जाएगा।

उपयोग किए जाने वाले सटीक बैच आकार प्रशिक्षण डेटासेट और परीक्षण डेटासेट के लिए आपके वितरण पर निर्भर है, एक अधिक सामान्य उपयोग 70-30 है। जहाँ आप आवश्यक समय को कम करने के लिए उपर्युक्त स्टोचस्टिक दृष्टिकोण का उपयोग कर सकते हैं।

स्टोकेस्टिक ग्रेडिएंट डिसेंट के लिए विवरण http://scikit-learn.org/stable/modules/sgd.html

[३] हार्डवेयर लगता है कि उन्नयन के लिए उपयुक्त होना चाहिए, फिर भी यदि आवश्यक हो तो AWS जैसे क्लाउड समाधान देखें जहाँ आप उपयोग की सीमा तक मुफ्त खाता सदस्यता प्राप्त कर सकते हैं।


जवाब के लिए धन्यवाद। अधिक जानकारी मिलने पर उत्तर को अपडेट करें।
वाटररकेट 8236

स्टोचस्टिक ग्रेडिएंट डिसेंट पर उस लिंक के लिए धन्यवाद, और एआई में आपका स्वागत है!
DukeZhou

2

ऐसे बड़े डेटा को आपकी मेमोरी में लोड नहीं किया जा सकता है। दो में विभाजित कर सकते हैं:

  1. अपनी सभी छवियों को छोटे आयामों में पुनर्विक्रय करें। आप उन्हें 112x112 पिक्सेल पर पुनर्विक्रय कर सकते हैं। आपके मामले में, क्योंकि आपके पास एक चौकोर छवि है, तो फसल की कोई आवश्यकता नहीं होगी। आप अभी भी इन सभी छवियों को एक लक्ष्य में अपनी रैम में लोड नहीं कर पाएंगे।

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


3
आप 112x112 पिक्सेल का आकार क्यों चुनेंगे? यह 2 की कोई शक्ति नहीं है और 2400 का भाजक नहीं है।
एंडी आर

@AndiR। ये रही बात। जब इनपुट आयाम की बात आती है, तो कोई भी आकार चुनने के लिए स्वतंत्र है। इसका कारण यह है, अगर नेटवर्क में कोई भी आयाम असंगतताएं हैं, तो इसे आसानी से शून्य पैडिंग का उपयोग करके हल किया जा सकता है। इस प्रकार, इनपुट के आकार के लिए कोई निश्चित पद्धति नहीं है। किसी को सावधान रहना चाहिए कि यह सुनिश्चित करना बहुत महत्वपूर्ण है कि नमूनाकरण इनपुट गुणवत्ता को प्रभावित नहीं करता है। कृपया इस पेपर को देखें जो 112x112 आयाम का उपयोग करता है। ( cv-foundation.org/openaccess/content_iccv_2015/papers/… )
चट्टानीe
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.