Jump to content
Compvision.ru
kurenchuksergey

OpenCV 3.4 Assertion failed (checkDetectorSize()) in setSVMDetector

Recommended Posts

Здравствуйте, пытался обучить 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)

 

Share this post


Link to post
Share on other sites

судя по  

  svm.setKernel(SVM.RBF);

у вас RBF функция, а HOGDescriptor принимает только линейную (https://docs.opencv.org/3.4.1/d5/d33/structcv_1_1HOGDescriptor.html). 

 

virtual void cv::HOGDescriptor::setSVMDetector ( InputArray  _svmdetector )  
virtual

Sets coefficients for the linear SVM classifier.

Ну и вызовите getDescriptorSize да сравните с размером вашего детектора.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×