Sto provando ad addestrare il mio rilevatore per l'uso con OpenCV :: HOGDescriptor ma sto riscontrando problemi nel far funzionare l'HOGDescriptor esistente con il mio SVM appena formato.Formazione SVM personalizzata da utilizzare con HOGDescriptor in OpenCV
Ho calcolato le caratteristiche di HOG per le immagini di addestramento positive e negative, le ho etichettate e ho addestrato l'SVM utilizzando CvSVM. I parametri che ho usato sono:
CvSVMParams params;
params.svm_type =CvSVM::EPS_SVR;
params.kernel_type = CvSVM::LINEAR;
params.C = 0.01;
params.p = 0.5;
Poi ho calcolare Modulo Primal dei vettori di supporto in modo che ho solo ottenere un vettore al posto di molti e impostare il vettore supporto calcolato utilizzando HOGDescriptor.setSVMDetector (vettoriale);
Quando uso CvSVM.predict() sono in grado di classificare correttamente gli oggetti con la SVM, ma HOGDescriptor.detect() o detectMultiScale() restituisce sempre un sacco di partite positive e non dà precise predizioni.
CvSVM.predict() utilizza i vettori di supporto originali per la classificazione, quindi potrebbe esserci qualcosa di sbagliato nel modo in cui sto calcolando la forma primaria.
C'è qualcuno che ha addestrato il proprio rilevatore che può indicarmi la giusta direzione?
sembra che un errore da libsvm sia stato ereditato in cui l'ordine delle etichette viene incasinato. La funzione di previsione è a conoscenza dell'ordine e cerca quale etichetta è quale, e quindi funziona bene. Ho risolto il problema impostando la mia etichetta + ve su un numero inferiore al mio -ve, cioè pos = 1, neg = 2. altrimenti potrebbe essere necessario invertire il modello moltiplicando per -1. (questo è il motivo per cui la risposta accettata ha lo strano segno negativo). Ho scelto di non farlo in questo modo nel caso in cui risolvono il bug (non è un bug se usi la previsione, ma potrebbero cambiarlo) – QED