2012-12-03 12 views
14

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

मैं इस काम को करने के लिए ओपनसीवी में बो फंक्शन सीखने की कोशिश कर रहा हूं और एक स्तर पर आया हूं जहां मुझे नहीं पता कि अब क्या करना है और कुछ मार्गदर्शन की सराहना की जाएगी।

Ptr<FeatureDetector> features = FeatureDetector::create("SIFT"); 
    Ptr<DescriptorExtractor> descriptors = DescriptorExtractor::create("SIFT"); 
    Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("FlannBased"); 

    //defining terms for bowkmeans trainer 
    TermCriteria tc(MAX_ITER + EPS, 10, 0.001); 
    int dictionarySize = 1000; 
    int retries = 1; 
    int flags = KMEANS_PP_CENTERS; 
    BOWKMeansTrainer bowTrainer(dictionarySize, tc, retries, flags); 

    BOWImgDescriptorExtractor bowDE(descriptors, matcher); 

    //training data now 
    Mat features; 
    Mat img = imread("c:\\1.jpg", 0); 
    Mat img2 = imread("c:\\2.jpg", 0); 
    vector<KeyPoint> keypoints, keypoints2; 
    features->detect(img, keypoints); 
    features->detect(img2,keypoints2); 
    descriptor->compute(img, keypoints, features); 
    Mat features2; 
    descripto->compute(img2, keypoints2, features2); 
    bowTrainer.add(features); 
    bowTrainer.add(features2); 

    Mat dictionary = bowTrainer.cluster(); 
    bowDE.setVocabulary(dictionary); 

यह सब BOW documentation पर आधारित है:

यहाँ मेरी कोड है कि मैं शब्दों के बैग बनाने के लिए इस्तेमाल होता है।

मुझे लगता है कि इस चरण में मेरी प्रणाली को प्रशिक्षित किया जाता है। और अगला कदम भविष्यवाणी कर रहा है।

यह वह जगह है जहां मुझे नहीं पता कि क्या करना है। यदि मैं SVM या NormalBayesClassifier का उपयोग करता हूं तो वे दोनों शब्द ट्रेन और भविष्यवाणी का उपयोग करते हैं।

मैं इसके बाद भविष्यवाणी और ट्रेन कैसे करूं? किसी भी मार्गदर्शन की सराहना की जाएगी। मैं क्लासिफायर के प्रशिक्षण को अपने 'bowDE`` फ़ंक्शन से कैसे जोड़ूं?

+1

आपने टर्मक्रिटिया और शब्दकोश आकार, टीसी, रीट्रीज़, झंडे के मूल्यों का निर्धारण कैसे किया? – definera

उत्तर

15

आपका अगला कदम शब्द वर्णनकर्ताओं के वास्तविक बैग को निकालना है। आप BOWImgDescriptorExtractor से compute फ़ंक्शन का उपयोग करके ऐसा कर सकते हैं। जैसे

bowDE.compute(img, keypoints, bow_descriptor); 

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

एक और बात जो मैं उल्लेख करना चाहूंगा वह है कि वर्गीकरण के लिए आपको आमतौर पर कम से कम 2 कक्षाओं की आवश्यकता होती है। इसलिए आपको कुछ छवियों की भी आवश्यकता है जिनमें क्लासिफायर को प्रशिक्षित करने के लिए कारें न हों।

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