Jump to content
Compvision.ru

Search the Community

Showing results for tags 'svm'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Пакет OpenCV
    • OpenCV
    • Новости
    • Вопросы взаимодействия OpenCV + GDI, GDI+
  • Дополненная реальность (ARToolkit и др.)
    • ARToolkit
  • Нейросети
    • Вопросы по нейросетям и ИИ
  • Общие вопросы
    • Обсуждение общих вопросов
  • Другое

Jabber


Skype


Расположение


Интересы

Found 7 results

  1. Здравствуйте, пытался обучить SVM hog дескрипторами. Но в момент установки svm модели , выбрасывает исключение Находил похожие вопросы на answer opencv (Вопрос), от туда выяснил, как добавлять rho и автор советовал перейти на float массив попытался, но ситуация не изменилась Код обучения (свой картинки, 28*28) (Ошибок не возникает, файл создается ) HOGDescriptor hog = new HOGDescriptor(new Size(28,28),new Size(8,8),new Size(4,4),new Size(4,4),9); Mat trainingLabels = new Mat(); MatOfFloat temp = new MatOfFloat(); File negativeDir = new File("/home/kurenchuksergey/HogSignTrainingData/negative"); File positiveDir = new File("/home/kurenchuksergey/HogSignTrainingData/positive"); int i = -1; float[][] hogdescriptor = new float[13992][]; //13992 - image count for(File file:negativeDir.listFiles()){ Mat con = Imgcodecs.imread(file.getAbsolutePath(),Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE); hog.compute(con, temp); trainingLabels.push_back(Mat.zeros(new Size(1,1),CvType.CV_32S)); } for(File file:negativeDir.listFiles()){ Mat con = Imgcodecs.imread(file.getAbsolutePath(),Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE); hog.compute(con, temp); hogdescriptor[++i] = temp.toArray(); trainingLabels.push_back(Mat.ones(new Size(1,1),CvType.CV_32S)); } Mat Labels = new Mat(); trainingLabels.copyTo(Labels); Labels.convertTo(Labels,CvType.CV_32S); Mat mat = new Mat(hogdescriptor.length,hogdescriptor[0].length,CvType.CV_32FC1); for(int j = 0;j<hogdescriptor.length;j++) mat.put(i,0,hogdescriptor[i]); TrainData trainDataHog = TrainData.create(mat,Ml.ROW_SAMPLE,Labels); SVM svm = SVM.create(); svm.setType(SVM.C_SVC); svm.setKernel(SVM.RBF); svm.setDegree(0.1); // 1.4 bug fix: old 1.4 ver gamma is 1 svm.setGamma(0.1); svm.setCoef0(0.1); svm.setC(1); svm.setNu(0.1); svm.setP(0.1); svm.setTermCriteria(new TermCriteria(1, 20000, 0.0001)); svm.train(trainDataHog.getSamples(),Ml.ROW_SAMPLE,trainDataHog.getResponses()); svm.save("SVMHog"); Далее пытаюсь воспользоваться моделью (Test.java) SVM svm1 = SVM.load("SVMHog"); HOGDescriptor hog = new HOGDescriptor(new Size(28,28),new Size(8,8),new Size(4,4),new Size(4,4),9); Double rho = svm1.getDecisionFunction(0,new Mat(),new Mat()); int size = (int)(svm1.getSupportVectors().total() + 1) * svm1.getSupportVectors().channels(); float[] temp = new float[size]; svm1.getSupportVectors().get(0, 0, temp); temp[temp.length - 1] = (float)-rho; MatOfFloat vector = new MatOfFloat(temp); hog.setSVMDetector(vector); И получаю исключение (47 - строка - hog.setSVMDetector(vector); ) OpenCV Error: Assertion failed (checkDetectorSize()) in setSVMDetector, file /home/kurenchuksergey/opencv/modules/objdetect/src/hog.cpp, line 117 Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: /home/kurenchuksergey/opencv/modules/objdetect/src/hog.cpp:117: error: (-215) checkDetectorSize() in function setSVMDetector ] at org.opencv.objdetect.HOGDescriptor.setSVMDetector_0(Native Method) at org.opencv.objdetect.HOGDescriptor.setSVMDetector(HOGDescriptor.java:306) at com.company.Test.main(Test.java:47)
  2. Добрый день! Есть вот такая ситуация: собрал и заработал OpenFace, с ним все хорошо..128 точек мне выдается.. Теперь возник вопрос как имея 100000 таких записей осуществлять по ним поиск для выявления наиболее похожего? вот в этой статье https://habrahabr.ru/post/306568/ автор разделил весь процесс на 4 шага и последний шаг - это как раз то что мне нужно, но я немного не понял предложения использовать SVM(может потому что я не знаю что это:-) Я считал, что получив координаты искомого, мы сможем довольно легко найти наиболее похожего путем наложения каких-нить фильтров, или вычисления длины векторов в пространстве..Не могли бы вы немного прояснить где я не прав, похоже я не вижу проблемы там, где она есть. И если можно чуть прояснить как использовать метод опорных векторов, может на каком нить примере, почитал в википедии про него, но там как всегда сферический конь в ваккуме:-)) Я чесно говоря думал, что мне нужен какой-то алгоритм поиска ближайшего соседа в N-пространстве, или не так? Спасибо.
  3. svm.predict возвращает int, вместо float.

    Коллеги, svm.predict возвращает мне int, вместо float. Я никак не могу оценить с какой достоверностью он мне распознает. Что я делаю не так? код примерно такой (С++): vector <float>predicted_vector(img_vector.size());{ for (int i = 0; i < img_vector.size(); i++){ img_vector = symbRecognitor.deskew(img_vector); //наклон перед распознаванием hists = symbRecognitor.preprocess_hog(img_vector); // hog predicted_vector = svm.predict(hists, true); .... } вот параметры: SVMParams param; param.kernel_type = SVM::POLY; param.svm_type = SVM::C_SVC; param.C = 1; svm.load(datFilePath);
  4. Столкнулся с проблему при сохранении обученной модели SVM(ядро полином), при сохранении и последующей загрузке резко падает процент распознавания, в сети наткнулся на информацию что opencv сохраняет не все данные при не линейном ядре. Пробовал и 3.0 и 3.1 результат один и тот-же. Собственно есть несколько вопросов к знатокам: 1. есть ли способ нормального сохранения средствами OpenCV 2. есть ли способ сохранить модель из scikit-learn в формате который бы просчитала OpenCVая реализация, при обычном сохранении там сохраняется бинарный файл а opencv хочет xml 3. может есть более удобный фреймворк на подобии scikit-learn который бы без заморочек позволил это сделать
  5. Метод опорных векторов

    Отступление: Перебрал кучу разных статей по svm и везде одно и тоже, ну так сухо рассказывают, просто жесть, такое ощущение, что читатели априори математики. И нигде нет примера на пальцах, ну как же без примера? Ну на кой черт сухие формулы пихать. Достаточно одного рабочего примера, что вот это X, а это Y, тут 1 а тут 2, теперь складываем, получаем вектор, это дает нам это, а вот дальше делим на это число и получаем. НО нет, они рассказывают все заумными фразами, что мне хочется зевать. Проблема. Не могу найти пример на пальцах (с подставленными значениями), точнее нашел, но не полный. Что мне не понятно. Понятно, что надо найти максимальное расстояние между двумя группами объектов и гиперплоскость Не понимаю что делать в самом начале алгоритма. Вот у нас имеется квадраты и кружочки. 1. Находим крайнюю кружочек и крайний квадрат.2 2. Получаем их координаты, на видео это x1 = (1,1) и x2 = (2,3) 3. Потом ищется вектор весов (или нормали) w = (2,3) - (2,1) = (1, 2) = (a, 2a) - первый вопрос зачем? Что это? 4.Потом берется формула w*x1 - w0 = 1 и w*x2 - w0 = -1. Что такое w0? 5. Далее подставляем в формулу значения и выражаем w0 = 1 - 8a и w0 = -1 - 3a 6. Выражаем одно через другое, 1 - 8a = -1 -3a, 5a = 2, и получаем a =2/5 7. Потом подставляем a = 2/5 в формулу w0 = 1 - 8a и получаем w0 = - 11/5 8. Подставляем a=2/5 в вектор w = (a, 2a) = (2/5, 4/5) - повторный вопрос это что за вектор? 9.Ну и наконец мы подставляем координаты вектора w в формулу g(x) = 2/5 * z1 + 4/5 * z2 - w0. Тут вопрос, что это за функция g(x), что это за значения z1 и z2? И как все-таки мы построили гиперплоскость? Как получить координаты гиперплоскости? Что-то я упустил
  6. Реализация SVM в OpenCV

    Как TermCriteria влияет на скорость обучения SVM? Так же всегда ли чем больше параметр C у линейного SVM тем быстрее учится? По всей видимости OpenCV использует не просто wrapper вокруг libsvm, а имеет свой solver CvSVMSolver::solve_generic ? https://github.com/Itseez/opencv/blob/2.4/modules/ml/src/svm.cpp
  7. SVM light

    SVM light в качестве результатов обучения выдает файл. Кто знает как его переделать под формат svm который в opencv (ядро радиальная базисная функция)?
×