Hi Jordi and Benjamin,

If you read it in the code, then it must be true ... I am pretty sure we had this tested but it seems not according to [1]. I remember discussions about this when we developed the OpenCV ML models, and I found the following Jira task and discussion about it [2].

But I would need some hint from the development team on this issue.

Whatever comes out, this is at least worth a bug report.

Regards,

Julien

[1] http://hg.orfeo-toolbox.org/OTB/file/9890c6c5f335/Testing/Code/Learning/otbTrainMachineLearningModel.cxx
[2] http://scrum.orfeo-toolbox.org/jira/browse/OTB-454

Le 25/03/2014 15:37, Jordi Inglada a écrit :
Jordi Inglada <jordi.inglada-L4RxXcqyP7Z0EDqhht/[email protected]> wrote:
Hi,

I have had a look at the code, and in otbSVMMachineLearningModel.txx (about 
line 79) we have this:
   // Train the SVM
   if (!m_ParameterOptimization)
     {
     m_SVMModel->train(samples, labels, cv::Mat(), cv::Mat(), params);
     }
   else
     {
     //Trains SVM with optimal parameters.
     //train_auto(const Mat& trainData, const Mat& responses, const Mat& varIdx, 
const Mat& sampleIdx,
     //CvSVMParams params, int k_fold=10, CvParamGrid 
Cgrid=CvSVM::get_default_grid(CvSVM::C),
     //CvParamGrid gammaGrid=CvSVM::get_default_grid(CvSVM::GAMMA),
     //CvParamGrid pGrid=CvSVM::get_default_grid(CvSVM::P), CvParamGrid 
nuGrid=CvSVM::get_default_grid(CvSVM::NU),
     //CvParamGrid coeffGrid=CvSVM::get_default_grid(CvSVM::COEF), CvParamGrid 
degreeGrid=CvSVM::get_default_grid(CvSVM::DEGREE),
     //bool balanced=false)
     //We used default parameters grid. If not enough, those grids should be 
expose to the user.
     m_SVMModel->train_auto(samples, labels, cv::Mat(), cv::Mat(), params);
     }

So the train_auto method is called and it should work. However, reading the 
OpenCV documentation 
(http://docs.opencv.org/modules/ml/doc/support_vector_machines.html#cvsvm) I 
see this:


"If there is no need to optimize a parameter, the corresponding grid step should be 
set to any value less than or equal to 1. For example, to avoid optimization in gamma, 
set gamma_grid.step = 0, gamma_grid.min_val, gamma_grid.max_val as arbitrary numbers. In 
this case, the value params.gamma is taken for gamma."

I understand that if the grid steps are < 1 there is no optimization. And the 
default constructor for the parameter grids is this:

CvParamGrid::CvParamGrid()
{
     min_val = max_val = step = 0;
}

So I guess that the optimization is not done.

Can anybody confirm this hypothesis?

To add some information, Benjamin has used libSVM instead of OpenCV's SVM (just 
choosing the other option in the application) and the parameter optimization 
works.

Is this a big or are we doing something wrong?

Thanks.

Jordi

Thank you.

Jordi

Benjamin Tardy 
<tardybenjamin4-re5jqeeqqe8avxtiumwx3w-xmd5yjdbdmrexy1tmh2...@public.gmane.org> 
wrote:
Hello,

I'm trying to use TrainImageClassifier Application, with svm model and 
optimization.

OTB Version:3.18.1

I set all parameters with SetParameter...:

model= otb.Registry.CreateApplication("TrainImagesClassifier")

model.SetParameterStringList("io.il","im.tif")

model.SetParameterStringList("io.vd","training.shp")

model.SetParameterString("io.imstat","stats.xml")

model.SetParameterString("io.confmatout","mat.csv")

model.SetParameterString("io.out","model.svm")

model.SetParameterFloat("sample.vtr",0.5)

model.SetParameterString("sample.vfn","Class")

model.SetParameterString("classifier","svm")

model.SetParameterString("classifier.svm.m","csvc")

model.SetParameterString("classifier.svm.k","rbf")

model.SetParameterFloat("classifier.svm.c",1)

model.SetParameterFloat("classifier.svm.gamma",1)

model.SetParameterInt("rand",3)

model.SetParameterInt("classifier.svm.opt",0)

model.ExecuteAndWriteOutput()

This program works and gives results. But when I change the classifier.svm.opt 
to 1: I got same results and
confusion matrix.
I try to use model.SetParameterString("classifier.svm.opt",true) and false, but 
nothing change.
I use the command line application too, with parameter 0,1 and true,false,and 
change default values for c and
gamma ( 1 to 100000 or 0.5), always same results...

Any help is welcome
Thank you,

Benjamin

--
--
Check the OTB FAQ at
http://www.orfeo-toolbox.org/FAQ.html
You received this message because you are subscribed to the Google
Groups "otb-users" group.
To post to this group, send email to 
otb-users-/[email protected]
To unsubscribe from this group, send email to
otb-users+unsubscribe-/[email protected]
For more options, visit this group at
http://groups.google.com/group/otb-users?hl=en
---
You received this message because you are subscribed to the Google Groups 
"otb-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to otb-users+unsubscribe-/
JYPxA39Uh5TLH3MbocFFw-XMD5yJDbdMReXY1tMh2IBuG/[email protected]
For more options, visit https://groups.google.com/d/optout.
--


--
Julien MICHEL
CNES - DCT/SI/AP - BPI 1219
18, avenue Edouard Belin
31401 Toulouse Cedex 09 - France
Tel: +33 561 282 894 - Fax: +33 561 283 109

--
--
Check the OTB FAQ at
http://www.orfeo-toolbox.org/FAQ.html

You received this message because you are subscribed to the Google
Groups "otb-users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/otb-users?hl=en
--- You received this message because you are subscribed to the Google Groups "otb-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to