जब चित्र आकार में भिन्न हों, तो प्रशिक्षण / भविष्यवाणी के लिए छवि डेटा को कैसे प्रारूपित करें?


87

मैं अपने मॉडल को प्रशिक्षित करने की कोशिश कर रहा हूं जो छवियों को वर्गीकृत करता है। मेरे पास जो समस्या है, उनके अलग-अलग आकार हैं। मुझे अपनी छवियों / या मॉडल वास्तुकला को कैसे प्रारूपित करना चाहिए?


2
कृपया बताएं कि आपने अब तक क्या प्रयास किया है और क्या आपके लिए काम नहीं करता है।
कीथ जॉन हचिसन

16
और bam वहाँ Inception v4 का कोड जाता है। मैं उस ऑफ-द-शेल्फ टिप्पणी से असहमत हूं। थोड़ा और इनपुट अच्छा होगा - जैसे हम किस तरह के नेट के बारे में बात कर रहे हैं - लेकिन डाउनवोट्स बिल्कुल भी उचित नहीं हैं। यही कारण है कि है वहाँ एक वास्तविक समस्या।
सूर्यास्त २

4
सवाल यह है कि प्रशिक्षण के लिए ImageNet प्रारूप में उनका छवि डेटा कैसे उपयोगी है?
mskw

जवाबों:


148

आपने यह नहीं बताया कि आप किस वास्तुकला की बात कर रहे हैं। चूंकि आपने कहा था कि आप छवियों को वर्गीकृत करना चाहते हैं, इसलिए मैं इसे आंशिक रूप से पूर्णतः आंशिक रूप से पूरी तरह से जुड़ा नेटवर्क जैसे कि एलेक्सनेट, गोगेलनेट आदि मान रहा हूं। सामान्य तौर पर, आपके प्रश्न का उत्तर उस नेटवर्क प्रकार पर निर्भर करता है, जिसके साथ आप काम कर रहे हैं।

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

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

यदि वह आपकी समस्या है, तो यहां कुछ चीजें दी जा सकती हैं:

  • छवियों को स्क्वाश करने की परवाह न करें। एक नेटवर्क वैसे भी सामग्री की समझ बनाना सीख सकता है; पैमाने और परिप्रेक्ष्य वैसे भी सामग्री के लिए कुछ भी मतलब है?
  • एक विशिष्ट आकार के लिए छवियों को केंद्र-फसल। यदि आप डरते हैं कि आप डेटा खो रहे हैं, तो कई फसलें करें और इनका उपयोग अपने इनपुट डेटा को बढ़ाने के लिए करें, ताकि मूल छवि Nसही आकार की विभिन्न छवियों में विभाजित हो जाए ।
  • एक ठोस रंग के साथ छवियों को एक चौकोर आकार में पैड करें, फिर आकार दें।
  • उस का एक संयोजन करते हैं।

पैडिंग विकल्प नेटवर्क की भविष्यवाणी के लिए एक अतिरिक्त त्रुटि स्रोत पेश कर सकता है, क्योंकि नेटवर्क उन चित्रों के पक्षपाती हो सकता है (जिनमें संभावना है) ऐसी गद्देदार सीमा होती है। यदि आपको कुछ विचारों की आवश्यकता है, तो TensorFlow दस्तावेज़ीकरण की छवियाँ अनुभाग पर एक नज़र डालें , ऐसे टुकड़े हैं resize_image_with_crop_or_padजो बड़े काम को दूर ले जाते हैं।

केवल स्क्वाशिंग की परवाह न करने के लिए, यहाँ प्रसिद्ध इंसेप्शन नेटवर्क की प्रीप्रोसेसिंग पाइपलाइन का एक टुकड़ा है:

# This resizing operation may distort the images because the aspect
# ratio is not respected. We select a resize method in a round robin
# fashion based on the thread number.
# Note that ResizeMethod contains 4 enumerated resizing methods.

# We select only 1 case for fast_mode bilinear.
num_resize_cases = 1 if fast_mode else 4
distorted_image = apply_with_random_selector(
    distorted_image,
    lambda x, method: tf.image.resize_images(x, [height, width], method=method),
    num_cases=num_resize_cases)

वे इसके बारे में पूरी तरह से जानते हैं और इसे वैसे भी करते हैं।

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


11
जब आप ऑब्जेक्ट डिटेक्शन और उदाहरण सेगमेंटेशन के साथ काम कर रहे हों, तो यह विषय अधिक जटिल लगता है, क्योंकि एंकर बॉक्स साइज़ जो हाइपरपरमेटर्स भी होते हैं, अगर आपको इमेज साइज़ में उच्च विचरण वाले डेटासेट को समायोजित करने की आवश्यकता होती है।
CMCDragonkai

पहलू अनुपात एक नेटवर्क के लिए एक बहुत महत्वपूर्ण भूमिका निभाते हैं जो मंडलियों और दीर्घवृत्त के बीच अंतर करना है।
HelloGoodbye

1
एक और सामान्य अवलोकन यह है कि बैचों के लिए समान आयाम होना जरूरी नहीं है; पहला बैच 4: 3 छवियों के साथ सौदा कर सकता है, दूसरा 16: 9 आदि के साथ, जब तक घनी परतों का ध्यान रखा जाता है।
सूर्यास्त

1
@ टोबिटर, हमेशा नेटवर्क के इनपुट को वास्तविक (परीक्षण, या अनुमान-समय) डेटा के जितना हो सके उतना करीब करें। यदि आपकी सभी छवियां उच्च से अधिक व्यापक हो रही हैं, तो आपको अपनी छवियों को इस तरह संसाधित करने के लिए अपने नेटवर्क को भी मॉडल करना चाहिए। उस ने कहा, यदि आप संभवतः यह नहीं कह सकते हैं कि आपका "उपयोग" डेटा कैसा दिखेगा, तो आपको प्रशिक्षण के दौरान कुछ बलिदान करने होंगे। और उस मामले में, 1000x200 से 256x256 तक की छवि का आकार बदलना आम तौर पर ठीक है (कल्पना करें कि उस लाइसेंस प्लेट को 60 डिग्री के कोण पर देखना - अब इसका बहुत ही छोटा वर्ग है)।
सूर्यास्त

2
@Tobitor छवियों को वर्गाकार होने के लिए किसी भी प्रकार की आवश्यकता नहीं है, यह सिर्फ कम से कम खराब ट्रेडऑफ़ होने के लिए होता है यदि आप अनुमान के दौरान वास्तविक छवि आकारों को नहीं जानते हैं। : ^) आकार के अनुसार, छोटे बेहतर, लेकिन छवियों को अभी भी सबसे अच्छा आवश्यक विवरणों को कैप्चर करने के लिए पर्याप्त बड़ा होना चाहिए - आम तौर पर बोल, बस ध्यान रखें कि यदि आप, एक मानव विशेषज्ञ के रूप में, संभवतः यह निर्धारित नहीं कर सकते कि क्या है। छवि, नेटवर्क भी सक्षम नहीं होगा।
दोपहर

11

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


क्या आप नियमित पूलिंग की तुलना में "स्थानिक पिरामिड पूलिंग" पर थोड़ा विस्तार कर सकते हैं?
मैथ्यू

कृपया में दृश्य मान्यता के लिए गहरी convolutional नेटवर्क में स्थानिक पिरामिड पूलिंग पढ़ blog.acolyer.org/2017/03/21/convolution-neural-nets-part-2 @Matthieu
आसिफ मोहम्मद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.