5

में काम नहीं कर रहा है, मैं पाइथन से ओपनसीवी में एक यादृच्छिक वन वर्गीकरण को प्रशिक्षित करने के लिए पैरामीटर में सही तरीके से पास नहीं कर सकता।यादृच्छिक वन ओपनसीवी पायथन (सीवी 2)

मैंने सी ++ में एक कार्यान्वयन लिखा जो सही ढंग से काम करता था, लेकिन पाइथन में एक ही परिणाम नहीं मिलता है। http://fossies.org/linux/misc/opencv-2.4.7.tar.gz:a/opencv-2.4.7/samples/python2/letter_recog.py

जो संकेत मिलता है कि आप एक dict में मानकों में पास करना चाहिए लगता है:

मैं यहाँ कुछ नमूना कोड मिल गया। यहाँ कोड मैं का उपयोग कर रहा है:

rtree_params = dict(max_depth=11, min_sample_count=5, use_surrogates=False, max_categories=15, calc_var_importance=False, n_active_vars=0, max_num_of_trees_in_the_forest=1000, termcrit_type=cv2.TERM_CRITERIA_MAX_ITER) 
classifier = cv2.RTrees() 
classifier.train(train_data, cv2.CV_ROW_SAMPLE, label_data, params=rtree_params); 

मैं बता सकता है कि वर्गीकारक सही ढंग से प्रशिक्षित किया जा रहा है, लेकिन यह एक मैं C++ में एक ही मानकों के साथ प्रशिक्षित के रूप में लगभग के रूप में सही नहीं है। मैं काफी हद तक निश्चित हूं कि पैरामीटर स्वीकार किए जा रहे हैं, क्योंकि जब मैं मूल्यों को ट्विक करता हूं तो मुझे अलग-अलग परिणाम मिलते हैं।

मैंने नोटिस किया कि जब मैं एक फ़ाइल में क्लासिफायर आउटपुट करता हूं, तो में केवल एक पेड़ है। मुझे यकीन है कि यह समस्या है। मैं openCV कार्यान्वयन को देखा:

http://www.code.opencv.org/svn/gsoc2012/denoising/trunk/opencv-2.4.2/modules/ml/src/rtrees.cpp

मेरी मानकों को देखते हुए, यह 1000 के पेड़ के साथ एक जंगल उत्पादन करना चाहिए। मैंने max_num_of_trees_in_the_forest तर्कों को पागल मूल्यों के सभी प्रकारों पर सेट करने का प्रयास किया, और यह ओपनसीवी के व्यवहार को नहीं बदला।

विचार?

उत्तर

4

सुनिश्चित नहीं हैं कि अगर यह बहुत मदद मिलेगी, लेकिन मेरा मानना ​​है कि:

n_active_vars=0 

nactive_vars=0 

भी होना चाहिए, आप term_crit पैरामीटर के साथ प्रयोग करने की कोशिश करना चाह सकते हैं। अपने शब्दकोश में

term_crit=(cv2.TERM_CRITERIA_MAX_ITER,1000,1) 

: उदाहरण के लिए, जोड़ने का प्रयास करें।

मेरा मानना ​​है कि यह जंगल में 1000 पेड़ जोड़े जाने पर मानदंड निर्धारित करने के मानदंड निर्धारित करेगा।

+0

वह दूसरा सुझाव काम करना प्रतीत होता था, लेकिन आपने इसे कैसे समझ लिया? क्या यह सिर्फ एक शिक्षित अनुमान था कि कुछ अन्य क्लासिफायरों को कैसे प्रशिक्षित किया जाता है? CvRTreeParams डेटा संरचना यहाँ परिभाषित किया गया है: http://docs.opencv.org/modules/ml/doc/random_trees.html#cvrtparams-cvrtparams कैसे आप सी ++ प्रकार और के बीच मानचित्रण यह पता लगाने है इसके पायथन प्रतिनिधित्व? – user3043337

+0

मैंने पाठ प्रतीकों के लिए cv2.so फ़ाइल में खोज की और max_num_of_trees_in_the_forest को नहीं देखा, इसलिए इसे सेट करने के अन्य तरीकों के लिए C++ स्रोत के माध्यम से खोद गया। जहां तक ​​मुझे पता है, मैपिंग स्वचालित रूप से जेनरेट की जाती है, इसलिए यह धीरे-धीरे सीखने के लिए अनुभव/अभ्यास का मामला है कि इसे कैसे मैप किया जाता है। यह मेरे लिए बहुत संतोषजनक प्रतीत नहीं होता है - हालांकि मैं सामान्य रूप से सी ++ वाले लोगों की तुलना में पाइथन बाइंडिंग का उपयोग करना पसंद करता हूं। –

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