fixed compile warnings from MSVC; fixed warnings in Python bindings; added some debug...
authorVadim Pisarevsky <vadim.pisarevsky@gmail.com>
Sun, 3 Aug 2014 08:46:28 +0000 (12:46 +0400)
committerVadim Pisarevsky <vadim.pisarevsky@gmail.com>
Sun, 3 Aug 2014 08:46:28 +0000 (12:46 +0400)
modules/ml/include/opencv2/ml.hpp
modules/ml/src/ann_mlp.cpp
modules/ml/src/boost.cpp
modules/ml/src/data.cpp
modules/ml/src/inner_functions.cpp
modules/ml/src/knearest.cpp
modules/ml/src/precomp.hpp
modules/ml/src/rtrees.cpp
modules/ml/src/svm.cpp
modules/ml/src/tree.cpp

index 3338dd3..f642f1f 100644 (file)
@@ -205,7 +205,7 @@ public:
 class CV_EXPORTS_W NormalBayesClassifier : public StatModel
 {
 public:
-    class CV_EXPORTS_W_MAP Params
+    class CV_EXPORTS_W Params
     {
     public:
         Params();
@@ -231,8 +231,8 @@ public:
     public:
         Params(int defaultK=10, bool isclassifier=true);
 
-        int defaultK;
-        bool isclassifier;
+        CV_PROP_RW int defaultK;
+        CV_PROP_RW bool isclassifier;
     };
     virtual void setParams(const Params& p) = 0;
     virtual Params getParams() const = 0;
@@ -328,9 +328,9 @@ public:
         explicit Params(int nclusters=DEFAULT_NCLUSTERS, int covMatType=EM::COV_MAT_DIAGONAL,
                         const TermCriteria& termCrit=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS,
                                                                   EM::DEFAULT_MAX_ITERS, 1e-6));
-        int nclusters;
-        int covMatType;
-        TermCriteria termCrit;
+        CV_PROP_RW int nclusters;
+        CV_PROP_RW int covMatType;
+        CV_PROP_RW TermCriteria termCrit;
     };
 
     virtual void setParams(const Params& p) = 0;
index 878ab4e..73af1ae 100644 (file)
@@ -123,7 +123,7 @@ public:
     void clear()
     {
         min_val = max_val = min_val1 = max_val1 = 0.;
-        rng = RNG(-1);
+        rng = RNG((uint64)-1);
         weights.clear();
         trained = false;
     }
@@ -300,7 +300,7 @@ public:
         {
             int maxIdx[] = {0, 0};
             minMaxIdx(outputs, 0, 0, 0, maxIdx);
-            return maxIdx[0] + maxIdx[1];
+            return (float)(maxIdx[0] + maxIdx[1]);
         }
 
         return 0.f;
@@ -702,9 +702,8 @@ public:
             train_backprop( inputs, outputs, sw, termcrit ) :
             train_rprop( inputs, outputs, sw, termcrit );
 
-        trained = true;
-
-        return iter;
+        trained = iter > 0;
+        return trained;
     }
 
     int train_backprop( const Mat& inputs, const Mat& outputs, const Mat& _sw, TermCriteria termCrit )
index 9af9018..4804543 100644 (file)
@@ -220,12 +220,13 @@ public:
 
     void updateWeightsAndTrim( int treeidx, vector<int>& sidx )
     {
+        putchar('<');
         int i, n = (int)w->sidx.size();
         int nvars = (int)varIdx.size();
         double sumw = 0., C = 1.;
-        cv::AutoBuffer<double> buf(n*3 + nvars);
+        cv::AutoBuffer<double> buf(n + nvars);
         double* result = buf;
-        float* sbuf = (float*)(result + n*3);
+        float* sbuf = (float*)(result + n);
         Mat sample(1, nvars, CV_32F, sbuf);
         int predictFlags = bparams.boostType == Boost::DISCRETE ? (PREDICT_MAX_VOTE | RAW_OUTPUT) : PREDICT_SUM;
         predictFlags |= COMPRESSED_INPUT;
@@ -373,6 +374,7 @@ public:
             if( w->sample_weights[si] >= threshold )
                 sidx.push_back(si);
         }
+        putchar('>'); fflush(stdout);
     }
 
     float predictTrees( const Range& range, const Mat& sample, int flags0 ) const
index 33ad79c..b5d0527 100644 (file)
@@ -310,7 +310,7 @@ public:
             varType.create(1, nvars, CV_8U);
             varType = Scalar::all(VAR_ORDERED);
             if( noutputvars == 1 )
-                varType.at<uchar>(ninputvars) = responses.type() < CV_32F ? VAR_CATEGORICAL : VAR_ORDERED;
+                varType.at<uchar>(ninputvars) = (uchar)(responses.type() < CV_32F ? VAR_CATEGORICAL : VAR_ORDERED);
         }
 
         if( noutputvars > 1 )
@@ -558,7 +558,7 @@ public:
                 if( tp == VAR_MISSED )
                     haveMissed = true;
                 rowvals.push_back(val);
