маркировка данных в SVM opencv c ++ - PullRequest
1 голос
/ 23 марта 2012

Я пытаюсь внедрить SVM в opencv для функций, которые я извлек, используя SIFT.Я извлек функции для 2 различных объектов (каждый объект имеет функции 10 различных изображений, которые в общей сложности я получил более 3000 функций для одного объекта), и я поместил эти функции в один файл (файл yaml) ..

Моя проблема: я не знаю, как их маркировать?поэтому мне нужно пометить эти два файла (как я уже говорил, каждый файл имеет тип yaml и содержит матрицу 3260 * 128, а второй файл yaml для второго объекта - 3349 * 128) ...

Пожалуйста, помогите мне показать мне, как пометить эти файлы, чтобы потом обучить их ... Я использую openCV c ++ ... кстати, код openCV для SVM основан на LIBSVM

Спасибов продвинутом

Ответы [ 2 ]

4 голосов
/ 31 марта 2012

Предположим, вы правильно получили свою матрицу, и каждая строка представляет один образец. То, что вы можете сделать, похоже на то, что предложил Лакеш:

Cv::Mat anger, disgust;
// Load the data into anger and disgust
...
// Make sure anger.cols == disgust.cols 
// Combine your features from different classes into one big matrix
int numPostives = anger.rows, numNegatives = disgust.rows;
int numSamples = numPostives+numNegatives;
int featureSize = anger.cols;
cv::Mat data(numSamples, featureSize, CV_32FC1) // Assume your anger matrix is in float type
cv::Mat positiveData = data.rowRange(0, numPostives);
cv::Mat negativeData = data.rowRange(numPostives, numSamples);
anger.copyTo(positiveData);
disgust.copyTo(negativeData);
// Create label matrix according to the big feature matrix
cv::Mat labels(numSamples, 1, CV_32SC1);
labels.rowRange(0, numPositives).setTo(cv::Scalar_<int>(1));
labels.rowRange(numPositives, numSamples).setTo(cv::Scalar_<int>(-1));
// Finally, train your model
cv::SVM model;
model.train(data, labels, cv::Mat(), cv::Mat(), cv::SVMParams());

Надеюсь, это поможет.

0 голосов
/ 24 марта 2012

Маркировка это легко.Просто пометьте один из классов / объектов как 1, а другой как -1.

                  case 'Anger'
                     CVTrainLabel = [CVTrainLabel;1];
                     Hist = UniformLBP2(I1);
                     CVTrainVec = [CVTrainVec;Hist];
                     continue;
                 case 'Disgust'
                    CVTrainLabel = [CVTrainLabel;-1];
                     Hist = UniformLBP2(I1);
                     CVTrainVec = [CVTrainVec;Hist];
...