2012-12-03 6 views
14

Ich habe einen Ordner mit Bildern von einem Auto aus jedem Blickwinkel. Ich möchte die Tasche der Wörter Ansatz verwenden, um das System in der Erkennung des Autos zu trainieren. Sobald das Training abgeschlossen ist, möchte ich, dass wenn ein Bild dieses Autos gegeben ist, es in der Lage sein sollte, es zu erkennen.Wie trainieren und vorhersagen mit Beutel von Wörtern?

Ich habe versucht, die BOW-Funktion in opencv zu lernen, um dies zu arbeiten und auf einem Niveau zu kommen, wo ich nicht weiß, was jetzt zu tun ist und einige Anleitung würde geschätzt werden.

Hier ist mein Code, dass ich die Tasche von Wörtern machen verwendet:

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); 

Dies alles basiert auf dem BOW documentation.

Ich denke in diesem Stadium ist mein System trainiert. und der nächste Schritt sagt voraus.

das ist, wo ich nicht weiß, was zu tun ist. Wenn ich SVM oder NormalBayesClassifier verwende, verwenden beide die Begriffe trainieren und vorhersagen.

Wie kann ich danach voraussagen und trainieren? jede Anleitung würde sehr geschätzt werden. Wie verbinde ich das Training des Klassifikators mit meiner `bowDE`` Funktion?

+1

Wie haben Sie die Werte für TermCriteria und dictionarySize, tc, retries, flags? – definera

Antwort

15

Ihr nächster Schritt ist, die tatsächliche Tasche von Wortdeskriptoren zu extrahieren. Sie können dies mithilfe der Funktion compute aus dem BOWImgDescriptorExtractor tun. So etwas wie

bowDE.compute(img, keypoints, bow_descriptor); 

Mit dieser Funktion können Deskriptoren erstellen, die Sie dann in eine Matrix sammeln, die für die Klassifizierer dient als Eingang dient. Vielleicht kann this Tutorial Sie ein wenig führen.

Eine andere Sache, die ich erwähnen möchte, ist, dass für die Klassifizierung Sie in der Regel mindestens 2 Klassen benötigen. Sie benötigen also auch einige Bilder, die keine Autos enthalten, um einen Klassifikator zu trainieren.

Verwandte Themen