-                rowtypes.push_back(tp);
+                rowtypes.push_back((uchar)tp);
                 token = strtok(NULL, delimiters);
                 if (!token)
                     break;
@@ -880,7 +880,7 @@ public:
             if( s )
             {
                 j = s[i];
-                CV_DbgAssert( 0 <= j && j < nsamples );
+                CV_Assert( 0 <= j && j < nsamples );
             }
             values[i] = src[j*sstep];
             if( values[i] == MISSED_VAL )
@@ -955,7 +955,7 @@ public:
             if( vptr )
             {
                 j = vptr[i];
-                CV_DbgAssert( 0 <= j && j < nvars );
+                CV_Assert( 0 <= j && j < nvars );
             }
             buf[i] = src[j*vstep];
         }
index a5fd59d..3d5f335 100644 (file)
@@ -108,7 +108,7 @@ float StatModel::calcError( const Ptr<TrainData>& data, bool testerr, OutputArra
     if( _resp.needed() )
         resp.copyTo(_resp);
 
-    return err / n * (isclassifier ? 100 : 1);
+    return (float)(err / n * (isclassifier ? 100 : 1));
 }
 
 void StatModel::save(const String& filename) const
index 6c40545..3ead322 100644 (file)
@@ -173,7 +173,7 @@ public:
         }
 
         float result = 0.f;
-        float inv_scale = 1./k;
+        float inv_scale = 1.f/k;
 
         for( testidx = 0; testidx < testcount; testidx++ )
         {
index dde1ba1..ca47395 100644 (file)
@@ -111,7 +111,7 @@ namespace ml
             termCrit.type |= TermCriteria::EPS;
             termCrit.epsilon = epsilon;
         }
-        int iters = (double)fn["iterations"];
+        int iters = (int)fn["iterations"];
         if( iters > 0 )
         {
             termCrit.type |= TermCriteria::COUNT;
@@ -134,7 +134,7 @@ namespace ml
             }
 
             int class_idx;
-            int Tn;
+            double Tn;
             double value;
 
             int parent;
@@ -164,7 +164,7 @@ namespace ml
             }
 
             int varIdx;
-            int inversed;
+            bool inversed;
             float quality;
             int next;
             float c;
@@ -179,7 +179,7 @@ namespace ml
             vector<WNode> wnodes;
             vector<WSplit> wsplits;
             vector<int> wsubsets;
-            vector<int> cv_Tn;
+            vector<double> cv_Tn;
             vector<double> cv_node_risk;
             vector<double> cv_node_error;
             vector<int> cv_labels;
index bdd7df7..abae817 100644 (file)
@@ -90,7 +90,7 @@ public:
     {
         DTreesImpl::clear();
         oobError = 0.;
-        rng = RNG(-1);
+        rng = RNG((uint64)-1);
     }
 
     const vector<int>& getActiveVars()
@@ -177,7 +177,6 @@ public:
 
         for( treeidx = 0; treeidx < ntrees; treeidx++ )
         {
-            putchar('.'); fflush(stdout);
             for( i = 0; i < n; i++ )
                 oobmask[i] = (uchar)1;
 
index ea8123a..985cc62 100644 (file)
@@ -1587,7 +1587,7 @@ public:
                     bool balanced )
     {
         int svmType = params.svmType;
-        RNG rng(-1);
+        RNG rng((uint64)-1);
 
         if( svmType == ONE_CLASS )
             // current implementation of "auto" svm does not support the 1-class case.
index 3eac0b8..49013e2 100644 (file)
@@ -730,7 +730,7 @@ DTreesImpl::WSplit DTreesImpl::findSplitOrdClass( int vi, const vector<int>& _si
     {
         split.varIdx = vi;
         split.c = (values[sorted_idx[best_i]] + values[sorted_idx[best_i+1]])*0.5f;
-        split.inversed = 0;
+        split.inversed = false;
         split.quality = (float)best_val;
     }
     return split;
@@ -744,12 +744,12 @@ void DTreesImpl::clusterCategories( const double* vectors, int n, int m, double*
     cv::AutoBuffer<double> buf(n + k);
     double *v_weights = buf, *c_weights = buf + n;
     bool modified = true;
-    RNG r(-1);
+    RNG r((uint64)-1);
 
     // assign labels randomly
     for( i = 0; i < n; i++ )
     {
-        int sum = 0;
+        double sum = 0;
         const double* v = vectors + i*m;
         labels[i] = i < k ? i : r.uniform(0, k);
 
@@ -1063,7 +1063,7 @@ DTreesImpl::WSplit DTreesImpl::findSplitOrdReg( int vi, const vector<int>& _sidx
     {
         split.varIdx = vi;
         split.c = (values[sorted_idx[best_i]] + values[sorted_idx[best_i+1]])*0.5f;
-        split.inversed = 0;
+        split.inversed = false;
         split.quality = (float)best_val;
     }
     return split;