Commit 3f8f0728a68496bca35db3e143f14b8403774edf

Authored by Josh Klontz
1 parent edc33db4

removed liblinear

openbr/plugins/classification/liblinear.cpp deleted
1 -#include <QTemporaryFile>  
2 -#include <opencv2/core/core.hpp>  
3 -#include <opencv2/ml/ml.hpp>  
4 -  
5 -#include <openbr/plugins/openbr_internal.h>  
6 -#include <openbr/core/opencvutils.h>  
7 -  
8 -#include <linear.h>  
9 -  
10 -using namespace cv;  
11 -  
12 -namespace br  
13 -{  
14 -  
15 -static void storeModel(const model &m, QDataStream &stream)  
16 -{  
17 - // Create local file  
18 - QTemporaryFile tempFile;  
19 - tempFile.open();  
20 - tempFile.close();  
21 -  
22 - // Save MLP to local file  
23 - save_model(qPrintable(tempFile.fileName()),&m);  
24 -  
25 - // Copy local file contents to stream  
26 - tempFile.open();  
27 - QByteArray data = tempFile.readAll();  
28 - tempFile.close();  
29 - stream << data;  
30 -}  
31 -  
32 -static void loadModel(model &m, QDataStream &stream)  
33 -{  
34 - // Copy local file contents from stream  
35 - QByteArray data;  
36 - stream >> data;  
37 -  
38 - // Create local file  
39 - QTemporaryFile tempFile(QDir::tempPath()+"/model");  
40 - tempFile.open();  
41 - tempFile.write(data);  
42 - tempFile.close();  
43 -  
44 - // Load MLP from local file  
45 - m = *load_model(qPrintable(tempFile.fileName()));  
46 -}  
47 -  
48 -/*!  
49 - * \brief Wraps LibLinear's Linear SVM framework.  
50 - * \author Scott Klum \cite sklum  
51 - */  
52 -class Linear : public Transform  
53 -{  
54 - Q_OBJECT  
55 - Q_ENUMS(Solver)  
56 - Q_PROPERTY(Solver solver READ get_solver WRITE set_solver RESET reset_solver STORED false)  
57 - Q_PROPERTY(float C READ get_C WRITE set_C RESET reset_C STORED false)  
58 - Q_PROPERTY(QString inputVariable READ get_inputVariable WRITE set_inputVariable RESET reset_inputVariable STORED false)  
59 - Q_PROPERTY(QString outputVariable READ get_outputVariable WRITE set_outputVariable RESET reset_outputVariable STORED false)  
60 - Q_PROPERTY(bool returnDFVal READ get_returnDFVal WRITE set_returnDFVal RESET reset_returnDFVal STORED false)  
61 - Q_PROPERTY(bool overwriteMat READ get_overwriteMat WRITE set_overwriteMat RESET reset_overwriteMat STORED false)  
62 - Q_PROPERTY(bool weight READ get_weight WRITE set_weight RESET reset_weight STORED false)  
63 -  
64 -public:  
65 - enum Solver { L2R_LR = ::L2R_LR,  
66 - L2R_L2LOSS_SVC_DUAL = ::L2R_L2LOSS_SVC_DUAL,  
67 - L2R_L2LOSS_SVC = ::L2R_L2LOSS_SVC,  
68 - L2R_L1LOSS_SVC_DUAL = ::L2R_L1LOSS_SVC_DUAL,  
69 - MCSVM_CS = ::MCSVM_CS,  
70 - L1R_L2LOSS_SVC = ::L1R_L2LOSS_SVC,  
71 - L1R_LR = ::L1R_LR,  
72 - L2R_LR_DUAL = ::L2R_LR_DUAL,  
73 - L2R_L2LOSS_SVR = ::L2R_L2LOSS_SVR,  
74 - L2R_L2LOSS_SVR_DUAL = ::L2R_L2LOSS_SVR_DUAL,  
75 - L2R_L1LOSS_SVR_DUAL = ::L2R_L1LOSS_SVR_DUAL };  
76 -  
77 -private:  
78 - BR_PROPERTY(Solver, solver, L2R_L2LOSS_SVC_DUAL)  
79 - BR_PROPERTY(float, C, 1)  
80 - BR_PROPERTY(QString, inputVariable, "Label")  
81 - BR_PROPERTY(QString, outputVariable, "")  
82 - BR_PROPERTY(bool, returnDFVal, false)  
83 - BR_PROPERTY(bool, overwriteMat, true)  
84 - BR_PROPERTY(bool, weight, false)  
85 -  
86 - model m;  
87 -  
88 - void train(const TemplateList &data)  
89 - {  
90 - Mat samples = OpenCVUtils::toMat(data.data());  
91 - Mat labels = OpenCVUtils::toMat(File::get<float>(data, inputVariable));  
92 -  
93 - problem prob;  
94 - prob.n = samples.cols;  
95 - prob.l = samples.rows;  
96 - prob.bias = -1;  
97 - prob.y = new double[prob.l];  
98 -  
99 - for (int i=0; i<prob.l; i++)  
100 - prob.y[i] = labels.at<float>(i,0);  
101 -  
102 - // Allocate enough memory for l feature_nodes pointers  
103 - prob.x = new feature_node*[prob.l];  
104 - feature_node *x_space = new feature_node[(prob.n+1)*prob.l];  
105 -  
106 - int k = 0;  
107 - for (int i=0; i<prob.l; i++) {  
108 - prob.x[i] = &x_space[k];  
109 - for (int j=0; j<prob.n; j++) {  
110 - x_space[k].index = j+1;  
111 - x_space[k].value = samples.at<float>(i,j);  
112 - k++;  
113 - }  
114 - x_space[k++].index = -1;  
115 - }  
116 -  
117 - parameter param;  
118 -  
119 - // TODO: Support grid search  
120 - param.C = C;  
121 - param.p = 1;  
122 - param.eps = FLT_EPSILON;  
123 - param.solver_type = solver;  
124 -  
125 - if (weight) {  
126 - param.nr_weight = 2;  
127 - param.weight_label = new int[2];  
128 - param.weight = new double[2];  
129 - param.weight_label[0] = 0;  
130 - param.weight_label[1] = 1;  
131 - int nonZero = countNonZero(labels);  
132 - param.weight[0] = 1;  
133 - param.weight[1] = (double)(prob.l-nonZero)/nonZero;  
134 - qDebug() << param.weight[0] << param.weight[1];  
135 - } else {  
136 - param.nr_weight = 0;  
137 - param.weight_label = NULL;  
138 - param.weight = NULL;  
139 - }  
140 -  
141 - //m = *train_svm(&prob, &param);  
142 -  
143 - delete[] param.weight;  
144 - delete[] param.weight_label;  
145 - delete[] prob.y;  
146 - delete[] prob.x;  
147 - delete[] x_space;  
148 - }  
149 -  
150 - void project(const Template &src, Template &dst) const  
151 - {  
152 - dst = src;  
153 -  
154 - Mat sample = src.m().reshape(1,1);  
155 - feature_node *x_space = new feature_node[sample.cols+1];  
156 -  
157 - for (int j=0; j<sample.cols; j++) {  
158 - x_space[j].index = j+1;  
159 - x_space[j].value = sample.at<float>(0,j);  
160 - }  
161 - x_space[sample.cols].index = -1;  
162 -  
163 - float prediction;  
164 - double prob_estimates[m.nr_class];  
165 -  
166 - if (solver == L2R_L2LOSS_SVR ||  
167 - solver == L2R_L1LOSS_SVR_DUAL ||  
168 - solver == L2R_L2LOSS_SVR_DUAL ||  
169 - solver == L2R_L2LOSS_SVC_DUAL ||  
170 - solver == L2R_L2LOSS_SVC ||  
171 - solver == L2R_L1LOSS_SVC_DUAL ||  
172 - solver == MCSVM_CS ||  
173 - solver == L1R_L2LOSS_SVC)  
174 - {  
175 - prediction = predict_values(&m,x_space,prob_estimates);  
176 - if (returnDFVal) prediction = prob_estimates[0];  
177 - } else if (solver == L2R_LR ||  
178 - solver == L2R_LR_DUAL ||  
179 - solver == L1R_LR)  
180 - {  
181 - prediction = predict_probability(&m,x_space,prob_estimates);  
182 - if (returnDFVal) prediction = prob_estimates[0];  
183 - }  
184 -  
185 - if (overwriteMat) {  
186 - dst.m() = Mat(1, 1, CV_32F);  
187 - dst.m().at<float>(0, 0) = prediction;  
188 - } else {  
189 - dst.file.set(outputVariable,prediction);  
190 - }  
191 -  
192 - delete[] x_space;  
193 - }  
194 -  
195 - void store(QDataStream &stream) const  
196 - {  
197 - storeModel(m,stream);  
198 - }  
199 -  
200 - void load(QDataStream &stream)  
201 - {  
202 - loadModel(m,stream);  
203 - }  
204 -};  
205 -  
206 -BR_REGISTER(Transform, Linear)  
207 -  
208 -} // namespace br  
209 -  
210 -#include "liblinear.moc"  
openbr/plugins/cmake/liblinear.cmake deleted
1 -set(BR_WITH_LIBLINEAR OFF CACHE BOOL "Build with LibLinear")  
2 -  
3 -if(${BR_WITH_LIBLINEAR})  
4 - find_package(LibLinear REQUIRED)  
5 - set(BR_THIRDPARTY_SRC ${BR_THIRDPARTY_SRC} ${LibLinear_SRC})  
6 -else()  
7 - set(BR_EXCLUDED_PLUGINS ${BR_EXCLUDED_PLUGINS} plugins/classification/liblinear.cpp)  
8 -endif()