Commit 3b38780bec9da8c964048e301aa02e533f7d0a25

Authored by Charles Otto
1 parent fb0027a6

Revert "Updated SVM to allow for setting degree for POLY classification.\n Wrapp…

…ed some parameters to trainSVM in a CvSVMParams object to cut down on clutter."

This reverts commit fb0027a6e60acae160c2b4bc6252b03d0302c268.
openbr/plugins/classification/svm.cpp
... ... @@ -26,12 +26,19 @@ using namespace cv;
26 26 namespace br
27 27 {
28 28  
29   -static void trainSVM(SVM &svm, Mat data, Mat lab, CvSVMParams params, float C, float gamma, int folds, bool balanceFolds)
  29 +static void trainSVM(SVM &svm, Mat data, Mat lab, int kernel, int type, float C, float gamma, int folds, bool balanceFolds, int termCriteria)
30 30 {
31 31 if (data.type() != CV_32FC1)
32 32 qFatal("Expected single channel floating point training data.");
33 33  
34   - if ((C == -1) || ((gamma == -1) && (params.kernel_type == CvSVM::RBF))) {
  34 + CvSVMParams params;
  35 + params.kernel_type = kernel;
  36 + params.svm_type = type;
  37 + params.p = 0.1;
  38 + params.nu = 0.5;
  39 + params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, termCriteria, FLT_EPSILON);
  40 +
  41 + if ((C == -1) || ((gamma == -1) && (kernel == CvSVM::RBF))) {
35 42 try {
36 43 svm.train_auto(data, lab, Mat(), Mat(), params, folds,
37 44 CvSVM::get_default_grid(CvSVM::C),
... ... @@ -76,7 +83,6 @@ class SVMTransform : public Transform
76 83 Q_PROPERTY(int termCriteria READ get_termCriteria WRITE set_termCriteria RESET reset_termCriteria STORED false)
77 84 Q_PROPERTY(int folds READ get_folds WRITE set_folds RESET reset_folds STORED false)
78 85 Q_PROPERTY(bool balanceFolds READ get_balanceFolds WRITE set_balanceFolds RESET reset_balanceFolds STORED false)
79   - Q_PROPERTY(int degree READ get_degree WRITE set_degree RESET reset_degree STORED false)
80 86  
81 87 public:
82 88 enum Kernel { Linear = CvSVM::LINEAR,
... ... @@ -101,7 +107,6 @@ private:
101 107 BR_PROPERTY(int, termCriteria, 1000)
102 108 BR_PROPERTY(int, folds, 5)
103 109 BR_PROPERTY(bool, balanceFolds, false)
104   - BR_PROPERTY(int, degree, 2)
105 110  
106 111 SVM svm;
107 112 QHash<QString, int> labelMap;
... ... @@ -122,16 +127,8 @@ private:
122 127 QList<int> dataLabels = _data.indexProperty(inputVariable, labelMap, reverseLookup);
123 128 lab = OpenCVUtils::toMat(dataLabels);
124 129 }
125   -
126   - CvSVMParams params;
127   - params.kernel_type = kernel;
128   - params.svm_type = type;
129   - params.p = 0.1;
130   - params.nu = 0.5;
131   - params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, termCriteria, FLT_EPSILON);
132   - params.degree = degree;
133   -
134   - trainSVM(svm, data, lab, params, C, gamma, folds, balanceFolds);
  130 +
  131 + trainSVM(svm, data, lab, kernel, type, C, gamma, folds, balanceFolds, termCriteria);
135 132 }
136 133  
137 134 void project(const Template &src, Template &dst) const
... ... @@ -195,7 +192,6 @@ class SVMDistance : public Distance
195 192 Q_PROPERTY(int termCriteria READ get_termCriteria WRITE set_termCriteria RESET reset_termCriteria STORED false)
196 193 Q_PROPERTY(int folds READ get_folds WRITE set_folds RESET reset_folds STORED false)
197 194 Q_PROPERTY(bool balanceFolds READ get_balanceFolds WRITE set_balanceFolds RESET reset_balanceFolds STORED false)
198   - Q_PROPERTY(int degree READ get_degree WRITE set_degree RESET reset_degree STORED false)
199 195  
200 196 public:
201 197 enum Kernel { Linear = CvSVM::LINEAR,
... ... @@ -216,7 +212,6 @@ private:
216 212 BR_PROPERTY(int, termCriteria, 1000)
217 213 BR_PROPERTY(int, folds, 5)
218 214 BR_PROPERTY(bool, balanceFolds, false)
219   - BR_PROPERTY(int, degree, 2)
220 215  
221 216 SVM svm;
222 217  
... ... @@ -240,16 +235,8 @@ private:
240 235 }
241 236 deltaData = deltaData.rowRange(0, index);
242 237 deltaLab = deltaLab.rowRange(0, index);
243   -
244   - CvSVMParams params;
245   - params.kernel_type = kernel;
246   - params.svm_type = type;
247   - params.p = 0.1;
248   - params.nu = 0.5;
249   - params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, termCriteria, FLT_EPSILON);
250   - params.degree = degree;
251   -
252   - trainSVM(svm, deltaData, deltaLab, params, -1, -1, folds, balanceFolds);
  238 +
  239 + trainSVM(svm, deltaData, deltaLab, kernel, type, -1, -1, folds, balanceFolds, termCriteria);
253 240 }
254 241  
255 242 float compare(const Mat &a, const Mat &b) const
... ...