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