2010-05-12 01:44:00 +08:00
|
|
|
/*M///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
|
|
|
//
|
|
|
|
// By downloading, copying, installing or using the software you agree to this license.
|
|
|
|
// If you do not agree to this license, do not download, install,
|
|
|
|
// copy or use the software.
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// Intel License Agreement
|
|
|
|
// For Open Source Computer Vision Library
|
|
|
|
//
|
|
|
|
// Copyright (C) 2000, Intel Corporation, all rights reserved.
|
|
|
|
// Third party copyrights are property of their respective owners.
|
|
|
|
//
|
|
|
|
// Redistribution and use in source and binary forms, with or without modification,
|
|
|
|
// are permitted provided that the following conditions are met:
|
|
|
|
//
|
|
|
|
// * Redistribution's of source code must retain the above copyright notice,
|
|
|
|
// this list of conditions and the following disclaimer.
|
|
|
|
//
|
|
|
|
// * Redistribution's in binary form must reproduce the above copyright notice,
|
|
|
|
// this list of conditions and the following disclaimer in the documentation
|
|
|
|
// and/or other materials provided with the distribution.
|
|
|
|
//
|
|
|
|
// * The name of Intel Corporation may not be used to endorse or promote products
|
|
|
|
// derived from this software without specific prior written permission.
|
|
|
|
//
|
|
|
|
// This software is provided by the copyright holders and contributors "as is" and
|
|
|
|
// any express or implied warranties, including, but not limited to, the implied
|
|
|
|
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
|
|
|
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
|
|
|
// indirect, incidental, special, exemplary, or consequential damages
|
|
|
|
// (including, but not limited to, procurement of substitute goods or services;
|
|
|
|
// loss of use, data, or profits; or business interruption) however caused
|
|
|
|
// and on any theory of liability, whether in contract, strict liability,
|
|
|
|
// or tort (including negligence or otherwise) arising in any way out of
|
|
|
|
// the use of this software, even if advised of the possibility of such damage.
|
|
|
|
//
|
|
|
|
//M*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* File cvclassifier.h
|
|
|
|
*
|
|
|
|
* Classifier types
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _CVCLASSIFIER_H_
|
|
|
|
#define _CVCLASSIFIER_H_
|
|
|
|
|
|
|
|
#include <cmath>
|
2011-05-22 02:32:34 +08:00
|
|
|
#include "cxcore.h"
|
2010-05-12 01:44:00 +08:00
|
|
|
|
|
|
|
#define CV_BOOST_API
|
|
|
|
|
|
|
|
/* Convert matrix to vector */
|
|
|
|
#define CV_MAT2VEC( mat, vdata, vstep, num ) \
|
|
|
|
assert( (mat).rows == 1 || (mat).cols == 1 ); \
|
|
|
|
(vdata) = ((mat).data.ptr); \
|
|
|
|
if( (mat).rows == 1 ) \
|
|
|
|
{ \
|
|
|
|
(vstep) = CV_ELEM_SIZE( (mat).type ); \
|
|
|
|
(num) = (mat).cols; \
|
|
|
|
} \
|
|
|
|
else \
|
|
|
|
{ \
|
|
|
|
(vstep) = (mat).step; \
|
|
|
|
(num) = (mat).rows; \
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Set up <sample> matrix header to be <num> sample of <trainData> samples matrix */
|
|
|
|
#define CV_GET_SAMPLE( trainData, tdflags, num, sample ) \
|
|
|
|
if( CV_IS_ROW_SAMPLE( tdflags ) ) \
|
|
|
|
{ \
|
|
|
|
cvInitMatHeader( &(sample), 1, (trainData).cols, \
|
|
|
|
CV_MAT_TYPE( (trainData).type ), \
|
|
|
|
((trainData).data.ptr + (num) * (trainData).step), \
|
|
|
|
(trainData).step ); \
|
|
|
|
} \
|
|
|
|
else \
|
|
|
|
{ \
|
|
|
|
cvInitMatHeader( &(sample), (trainData).rows, 1, \
|
|
|
|
CV_MAT_TYPE( (trainData).type ), \
|
|
|
|
((trainData).data.ptr + (num) * CV_ELEM_SIZE( (trainData).type )), \
|
|
|
|
(trainData).step ); \
|
|
|
|
}
|
|
|
|
|
|
|
|
#define CV_GET_SAMPLE_STEP( trainData, tdflags, sstep ) \
|
|
|
|
(sstep) = ( ( CV_IS_ROW_SAMPLE( tdflags ) ) \
|
|
|
|
? (trainData).step : CV_ELEM_SIZE( (trainData).type ) );
|
|
|
|
|
|
|
|
|
|
|
|
#define CV_LOGRATIO_THRESHOLD 0.00001F
|
|
|
|
|
|
|
|
/* log( val / (1 - val ) ) */
|
|
|
|
CV_INLINE float cvLogRatio( float val );
|
|
|
|
|
|
|
|
CV_INLINE float cvLogRatio( float val )
|
|
|
|
{
|
|
|
|
float tval;
|
|
|
|
|
|
|
|
tval = MAX(CV_LOGRATIO_THRESHOLD, MIN( 1.0F - CV_LOGRATIO_THRESHOLD, (val) ));
|
|
|
|
return logf( tval / (1.0F - tval) );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* flags values for classifier consturctor flags parameter */
|
|
|
|
|
|
|
|
/* each trainData matrix column is a sample */
|
|
|
|
#define CV_COL_SAMPLE 0
|
|
|
|
|
|
|
|
/* each trainData matrix row is a sample */
|
|
|
|
#define CV_ROW_SAMPLE 1
|
|
|
|
|
|
|
|
#define CV_IS_ROW_SAMPLE( flags ) ( ( flags ) & CV_ROW_SAMPLE )
|
|
|
|
|
|
|
|
/* Classifier supports tune function */
|
|
|
|
#define CV_TUNABLE (1 << 1)
|
|
|
|
|
|
|
|
#define CV_IS_TUNABLE( flags ) ( (flags) & CV_TUNABLE )
|
|
|
|
|
|
|
|
|
|
|
|
/* classifier fields common to all classifiers */
|
|
|
|
#define CV_CLASSIFIER_FIELDS() \
|
|
|
|
int flags; \
|
|
|
|
float(*eval)( struct CvClassifier*, CvMat* ); \
|
|
|
|
void (*tune)( struct CvClassifier*, CvMat*, int flags, CvMat*, CvMat*, CvMat*, \
|
|
|
|
CvMat*, CvMat* ); \
|
|
|
|
int (*save)( struct CvClassifier*, const char* file_name ); \
|
|
|
|
void (*release)( struct CvClassifier** );
|
|
|
|
|
|
|
|
typedef struct CvClassifier
|
|
|
|
{
|
|
|
|
CV_CLASSIFIER_FIELDS()
|
|
|
|
} CvClassifier;
|
|
|
|
|
|
|
|
#define CV_CLASSIFIER_TRAIN_PARAM_FIELDS()
|
|
|
|
typedef struct CvClassifierTrainParams
|
|
|
|
{
|
|
|
|
CV_CLASSIFIER_TRAIN_PARAM_FIELDS()
|
|
|
|
} CvClassifierTrainParams;
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
Common classifier constructor:
|
|
|
|
CvClassifier* cvCreateMyClassifier( CvMat* trainData,
|
|
|
|
int flags,
|
|
|
|
CvMat* trainClasses,
|
|
|
|
CvMat* typeMask,
|
|
|
|
CvMat* missedMeasurementsMask CV_DEFAULT(0),
|
|
|
|
CvCompIdx* compIdx CV_DEFAULT(0),
|
|
|
|
CvMat* sampleIdx CV_DEFAULT(0),
|
|
|
|
CvMat* weights CV_DEFAULT(0),
|
|
|
|
CvClassifierTrainParams* trainParams CV_DEFAULT(0)
|
|
|
|
)
|
2012-10-17 07:18:30 +08:00
|
|
|
|
2010-05-12 01:44:00 +08:00
|
|
|
*/
|
|
|
|
|
|
|
|
typedef CvClassifier* (*CvClassifierConstructor)( CvMat*, int, CvMat*, CvMat*, CvMat*,
|
|
|
|
CvMat*, CvMat*, CvMat*,
|
|
|
|
CvClassifierTrainParams* );
|
|
|
|
|
|
|
|
typedef enum CvStumpType
|
|
|
|
{
|
|
|
|
CV_CLASSIFICATION = 0,
|
|
|
|
CV_CLASSIFICATION_CLASS = 1,
|
|
|
|
CV_REGRESSION = 2
|
|
|
|
} CvStumpType;
|
|
|
|
|
|
|
|
typedef enum CvStumpError
|
|
|
|
{
|
|
|
|
CV_MISCLASSIFICATION = 0,
|
|
|
|
CV_GINI = 1,
|
|
|
|
CV_ENTROPY = 2,
|
|
|
|
CV_SQUARE = 3
|
|
|
|
} CvStumpError;
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct CvStumpTrainParams
|
|
|
|
{
|
|
|
|
CV_CLASSIFIER_TRAIN_PARAM_FIELDS()
|
|
|
|
CvStumpType type;
|
|
|
|
CvStumpError error;
|
|
|
|
} CvStumpTrainParams;
|
|
|
|
|
|
|
|
typedef struct CvMTStumpTrainParams
|
|
|
|
{
|
|
|
|
CV_CLASSIFIER_TRAIN_PARAM_FIELDS()
|
|
|
|
CvStumpType type;
|
|
|
|
CvStumpError error;
|
|
|
|
int portion; /* number of components calculated in each thread */
|
|
|
|
int numcomp; /* total number of components */
|
2012-10-17 07:18:30 +08:00
|
|
|
|
2010-05-12 01:44:00 +08:00
|
|
|
/* callback which fills <mat> with components [first, first+num[ */
|
|
|
|
void (*getTrainData)( CvMat* mat, CvMat* sampleIdx, CvMat* compIdx,
|
|
|
|
int first, int num, void* userdata );
|
|
|
|
CvMat* sortedIdx; /* presorted samples indices */
|
|
|
|
void* userdata; /* passed to callback */
|
|
|
|
} CvMTStumpTrainParams;
|
|
|
|
|
|
|
|
typedef struct CvStumpClassifier
|
|
|
|
{
|
|
|
|
CV_CLASSIFIER_FIELDS()
|
|
|
|
int compidx;
|
2012-10-17 07:18:30 +08:00
|
|
|
|
2010-05-12 01:44:00 +08:00
|
|
|
float lerror; /* impurity of the right node */
|
|
|
|
float rerror; /* impurity of the left node */
|
2012-10-17 07:18:30 +08:00
|
|
|
|
2010-05-12 01:44:00 +08:00
|
|
|
float threshold;
|
|
|
|
float left;
|
|
|
|
float right;
|
|
|
|
} CvStumpClassifier;
|
|
|
|
|
|
|
|
typedef struct CvCARTTrainParams
|
|
|
|
{
|
|
|
|
CV_CLASSIFIER_TRAIN_PARAM_FIELDS()
|
|
|
|
/* desired number of internal nodes */
|
|
|
|
int count;
|
|
|
|
CvClassifierTrainParams* stumpTrainParams;
|
|
|
|
CvClassifierConstructor stumpConstructor;
|
2012-10-17 07:18:30 +08:00
|
|
|
|
2010-05-12 01:44:00 +08:00
|
|
|
/*
|
|
|
|
* Split sample indices <idx>
|
|
|
|
* on the "left" indices <left> and "right" indices <right>
|
|
|
|
* according to samples components <compidx> values and <threshold>.
|
|
|
|
*
|
|
|
|
* NOTE: Matrices <left> and <right> must be allocated using cvCreateMat function
|
|
|
|
* since they are freed using cvReleaseMat function
|
|
|
|
*
|
|
|
|
* If it is NULL then the default implementation which evaluates training
|
|
|
|
* samples from <trainData> passed to classifier constructor is used
|
|
|
|
*/
|
|
|
|
void (*splitIdx)( int compidx, float threshold,
|
|
|
|
CvMat* idx, CvMat** left, CvMat** right,
|
|
|
|
void* userdata );
|
|
|
|
void* userdata;
|
|
|
|
} CvCARTTrainParams;
|
|
|
|
|
|
|
|
typedef struct CvCARTClassifier
|
|
|
|
{
|
|
|
|
CV_CLASSIFIER_FIELDS()
|
|
|
|
/* number of internal nodes */
|
|
|
|
int count;
|
|
|
|
|
|
|
|
/* internal nodes (each array of <count> elements) */
|
|
|
|
int* compidx;
|
|
|
|
float* threshold;
|
|
|
|
int* left;
|
|
|
|
int* right;
|
|
|
|
|
|
|
|
/* leaves (array of <count>+1 elements) */
|
|
|
|
float* val;
|
|
|
|
} CvCARTClassifier;
|
|
|
|
|
|
|
|
CV_BOOST_API
|
|
|
|
void cvGetSortedIndices( CvMat* val, CvMat* idx, int sortcols CV_DEFAULT( 0 ) );
|
|
|
|
|
|
|
|
CV_BOOST_API
|
|
|
|
void cvReleaseStumpClassifier( CvClassifier** classifier );
|
|
|
|
|
|
|
|
CV_BOOST_API
|
|
|
|
float cvEvalStumpClassifier( CvClassifier* classifier, CvMat* sample );
|
|
|
|
|
|
|
|
CV_BOOST_API
|
|
|
|
CvClassifier* cvCreateStumpClassifier( CvMat* trainData,
|
|
|
|
int flags,
|
|
|
|
CvMat* trainClasses,
|
|
|
|
CvMat* typeMask,
|
|
|
|
CvMat* missedMeasurementsMask CV_DEFAULT(0),
|
|
|
|
CvMat* compIdx CV_DEFAULT(0),
|
|
|
|
CvMat* sampleIdx CV_DEFAULT(0),
|
|
|
|
CvMat* weights CV_DEFAULT(0),
|
|
|
|
CvClassifierTrainParams* trainParams CV_DEFAULT(0) );
|
|
|
|
|
|
|
|
/*
|
|
|
|
* cvCreateMTStumpClassifier
|
|
|
|
*
|
|
|
|
* Multithreaded stump classifier constructor
|
|
|
|
* Includes huge train data support through callback function
|
|
|
|
*/
|
|
|
|
CV_BOOST_API
|
|
|
|
CvClassifier* cvCreateMTStumpClassifier( CvMat* trainData,
|
|
|
|
int flags,
|
|
|
|
CvMat* trainClasses,
|
|
|
|
CvMat* typeMask,
|
|
|
|
CvMat* missedMeasurementsMask,
|
|
|
|
CvMat* compIdx,
|
|
|
|
CvMat* sampleIdx,
|
|
|
|
CvMat* weights,
|
|
|
|
CvClassifierTrainParams* trainParams );
|
|
|
|
|
|
|
|
/*
|
|
|
|
* cvCreateCARTClassifier
|
|
|
|
*
|
|
|
|
* CART classifier constructor
|
|
|
|
*/
|
|
|
|
CV_BOOST_API
|
|
|
|
CvClassifier* cvCreateCARTClassifier( CvMat* trainData,
|
|
|
|
int flags,
|
|
|
|
CvMat* trainClasses,
|
|
|
|
CvMat* typeMask,
|
|
|
|
CvMat* missedMeasurementsMask,
|
|
|
|
CvMat* compIdx,
|
|
|
|
CvMat* sampleIdx,
|
|
|
|
CvMat* weights,
|
|
|
|
CvClassifierTrainParams* trainParams );
|
|
|
|
|
|
|
|
CV_BOOST_API
|
|
|
|
void cvReleaseCARTClassifier( CvClassifier** classifier );
|
|
|
|
|
|
|
|
CV_BOOST_API
|
|
|
|
float cvEvalCARTClassifier( CvClassifier* classifier, CvMat* sample );
|
|
|
|
|
|
|
|
/****************************************************************************************\
|
|
|
|
* Boosting *
|
|
|
|
\****************************************************************************************/
|
|
|
|
|
|
|
|
/*
|
2012-10-17 07:18:30 +08:00
|
|
|
* CvBoostType
|
2010-05-12 01:44:00 +08:00
|
|
|
*
|
|
|
|
* The CvBoostType enumeration specifies the boosting type.
|
|
|
|
*
|
|
|
|
* Remarks
|
|
|
|
* Four different boosting variants for 2 class classification problems are supported:
|
2012-10-17 07:18:30 +08:00
|
|
|
* Discrete AdaBoost, Real AdaBoost, LogitBoost and Gentle AdaBoost.
|
2010-05-12 01:44:00 +08:00
|
|
|
* The L2 (2 class classification problems) and LK (K class classification problems)
|
|
|
|
* algorithms are close to LogitBoost but more numerically stable than last one.
|
|
|
|
* For regression three different loss functions are supported:
|
|
|
|
* Least square, least absolute deviation and huber loss.
|
|
|
|
*/
|
|
|
|
typedef enum CvBoostType
|
|
|
|
{
|
|
|
|
CV_DABCLASS = 0, /* 2 class Discrete AdaBoost */
|
|
|
|
CV_RABCLASS = 1, /* 2 class Real AdaBoost */
|
|
|
|
CV_LBCLASS = 2, /* 2 class LogitBoost */
|
|
|
|
CV_GABCLASS = 3, /* 2 class Gentle AdaBoost */
|
|
|
|
CV_L2CLASS = 4, /* classification (2 class problem) */
|
|
|
|
CV_LKCLASS = 5, /* classification (K class problem) */
|
|
|
|
CV_LSREG = 6, /* least squares regression */
|
|
|
|
CV_LADREG = 7, /* least absolute deviation regression */
|
2014-01-07 06:38:41 +08:00
|
|
|
CV_MREG = 8 /* M-regression (Huber loss) */
|
2010-05-12 01:44:00 +08:00
|
|
|
} CvBoostType;
|
|
|
|
|
|
|
|
/****************************************************************************************\
|
|
|
|
* Iterative training functions *
|
|
|
|
\****************************************************************************************/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* CvBoostTrainer
|
|
|
|
*
|
|
|
|
* The CvBoostTrainer structure represents internal boosting trainer.
|
|
|
|
*/
|
|
|
|
typedef struct CvBoostTrainer CvBoostTrainer;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* cvBoostStartTraining
|
|
|
|
*
|
|
|
|
* The cvBoostStartTraining function starts training process and calculates
|
|
|
|
* response values and weights for the first weak classifier training.
|
|
|
|
*
|
|
|
|
* Parameters
|
|
|
|
* trainClasses
|
|
|
|
* Vector of classes of training samples classes. Each element must be 0 or 1 and
|
|
|
|
* of type CV_32FC1.
|
|
|
|
* weakTrainVals
|
|
|
|
* Vector of response values for the first trained weak classifier.
|
|
|
|
* Must be of type CV_32FC1.
|
|
|
|
* weights
|
|
|
|
* Weight vector of training samples for the first trained weak classifier.
|
|
|
|
* Must be of type CV_32FC1.
|
|
|
|
* type
|
|
|
|
* Boosting type. CV_DABCLASS, CV_RABCLASS, CV_LBCLASS, CV_GABCLASS
|
|
|
|
* types are supported.
|
|
|
|
*
|
|
|
|
* Return Values
|
|
|
|
* The return value is a pointer to internal trainer structure which is used
|
|
|
|
* to perform next training iterations.
|
|
|
|
*
|
|
|
|
* Remarks
|
|
|
|
* weakTrainVals and weights must be allocated before calling the function
|
|
|
|
* and of the same size as trainingClasses. Usually weights should be initialized
|
|
|
|
* with 1.0 value.
|
|
|
|
* The function calculates response values and weights for the first weak
|
|
|
|
* classifier training and stores them into weakTrainVals and weights
|
|
|
|
* respectively.
|
|
|
|
* Note, the training of the weak classifier using weakTrainVals, weight,
|
|
|
|
* trainingData is outside of this function.
|
|
|
|
*/
|
|
|
|
CV_BOOST_API
|
|
|
|
CvBoostTrainer* cvBoostStartTraining( CvMat* trainClasses,
|
|
|
|
CvMat* weakTrainVals,
|
|
|
|
CvMat* weights,
|
|
|
|
CvMat* sampleIdx,
|
|
|
|
CvBoostType type );
|
|
|
|
/*
|
|
|
|
* cvBoostNextWeakClassifier
|
|
|
|
*
|
|
|
|
* The cvBoostNextWeakClassifier function performs next training
|
|
|
|
* iteration and caluclates response values and weights for the next weak
|
|
|
|
* classifier training.
|
|
|
|
*
|
|
|
|
* Parameters
|
|
|
|
* weakEvalVals
|
|
|
|
* Vector of values obtained by evaluation of each sample with
|
|
|
|
* the last trained weak classifier (iteration i). Must be of CV_32FC1 type.
|
|
|
|
* trainClasses
|
|
|
|
* Vector of classes of training samples. Each element must be 0 or 1,
|
|
|
|
* and of type CV_32FC1.
|
|
|
|
* weakTrainVals
|
|
|
|
* Vector of response values for the next weak classifier training
|
|
|
|
* (iteration i+1). Must be of type CV_32FC1.
|
|
|
|
* weights
|
|
|
|
* Weight vector of training samples for the next weak classifier training
|
|
|
|
* (iteration i+1). Must be of type CV_32FC1.
|
|
|
|
* trainer
|
|
|
|
* A pointer to internal trainer returned by the cvBoostStartTraining
|
|
|
|
* function call.
|
|
|
|
*
|
|
|
|
* Return Values
|
|
|
|
* The return value is the coefficient for the last trained weak classifier.
|
|
|
|
*
|
|
|
|
* Remarks
|
|
|
|
* weakTrainVals and weights must be exactly the same vectors as used in
|
|
|
|
* the cvBoostStartTraining function call and should not be modified.
|
|
|
|
* The function calculates response values and weights for the next weak
|
|
|
|
* classifier training and stores them into weakTrainVals and weights
|
|
|
|
* respectively.
|
|
|
|
* Note, the training of the weak classifier of iteration i+1 using
|
|
|
|
* weakTrainVals, weight, trainingData is outside of this function.
|
|
|
|
*/
|
|
|
|
CV_BOOST_API
|
|
|
|
float cvBoostNextWeakClassifier( CvMat* weakEvalVals,
|
|
|
|
CvMat* trainClasses,
|
|
|
|
CvMat* weakTrainVals,
|
|
|
|
CvMat* weights,
|
|
|
|
CvBoostTrainer* trainer );
|
|
|
|
|
|
|
|
/*
|
|
|
|
* cvBoostEndTraining
|
|
|
|
*
|
|
|
|
* The cvBoostEndTraining function finishes training process and releases
|
|
|
|
* internally allocated memory.
|
|
|
|
*
|
|
|
|
* Parameters
|
|
|
|
* trainer
|
|
|
|
* A pointer to a pointer to internal trainer returned by the cvBoostStartTraining
|
|
|
|
* function call.
|
|
|
|
*/
|
|
|
|
CV_BOOST_API
|
|
|
|
void cvBoostEndTraining( CvBoostTrainer** trainer );
|
|
|
|
|
|
|
|
/****************************************************************************************\
|
|
|
|
* Boosted tree models *
|
|
|
|
\****************************************************************************************/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* CvBtClassifier
|
|
|
|
*
|
|
|
|
* The CvBtClassifier structure represents boosted tree model.
|
|
|
|
*
|
|
|
|
* Members
|
|
|
|
* flags
|
|
|
|
* Flags. If CV_IS_TUNABLE( flags ) != 0 then the model supports tuning.
|
|
|
|
* eval
|
|
|
|
* Evaluation function. Returns sample predicted class (0, 1, etc.)
|
|
|
|
* for classification or predicted value for regression.
|
|
|
|
* tune
|
|
|
|
* Tune function. If the model supports tuning then tune call performs
|
|
|
|
* one more boosting iteration if passed to the function flags parameter
|
|
|
|
* is CV_TUNABLE otherwise releases internally allocated for tuning memory
|
|
|
|
* and makes the model untunable.
|
|
|
|
* NOTE: Since tuning uses the pointers to parameters,
|
|
|
|
* passed to the cvCreateBtClassifier function, they should not be modified
|
|
|
|
* or released between tune calls.
|
|
|
|
* save
|
|
|
|
* This function stores the model into given file.
|
|
|
|
* release
|
|
|
|
* This function releases the model.
|
|
|
|
* type
|
|
|
|
* Boosted tree model type.
|
|
|
|
* numclasses
|
|
|
|
* Number of classes for CV_LKCLASS type or 1 for all other types.
|
|
|
|
* numiter
|
|
|
|
* Number of iterations. Number of weak classifiers is equal to number
|
|
|
|
* of iterations for all types except CV_LKCLASS. For CV_LKCLASS type
|
|
|
|
* number of weak classifiers is (numiter * numclasses).
|
|
|
|
* numfeatures
|
|
|
|
* Number of features in sample.
|
|
|
|
* trees
|
|
|
|
* Stores weak classifiers when the model does not support tuning.
|
|
|
|
* seq
|
|
|
|
* Stores weak classifiers when the model supports tuning.
|
|
|
|
* trainer
|
|
|
|
* Pointer to internal tuning parameters if the model supports tuning.
|
|
|
|
*/
|
|
|
|
typedef struct CvBtClassifier
|
|
|
|
{
|
|
|
|
CV_CLASSIFIER_FIELDS()
|
2012-10-17 07:18:30 +08:00
|
|
|
|
2010-05-12 01:44:00 +08:00
|
|
|
CvBoostType type;
|
|
|
|
int numclasses;
|
|
|
|
int numiter;
|
|
|
|
int numfeatures;
|
|
|
|
union
|
|
|
|
{
|
|
|
|
CvCARTClassifier** trees;
|
|
|
|
CvSeq* seq;
|
|
|
|
};
|
|
|
|
void* trainer;
|
|
|
|
} CvBtClassifier;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* CvBtClassifierTrainParams
|
|
|
|
*
|
|
|
|
* The CvBtClassifierTrainParams structure stores training parameters for
|
|
|
|
* boosted tree model.
|
|
|
|
*
|
|
|
|
* Members
|
|
|
|
* type
|
|
|
|
* Boosted tree model type.
|
|
|
|
* numiter
|
|
|
|
* Desired number of iterations.
|
|
|
|
* param
|
|
|
|
* Parameter Model Type Parameter Meaning
|
|
|
|
* param[0] Any Shrinkage factor
|
|
|
|
* param[1] CV_MREG alpha. (1-alpha) determines "break-down" point of
|
|
|
|
* the training procedure, i.e. the fraction of samples
|
|
|
|
* that can be arbitrary modified without serious
|
|
|
|
* degrading the quality of the result.
|
|
|
|
* CV_DABCLASS, Weight trimming factor.
|
|
|
|
* CV_RABCLASS,
|
|
|
|
* CV_LBCLASS,
|
|
|
|
* CV_GABCLASS,
|
|
|
|
* CV_L2CLASS,
|
|
|
|
* CV_LKCLASS
|
|
|
|
* numsplits
|
|
|
|
* Desired number of splits in each tree.
|
|
|
|
*/
|
|
|
|
typedef struct CvBtClassifierTrainParams
|
|
|
|
{
|
|
|
|
CV_CLASSIFIER_TRAIN_PARAM_FIELDS()
|
|
|
|
|
|
|
|
CvBoostType type;
|
|
|
|
int numiter;
|
|
|
|
float param[2];
|
|
|
|
int numsplits;
|
|
|
|
} CvBtClassifierTrainParams;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* cvCreateBtClassifier
|
|
|
|
*
|
|
|
|
* The cvCreateBtClassifier function creates boosted tree model.
|
|
|
|
*
|
|
|
|
* Parameters
|
|
|
|
* trainData
|
|
|
|
* Matrix of feature values. Must have CV_32FC1 type.
|
|
|
|
* flags
|
|
|
|
* Determines how samples are stored in trainData.
|
|
|
|
* One of CV_ROW_SAMPLE or CV_COL_SAMPLE.
|
|
|
|
* Optionally may be combined with CV_TUNABLE to make tunable model.
|
|
|
|
* trainClasses
|
|
|
|
* Vector of responses for regression or classes (0, 1, 2, etc.) for classification.
|
|
|
|
* typeMask,
|
|
|
|
* missedMeasurementsMask,
|
|
|
|
* compIdx
|
|
|
|
* Not supported. Must be NULL.
|
|
|
|
* sampleIdx
|
|
|
|
* Indices of samples used in training. If NULL then all samples are used.
|
|
|
|
* For CV_DABCLASS, CV_RABCLASS, CV_LBCLASS and CV_GABCLASS must be NULL.
|
|
|
|
* weights
|
|
|
|
* Not supported. Must be NULL.
|
|
|
|
* trainParams
|
|
|
|
* A pointer to CvBtClassifierTrainParams structure. Training parameters.
|
|
|
|
* See CvBtClassifierTrainParams description for details.
|
|
|
|
*
|
|
|
|
* Return Values
|
|
|
|
* The return value is a pointer to created boosted tree model of type CvBtClassifier.
|
|
|
|
*
|
|
|
|
* Remarks
|
|
|
|
* The function performs trainParams->numiter training iterations.
|
|
|
|
* If CV_TUNABLE flag is specified then created model supports tuning.
|
|
|
|
* In this case additional training iterations may be performed by
|
|
|
|
* tune function call.
|
|
|
|
*/
|
|
|
|
CV_BOOST_API
|
|
|
|
CvClassifier* cvCreateBtClassifier( CvMat* trainData,
|
|
|
|
int flags,
|
|
|
|
CvMat* trainClasses,
|
|
|
|
CvMat* typeMask,
|
|
|
|
CvMat* missedMeasurementsMask,
|
|
|
|
CvMat* compIdx,
|
|
|
|
CvMat* sampleIdx,
|
|
|
|
CvMat* weights,
|
|
|
|
CvClassifierTrainParams* trainParams );
|
|
|
|
|
|
|
|
/*
|
|
|
|
* cvCreateBtClassifierFromFile
|
|
|
|
*
|
|
|
|
* The cvCreateBtClassifierFromFile function restores previously saved
|
|
|
|
* boosted tree model from file.
|
|
|
|
*
|
|
|
|
* Parameters
|
|
|
|
* filename
|
|
|
|
* The name of the file with boosted tree model.
|
|
|
|
*
|
|
|
|
* Remarks
|
|
|
|
* The restored model does not support tuning.
|
|
|
|
*/
|
|
|
|
CV_BOOST_API
|
|
|
|
CvClassifier* cvCreateBtClassifierFromFile( const char* filename );
|
|
|
|
|
|
|
|
/****************************************************************************************\
|
|
|
|
* Utility functions *
|
|
|
|
\****************************************************************************************/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* cvTrimWeights
|
|
|
|
*
|
|
|
|
* The cvTrimWeights function performs weight trimming.
|
|
|
|
*
|
|
|
|
* Parameters
|
|
|
|
* weights
|
|
|
|
* Weights vector.
|
|
|
|
* idx
|
|
|
|
* Indices vector of weights that should be considered.
|
|
|
|
* If it is NULL then all weights are used.
|
|
|
|
* factor
|
|
|
|
* Weight trimming factor. Must be in [0, 1] range.
|
|
|
|
*
|
|
|
|
* Return Values
|
|
|
|
* The return value is a vector of indices. If all samples should be used then
|
|
|
|
* it is equal to idx. In other case the cvReleaseMat function should be called
|
|
|
|
* to release it.
|
|
|
|
*
|
|
|
|
* Remarks
|
|
|
|
*/
|
|
|
|
CV_BOOST_API
|
|
|
|
CvMat* cvTrimWeights( CvMat* weights, CvMat* idx, float factor );
|
|
|
|
|
|
|
|
/*
|
|
|
|
* cvReadTrainData
|
|
|
|
*
|
|
|
|
* The cvReadTrainData function reads feature values and responses from file.
|
|
|
|
*
|
|
|
|
* Parameters
|
|
|
|
* filename
|
|
|
|
* The name of the file to be read.
|
|
|
|
* flags
|
|
|
|
* One of CV_ROW_SAMPLE or CV_COL_SAMPLE. Determines how feature values
|
|
|
|
* will be stored.
|
|
|
|
* trainData
|
|
|
|
* A pointer to a pointer to created matrix with feature values.
|
|
|
|
* cvReleaseMat function should be used to destroy created matrix.
|
|
|
|
* trainClasses
|
|
|
|
* A pointer to a pointer to created matrix with response values.
|
|
|
|
* cvReleaseMat function should be used to destroy created matrix.
|
|
|
|
*
|
|
|
|
* Remarks
|
|
|
|
* File format:
|
|
|
|
* ============================================
|
|
|
|
* m n
|
|
|
|
* value_1_1 value_1_2 ... value_1_n response_1
|
|
|
|
* value_2_1 value_2_2 ... value_2_n response_2
|
|
|
|
* ...
|
|
|
|
* value_m_1 value_m_2 ... value_m_n response_m
|
|
|
|
* ============================================
|
|
|
|
* m
|
|
|
|
* Number of samples
|
|
|
|
* n
|
|
|
|
* Number of features in each sample
|
|
|
|
* value_i_j
|
|
|
|
* Value of j-th feature of i-th sample
|
|
|
|
* response_i
|
|
|
|
* Response value of i-th sample
|
|
|
|
* For classification problems responses represent classes (0, 1, etc.)
|
|
|
|
* All values and classes are integer or real numbers.
|
|
|
|
*/
|
|
|
|
CV_BOOST_API
|
|
|
|
void cvReadTrainData( const char* filename,
|
|
|
|
int flags,
|
|
|
|
CvMat** trainData,
|
|
|
|
CvMat** trainClasses );
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* cvWriteTrainData
|
|
|
|
*
|
|
|
|
* The cvWriteTrainData function stores feature values and responses into file.
|
|
|
|
*
|
|
|
|
* Parameters
|
|
|
|
* filename
|
|
|
|
* The name of the file.
|
|
|
|
* flags
|
|
|
|
* One of CV_ROW_SAMPLE or CV_COL_SAMPLE. Determines how feature values
|
|
|
|
* are stored.
|
|
|
|
* trainData
|
|
|
|
* Feature values matrix.
|
|
|
|
* trainClasses
|
|
|
|
* Response values vector.
|
|
|
|
* sampleIdx
|
|
|
|
* Vector of idicies of the samples that should be stored. If it is NULL
|
|
|
|
* then all samples will be stored.
|
|
|
|
*
|
|
|
|
* Remarks
|
|
|
|
* See the cvReadTrainData function for file format description.
|
|
|
|
*/
|
|
|
|
CV_BOOST_API
|
|
|
|
void cvWriteTrainData( const char* filename,
|
|
|
|
int flags,
|
|
|
|
CvMat* trainData,
|
|
|
|
CvMat* trainClasses,
|
|
|
|
CvMat* sampleIdx );
|
|
|
|
|
|
|
|
/*
|
|
|
|
* cvRandShuffle
|
|
|
|
*
|
|
|
|
* The cvRandShuffle function perfroms random shuffling of given vector.
|
|
|
|
*
|
|
|
|
* Parameters
|
|
|
|
* vector
|
|
|
|
* Vector that should be shuffled.
|
|
|
|
* Must have CV_8UC1, CV_16SC1, CV_32SC1 or CV_32FC1 type.
|
|
|
|
*/
|
|
|
|
CV_BOOST_API
|
|
|
|
void cvRandShuffleVec( CvMat* vector );
|
|
|
|
|
|
|
|
#endif /* _CVCLASSIFIER_H_ */
|