2015-12-09 26 views
22

दीप लर्निंग का उपयोग कर सुविधाओं वर्गों (बिल्लियों, कुत्तों, कारों, विमानों, आदि) के एक मुट्ठी भर के वर्गीकरण के लिए कई बड़े डेटा सेट पर सफलतापूर्वक लागू किया गया है, जैसे सरल वर्णनकर्ता पिटाई प्रदर्शन के साथ एसआईएफटी, रंग हिस्टोग्राम, आदि पर सुविधाओं के बैगनिकालें पूर्व प्रशिक्षित (Tensorflow) सीएनएन

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

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

यह प्रत्येक छवि है, जो एक SVM की तरह एक शास्त्रीय वर्गीकरण विधि, रसद प्रतिगमन, तंत्रिका नेटवर्क, आदि

विशेष रूप से करने के लिए फ़ीड सकता है के लिए सुविधाओं का एक सेट में जो परिणाम एक प्रशिक्षित करने के लिए पर्याप्त डेटा नहीं है जब सीएनएन, मैं उम्मीद कर सकता हूं कि यह एक पाइपलाइन से बेहतर प्रदर्शन करे जहां सीएनएन को कुछ नमूनों पर प्रशिक्षित किया गया था।

मैं tensorflow ट्यूटोरियल देख रहा था, लेकिन वे हमेशा एक स्पष्ट प्रशिक्षण/परीक्षण चरण प्रतीत होता है। मुझे पूर्व-कॉन्फ़िगर किए गए सीएनएन फीचर एक्स्ट्रैक्टर के साथ एक अचार फ़ाइल (या समान) नहीं मिल सका।

मेरे प्रश्न हैं: ऐसे पूर्व-प्रशिक्षित नेटवर्क मौजूद हैं और मैं उन्हें कहां पा सकता हूं। वैकल्पिक रूप से: क्या यह दृष्टिकोण समझ में आता है? मुझे सीएनएन + वजन कहां मिल सकता है?

EDIT W.r.t. @ जॉन की टिप्पणी मैं 'DecodeJpeg:0' और 'DecodeJpeg/contents:0' उपयोग करने की कोशिश और आउटपुट है, जो अलग-अलग हैं जाँच (: एस)

import cv2, requests, numpy 
import tensorflow.python.platform 
import tensorflow as tf 


response = requests.get('https://i.stack.imgur.com/LIW6C.jpg?s=328&g=1') 
data = numpy.asarray(bytearray(response.content), dtype=np.uint8) 
image = cv2.imdecode(data,-1) 

compression_worked, jpeg_data = cv2.imencode('.jpeg', image) 
if not compression_worked: 
    raise Exception("Failure when compressing image to jpeg format in opencv library") 
jpeg_data = jpeg_data.tostring() 

with open('./deep_learning_models/inception-v3/classify_image_graph_def.pb', 'rb') as graph_file: 
    graph_def = tf.GraphDef() 
    graph_def.ParseFromString(graph_file.read()) 
    tf.import_graph_def(graph_def, name='') 

with tf.Session() as sess: 
    softmax_tensor = sess.graph.get_tensor_by_name('pool_3:0') 

    arr0 = numpy.squeeze(sess.run(
     softmax_tensor, 
     {'DecodeJpeg:0': image} 
    )) 

    arr1 = numpy.squeeze(sess.run(
     softmax_tensor, 
     {'DecodeJpeg/contents:0': jpeg_data} 
    )) 

    print(numpy.abs(arr0 - arr1).max()) 

तो अधिकतम निरपेक्ष अंतर 1.27649 है, और सामान्य रूप से सभी तत्वों (अलग विशेष रूप से औसत के बाद से 0.5) - arr0 और arr1 खुद को का मान 0 के बीच स्थित है।

मैं यह भी उम्मीद करता हूं कि 'DecodeJpeg:0' को एक जेपीईजी-स्ट्रिंग की आवश्यकता है, न कि एक संख्यात्मक सरणी, नाम में 'जेपीईजी' क्यों है। @john: क्या आप बता सकते हैं कि सुनिश्चित करें कि आप अपनी टिप्पणी के बारे में हैं?

तो मुझे लगता है कि मुझे यकीन है कि क्या, क्या है के रूप में मैं एक प्रशिक्षित तंत्रिका नेटवर्क नियतात्मक होने की अपेक्षा करेंगे (लेकिन ज्यादा से ज्यादा अराजक) नहीं हूँ।

+0

रबर बतख: जब "छविनेट पर प्रशिक्षित सीएनएन" पर Googleिंग करते समय, मुझे यह पता चला: http://www.vlfeat.org/matconvnet/pretrained/ – Herbert

+1

मैं इस लैपटॉप को अपने लैपटॉप पर संकलित और चला सकता हूं - और इसका उपयोग करें छवियों github पहचान/वर्गीकृत करने के लिए वेब कैमरा।com/sermanet/overFeat –

उत्तर

18

टेंसरफ्लो टीम ने हाल ही में ImageNet डेटासेट पर प्रशिक्षित एक गहरी सीएनएन जारी की। आप स्क्रिप्ट है कि डेटा here से (मॉडल ग्राफ और प्रशिक्षित वजन सहित) को हासिल करेगा डाउनलोड कर सकते हैं। संबंधित Image Recognition tutorial में मॉडल के बारे में अधिक जानकारी है।

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

+0

यह शानदार लगता है, जब मैं इसे काम कर रहा हूं तो मैं स्वीकार करूंगा :) classify_image से पता चलता है कि यह एक लेबल में परिणाम देता है। मुझे फीचर वेक्टर चाहिए, क्योंकि मेरे लेबल इमेजनेट से नहीं हैं। – Herbert

+4

लॉग इन के रूप में इन टिप्पणियों का उपयोग करना: सुविधाओं को प्राप्त करने के लिए 'softmax_tensor = sess.graph.get_tensor_by_name ('pool_3: 0') 'softmax_tensor = sess.graph.get_tensor_by_name (' softmax: 0 ')' के बजाय' का उपयोग करना। – Herbert

+0

मैंने देखा है कि इस विशेष नेटवर्क के 'feed_dict' में' डीकोड जेपीईजी/सामग्री: 0'' 'है (मुझे लगता है कि यह फ़ाइल' classify_image_graph_def.pb' 'में परिभाषित है), क्या आप यह जान लेंगे कि फ़ीड_डिक्ट कॉन्फ़िगरेशन क्या संभव है संभव है? क्या मैं वहां छवि के साथ एक numpy-array फेंक सकता हूं? – Herbert

संबंधित मुद्दे