KNN classifier opslaan na het leren in opencv

Ik heb de OpenCV KNN-classifier gebruikt en na het trainen moet ik de classificator opslaan om deze in de testfase te kunnen gebruiken. Ik ontdekte dat knn.save() niet is geïmplementeerd in OpenCV. Wat moet doen?

4
Ik weet het antwoord niet, maar zou er graag naar willen kijken. Plaats meer details met ten minste links naar documentatie van de KNN-classificator die u gebruikt (OpenCV? Plug-in van derden? Welke versie?) En misschien een voorbeeld van een andere classifier die kan worden opgeslagen?
toegevoegd de auteur KobeJohn, de bron
bedankt voor je herhaling ik gebruik documentatie van opencv 2.3, en er zijn classifiers zoals boost classifier en mlp classifier die kunnen worden opgeslagen
toegevoegd de auteur eng.emooo, de bron

3 antwoord

In k-NN is opslaan en schrijven niet geïmplementeerd omdat er geen trainning is. Wat betekent de train-methode alleen voor het opslaan van alle monsters. Dus er wordt geen "model" afgeleid, dan moet er niets worden opgeslagen, maar alle voorbeelden.

7
toegevoegd

In opencv 3.0, knn->save("train.yml") is implemented,,,

Hoewel ik de laadfunctie niet kon laten werken, maar je het model gemakkelijk kunt lezen vanuit het bestand met behulp van FIleStorage en zoals hierboven vermeld, is het model in feite in feite de functies, zodat je altijd de Mat-functies opslaat en later laadt.

2
toegevoegd

Too long for comment, so I'm posting here. This is not a full solution, so anyone who knows exactly how to do it: please share a better answer

Ik heb gekeken en kan geen directe implementatie vinden. Ik vond echter deze gast (veel goeds dingen op zijn blog) die er achter zijn gekomen hoe je deze gigantische sets getrainde classificators kunt lezen die K bevatten Dichtstbijzijnde buur.

Mogelijk kunt u zijn methode gebruiken om schrijven en lezen voor CvKNearest te implementeren.

Trouwens, als mijn zwakke begrip van c ++ correct is, zijn opslaan en lezen al voor u geïmplementeerd en lezen alleen schrijven en moet eigenlijk worden geïmplementeerd.


Bijvoorbeeld met CvBoost :: opslaan :

(boost.cpp) CvBoost::save

--> (inner_functions.cpp) CvStatModel::save

--> (boost.cpp) CvBoost::write


Op dezelfde manier zou je deze functie moeten toevoegen:

(knearest.cpp) CvBoost::write


Sorry dat ik iets niet concreter kon vinden. Ik hoop dat dit helpt.

1
toegevoegd