Normalize line endings and whitespace
This commit is contained in:

committed by
Andrey Kamaev

parent
69020da607
commit
04384a71e4
@@ -1900,7 +1900,7 @@ void CvBoost::write_params( CvFileStorage* fs ) const
|
||||
else
|
||||
cvWriteInt( fs, "splitting_criteria", params.split_criteria );
|
||||
|
||||
cvWriteInt( fs, "ntrees", weak->total );
|
||||
cvWriteInt( fs, "ntrees", weak->total );
|
||||
cvWriteReal( fs, "weight_trimming_rate", params.weight_trim_rate );
|
||||
|
||||
data->write_params( fs );
|
||||
|
@@ -263,10 +263,10 @@ static void icvTrainCNNetwork( CvCNNetwork* network,
|
||||
{
|
||||
image.data.fl = (float*)images[i];
|
||||
cvTranspose( &image, X[0] );
|
||||
|
||||
|
||||
for( k = 0, layer = first_layer; k < n_layers; k++, layer = layer->next_layer )
|
||||
CV_CALL(layer->forward( layer, X[k], X[k+1] ));
|
||||
|
||||
|
||||
cvTranspose( X[n_layers], dE_dX[n_layers] );
|
||||
cvGetRow( etalons, &etalon, *right_etal_idx );
|
||||
loss = (float)cvNorm( dE_dX[n_layers], &etalon );
|
||||
@@ -466,8 +466,8 @@ static void icvCNNModelRelease( CvStatModel** cnn_model )
|
||||
\****************************************************************************************/
|
||||
ML_IMPL CvCNNetwork* cvCreateCNNetwork( CvCNNLayer* first_layer )
|
||||
{
|
||||
CvCNNetwork* network = 0;
|
||||
|
||||
CvCNNetwork* network = 0;
|
||||
|
||||
CV_FUNCNAME( "cvCreateCNNetwork" );
|
||||
__BEGIN__;
|
||||
|
||||
@@ -669,7 +669,7 @@ ML_IMPL CvCNNLayer* cvCreateCNNConvolutionLayer(
|
||||
CvRNG rng = cvRNG( 0xFFFFFFFF );
|
||||
cvRandArr( &rng, layer->weights, CV_RAND_UNI, cvRealScalar(-1), cvRealScalar(1) );
|
||||
}
|
||||
|
||||
|
||||
if( connect_mask )
|
||||
{
|
||||
if( !ICV_IS_MAT_OF_TYPE( connect_mask, CV_8UC1 ) )
|
||||
@@ -689,7 +689,7 @@ ML_IMPL CvCNNLayer* cvCreateCNNConvolutionLayer(
|
||||
cvReleaseMat( &layer->connect_mask );
|
||||
cvFree( &layer );
|
||||
}
|
||||
|
||||
|
||||
return (CvCNNLayer*)layer;
|
||||
}
|
||||
|
||||
@@ -757,7 +757,7 @@ ML_IMPL CvCNNLayer* cvCreateCNNSubSamplingLayer(
|
||||
}
|
||||
|
||||
/****************************************************************************************/
|
||||
ML_IMPL CvCNNLayer* cvCreateCNNFullConnectLayer(
|
||||
ML_IMPL CvCNNLayer* cvCreateCNNFullConnectLayer(
|
||||
int n_inputs, int n_outputs, float a, float s,
|
||||
float init_learn_rate, int learn_rate_decrease_type, CvMat* weights )
|
||||
{
|
||||
@@ -928,7 +928,7 @@ static void icvCNNSubSamplingForward( CvCNNLayer* _layer,
|
||||
for( xx = 0; xx < Ywidth; xx++, sumX_data++ )
|
||||
*sumX_data += Xplane[((yy+ky)*Xwidth+(xx+kx))];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
w = layer->weights->data.fl;
|
||||
cvGetRows( layer->sumX, &sumX_sub_col, 0, Ysize );
|
||||
@@ -1256,7 +1256,7 @@ static void icvCNNFullConnectBackward( CvCNNLayer* _layer,
|
||||
{
|
||||
CvMat* dE_dY_activ_func_der = 0;
|
||||
CvMat* dE_dW = 0;
|
||||
|
||||
|
||||
CV_FUNCNAME( "icvCNNFullConnectBackward" );
|
||||
|
||||
if( !ICV_IS_CNN_FULLCONNECT_LAYER(_layer) )
|
||||
@@ -1276,12 +1276,12 @@ static void icvCNNFullConnectBackward( CvCNNLayer* _layer,
|
||||
CV_ASSERT(X->cols == 1 && X->rows == n_inputs);
|
||||
CV_ASSERT(dE_dY->rows == 1 && dE_dY->cols == n_outputs );
|
||||
CV_ASSERT(dE_dX->rows == 1 && dE_dX->cols == n_inputs );
|
||||
|
||||
|
||||
// we violate the convetion about vector's orientation because
|
||||
// here is more convenient to make this parameter a row-vector
|
||||
// here is more convenient to make this parameter a row-vector
|
||||
CV_CALL(dE_dY_activ_func_der = cvCreateMat( 1, n_outputs, CV_32FC1 ));
|
||||
CV_CALL(dE_dW = cvCreateMat( 1, weights->rows*weights->cols, CV_32FC1 ));
|
||||
|
||||
|
||||
// 1) compute gradients dE_dX and dE_dW
|
||||
// activ_func_der == 4as*(layer->exp2ssumWX)/(layer->exp2ssumWX + 1)^2
|
||||
CV_CALL(cvReshape( layer->exp2ssumWX, &exp2ssumWXrow, 0, layer->exp2ssumWX->cols ));
|
||||
@@ -1359,7 +1359,7 @@ static void icvCNNSubSamplingRelease( CvCNNLayer** p_layer )
|
||||
__BEGIN__;
|
||||
|
||||
CvCNNSubSamplingLayer* layer = 0;
|
||||
|
||||
|
||||
if( !p_layer )
|
||||
CV_ERROR( CV_StsNullPtr, "Null double pointer" );
|
||||
|
||||
@@ -1384,7 +1384,7 @@ static void icvCNNFullConnectRelease( CvCNNLayer** p_layer )
|
||||
__BEGIN__;
|
||||
|
||||
CvCNNFullConnectLayer* layer = 0;
|
||||
|
||||
|
||||
if( !p_layer )
|
||||
CV_ERROR( CV_StsNullPtr, "Null double pointer" );
|
||||
|
||||
@@ -1467,7 +1467,7 @@ static CvCNNLayer* icvReadCNNLayer( CvFileStorage* fs, CvFileNode* node )
|
||||
if( !connect_mask )
|
||||
CV_ERROR( CV_StsParseError, "Missing <connect mask>" );
|
||||
|
||||
CV_CALL(layer = cvCreateCNNConvolutionLayer(
|
||||
CV_CALL(layer = cvCreateCNNConvolutionLayer(
|
||||
n_input_planes, input_height, input_width, n_output_planes, K,
|
||||
init_learn_rate, learn_type, connect_mask, weights ));
|
||||
}
|
||||
@@ -1619,7 +1619,7 @@ static void* icvReadCNNModel( CvFileStorage* fs, CvFileNode* root_node )
|
||||
static void
|
||||
icvWriteCNNModel( CvFileStorage* fs, const char* name,
|
||||
const void* struct_ptr, CvAttrList )
|
||||
|
||||
|
||||
{
|
||||
CV_FUNCNAME ("icvWriteCNNModel");
|
||||
__BEGIN__;
|
||||
@@ -1632,12 +1632,12 @@ icvWriteCNNModel( CvFileStorage* fs, const char* name,
|
||||
CV_ERROR( CV_StsBadArg, "Invalid pointer" );
|
||||
|
||||
n_layers = cnn->network->n_layers;
|
||||
|
||||
|
||||
CV_CALL( cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_ML_CNN ));
|
||||
|
||||
CV_CALL(cvWrite( fs, "etalons", cnn->etalons ));
|
||||
CV_CALL(cvWrite( fs, "cls_labels", cnn->cls_labels ));
|
||||
|
||||
|
||||
CV_CALL( cvStartWriteStruct( fs, "network", CV_NODE_SEQ ));
|
||||
|
||||
layer = cnn->network->layers;
|
||||
|
@@ -41,7 +41,7 @@
|
||||
#include "precomp.hpp"
|
||||
#include <ctype.h>
|
||||
|
||||
#define MISS_VAL FLT_MAX
|
||||
#define MISS_VAL FLT_MAX
|
||||
#define CV_VAR_MISS 0
|
||||
|
||||
CvTrainTestSplit::CvTrainTestSplit()
|
||||
@@ -57,7 +57,7 @@ CvTrainTestSplit::CvTrainTestSplit( int _train_sample_count, bool _mix )
|
||||
train_sample_part.count = _train_sample_count;
|
||||
mix = _mix;
|
||||
}
|
||||
|
||||
|
||||
CvTrainTestSplit::CvTrainTestSplit( float _train_sample_portion, bool _mix )
|
||||
{
|
||||
train_sample_part_mode = CV_PORTION;
|
||||
@@ -109,7 +109,7 @@ void CvMLData::clear()
|
||||
cvReleaseMat( &var_types_out );
|
||||
|
||||
free_train_test_idx();
|
||||
|
||||
|
||||
total_class_count = 0;
|
||||
|
||||
response_idx = -1;
|
||||
@@ -119,17 +119,17 @@ void CvMLData::clear()
|
||||
|
||||
static char *fgets_chomp(char *str, int n, FILE *stream)
|
||||
{
|
||||
char *head = fgets(str, n, stream);
|
||||
if( head )
|
||||
{
|
||||
for(char *tail = head + strlen(head) - 1; tail >= head; --tail)
|
||||
{
|
||||
if( *tail != '\r' && *tail != '\n' )
|
||||
break;
|
||||
*tail = '\0';
|
||||
}
|
||||
}
|
||||
return head;
|
||||
char *head = fgets(str, n, stream);
|
||||
if( head )
|
||||
{
|
||||
for(char *tail = head + strlen(head) - 1; tail >= head; --tail)
|
||||
{
|
||||
if( *tail != '\r' && *tail != '\n' )
|
||||
break;
|
||||
*tail = '\0';
|
||||
}
|
||||
}
|
||||
return head;
|
||||
}
|
||||
|
||||
|
||||
@@ -143,13 +143,13 @@ int CvMLData::read_csv(const char* filename)
|
||||
char *ptr;
|
||||
float* el_ptr;
|
||||
CvSeqReader reader;
|
||||
int cols_count = 0;
|
||||
int cols_count = 0;
|
||||
uchar *var_types_ptr = 0;
|
||||
|
||||
clear();
|
||||
|
||||
file = fopen( filename, "rt" );
|
||||
|
||||
|
||||
if( !file )
|
||||
return -1;
|
||||
|
||||
@@ -177,7 +177,7 @@ int CvMLData::read_csv(const char* filename)
|
||||
ptr++;
|
||||
}
|
||||
|
||||
cols_count++;
|
||||
cols_count++;
|
||||
|
||||
if ( cols_count == 0)
|
||||
{
|
||||
@@ -199,7 +199,7 @@ int CvMLData::read_csv(const char* filename)
|
||||
char *token = NULL;
|
||||
int type;
|
||||
token = strtok(buf, str_delimiter);
|
||||
if (!token)
|
||||
if (!token)
|
||||
break;
|
||||
for (int i = 0; i < cols_count-1; i++)
|
||||
{
|
||||
@@ -274,7 +274,7 @@ const std::map<std::string, int>& CvMLData::get_class_labels_map() const
|
||||
|
||||
void CvMLData::str_to_flt_elem( const char* token, float& flt_elem, int& type)
|
||||
{
|
||||
|
||||
|
||||
char* stopstring = NULL;
|
||||
flt_elem = (float)strtod( token, &stopstring );
|
||||
assert( stopstring );
|
||||
@@ -308,7 +308,7 @@ void CvMLData::set_delimiter(char ch)
|
||||
|
||||
if (ch == miss_ch /*|| ch == flt_separator*/)
|
||||
CV_ERROR(CV_StsBadArg, "delimited, miss_character and flt_separator must be different");
|
||||
|
||||
|
||||
delimiter = ch;
|
||||
|
||||
__END__;
|
||||
@@ -326,7 +326,7 @@ void CvMLData::set_miss_ch(char ch)
|
||||
|
||||
if (ch == delimiter/* || ch == flt_separator*/)
|
||||
CV_ERROR(CV_StsBadArg, "delimited, miss_character and flt_separator must be different");
|
||||
|
||||
|
||||
miss_ch = ch;
|
||||
|
||||
__END__;
|
||||
@@ -354,7 +354,7 @@ void CvMLData::set_response_idx( int idx )
|
||||
chahge_var_idx( idx, false );
|
||||
response_idx = idx;
|
||||
|
||||
__END__;
|
||||
__END__;
|
||||
}
|
||||
|
||||
int CvMLData::get_response_idx() const
|
||||
@@ -372,12 +372,12 @@ void CvMLData::change_var_type( int var_idx, int type )
|
||||
{
|
||||
CV_FUNCNAME( "CvMLData::change_var_type" );
|
||||
__BEGIN__;
|
||||
|
||||
|
||||
int var_count = 0;
|
||||
|
||||
if ( !values )
|
||||
CV_ERROR( CV_StsInternal, "data is empty" );
|
||||
|
||||
|
||||
var_count = values->cols;
|
||||
|
||||
if ( var_idx < 0 || var_idx >= var_count)
|
||||
@@ -386,7 +386,7 @@ void CvMLData::change_var_type( int var_idx, int type )
|
||||
if ( type != CV_VAR_ORDERED && type != CV_VAR_CATEGORICAL)
|
||||
CV_ERROR( CV_StsBadArg, "type is not correct" );
|
||||
|
||||
assert( var_types );
|
||||
assert( var_types );
|
||||
if ( var_types->data.ptr[var_idx] == CV_VAR_CATEGORICAL && type == CV_VAR_ORDERED)
|
||||
CV_ERROR( CV_StsBadArg, "it`s impossible to assign CV_VAR_ORDERED type to categorical variable" );
|
||||
var_types->data.ptr[var_idx] = (uchar)type;
|
||||
@@ -409,12 +409,12 @@ void CvMLData::set_var_types( const char* str )
|
||||
var_count = values->cols;
|
||||
|
||||
assert( var_types );
|
||||
|
||||
|
||||
ord = strstr( str, "ord" );
|
||||
cat = strstr( str, "cat" );
|
||||
cat = strstr( str, "cat" );
|
||||
if ( !ord && !cat )
|
||||
CV_ERROR( CV_StsBadArg, "types string is not correct" );
|
||||
|
||||
|
||||
if ( !ord && strlen(cat) == 3 ) // str == "cat"
|
||||
{
|
||||
cvSet( var_types, cvScalarAll(CV_VAR_CATEGORICAL) );
|
||||
@@ -429,10 +429,10 @@ void CvMLData::set_var_types( const char* str )
|
||||
|
||||
if ( ord ) // parse ord str
|
||||
{
|
||||
char* stopstring = NULL;
|
||||
char* stopstring = NULL;
|
||||
if ( ord[3] != '[')
|
||||
CV_ERROR( CV_StsBadArg, "types string is not correct" );
|
||||
|
||||
|
||||
ord += 4; // pass "ord["
|
||||
do
|
||||
{
|
||||
@@ -447,18 +447,18 @@ void CvMLData::set_var_types( const char* str )
|
||||
var_types->data.ptr[b1] = CV_VAR_ORDERED;
|
||||
set_var_type_count++;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
if ( stopstring[0] == '-')
|
||||
if ( stopstring[0] == '-')
|
||||
{
|
||||
int b2 = (int)strtod( ord, &stopstring);
|
||||
if ( (*stopstring == 0) || (*stopstring != ',' && *stopstring != ']') )
|
||||
CV_ERROR( CV_StsBadArg, "types string is not correct" );
|
||||
CV_ERROR( CV_StsBadArg, "types string is not correct" );
|
||||
ord = stopstring + 1;
|
||||
for (int i = b1; i <= b2; i++)
|
||||
{
|
||||
if ( var_types->data.ptr[i] == CV_VAR_CATEGORICAL)
|
||||
CV_ERROR( CV_StsBadArg, "it`s impossible to assign CV_VAR_ORDERED type to categorical variable" );
|
||||
CV_ERROR( CV_StsBadArg, "it`s impossible to assign CV_VAR_ORDERED type to categorical variable" );
|
||||
var_types->data.ptr[i] = CV_VAR_ORDERED;
|
||||
}
|
||||
set_var_type_count += b2 - b1 + 1;
|
||||
@@ -472,14 +472,14 @@ void CvMLData::set_var_types( const char* str )
|
||||
|
||||
if ( stopstring[1] != '\0' && stopstring[1] != ',')
|
||||
CV_ERROR( CV_StsBadArg, "types string is not correct" );
|
||||
}
|
||||
}
|
||||
|
||||
if ( cat ) // parse cat str
|
||||
{
|
||||
char* stopstring = NULL;
|
||||
char* stopstring = NULL;
|
||||
if ( cat[3] != '[')
|
||||
CV_ERROR( CV_StsBadArg, "types string is not correct" );
|
||||
|
||||
|
||||
cat += 4; // pass "cat["
|
||||
do
|
||||
{
|
||||
@@ -492,13 +492,13 @@ void CvMLData::set_var_types( const char* str )
|
||||
var_types->data.ptr[b1] = CV_VAR_CATEGORICAL;
|
||||
set_var_type_count++;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
if ( stopstring[0] == '-')
|
||||
if ( stopstring[0] == '-')
|
||||
{
|
||||
int b2 = (int)strtod( cat, &stopstring);
|
||||
if ( (*stopstring == 0) || (*stopstring != ',' && *stopstring != ']') )
|
||||
CV_ERROR( CV_StsBadArg, "types string is not correct" );
|
||||
CV_ERROR( CV_StsBadArg, "types string is not correct" );
|
||||
cat = stopstring + 1;
|
||||
for (int i = b1; i <= b2; i++)
|
||||
var_types->data.ptr[i] = CV_VAR_CATEGORICAL;
|
||||
@@ -513,7 +513,7 @@ void CvMLData::set_var_types( const char* str )
|
||||
|
||||
if ( stopstring[1] != '\0' && stopstring[1] != ',')
|
||||
CV_ERROR( CV_StsBadArg, "types string is not correct" );
|
||||
}
|
||||
}
|
||||
|
||||
if (set_var_type_count != var_count)
|
||||
CV_ERROR( CV_StsBadArg, "types string is not correct" );
|
||||
@@ -539,7 +539,7 @@ const CvMat* CvMLData::get_var_types()
|
||||
if ( avcount == values->cols || (avcount == values->cols-1 && response_idx == values->cols-1) )
|
||||
return var_types;
|
||||
|
||||
if ( !var_types_out || ( var_types_out && var_types_out->cols != vt_size ) )
|
||||
if ( !var_types_out || ( var_types_out && var_types_out->cols != vt_size ) )
|
||||
{
|
||||
cvReleaseMat( &var_types_out );
|
||||
var_types_out = cvCreateMat( 1, vt_size, CV_8UC1 );
|
||||
@@ -575,7 +575,7 @@ const CvMat* CvMLData::get_responses()
|
||||
if ( !values )
|
||||
CV_ERROR( CV_StsInternal, "data is empty" );
|
||||
var_count = values->cols;
|
||||
|
||||
|
||||
if ( response_idx < 0 || response_idx >= var_count )
|
||||
return 0;
|
||||
if ( !response_out )
|
||||
@@ -600,7 +600,7 @@ void CvMLData::set_train_test_split( const CvTrainTestSplit * spl)
|
||||
CV_ERROR( CV_StsInternal, "data is empty" );
|
||||
|
||||
sample_count = values->rows;
|
||||
|
||||
|
||||
float train_sample_portion;
|
||||
|
||||
if (spl->train_sample_part_mode == CV_COUNT)
|
||||
@@ -615,7 +615,7 @@ void CvMLData::set_train_test_split( const CvTrainTestSplit * spl)
|
||||
train_sample_portion = spl->train_sample_part.portion;
|
||||
if ( train_sample_portion > 1)
|
||||
CV_ERROR( CV_StsBadArg, "train samples count is not correct" );
|
||||
train_sample_portion = train_sample_portion <= FLT_EPSILON ||
|
||||
train_sample_portion = train_sample_portion <= FLT_EPSILON ||
|
||||
1 - train_sample_portion <= FLT_EPSILON ? 1 : train_sample_portion;
|
||||
train_sample_count = std::max(1, cvFloor( train_sample_portion * sample_count ));
|
||||
}
|
||||
@@ -642,11 +642,11 @@ void CvMLData::set_train_test_split( const CvTrainTestSplit * spl)
|
||||
test_sample_idx = cvCreateMatHeader( 1, test_sample_count, CV_32SC1 );
|
||||
*test_sample_idx = cvMat( 1, test_sample_count, CV_32SC1, &sample_idx[train_sample_count] );
|
||||
}
|
||||
|
||||
|
||||
mix = spl->mix;
|
||||
if ( mix )
|
||||
mix_train_and_test_idx();
|
||||
|
||||
|
||||
__END__;
|
||||
}
|
||||
|
||||
@@ -710,14 +710,14 @@ const CvMat* CvMLData::get_var_idx()
|
||||
CV_ERROR( CV_StsInternal, "data is empty" );
|
||||
|
||||
assert( var_idx_mask );
|
||||
|
||||
|
||||
avcount = cvFloor( cvNorm( var_idx_mask, 0, CV_L1 ) );
|
||||
int* vidx;
|
||||
|
||||
if ( avcount == values->cols )
|
||||
return 0;
|
||||
|
||||
if ( !var_idx_out || ( var_idx_out && var_idx_out->cols != avcount ) )
|
||||
|
||||
if ( !var_idx_out || ( var_idx_out && var_idx_out->cols != avcount ) )
|
||||
{
|
||||
cvReleaseMat( &var_idx_out );
|
||||
var_idx_out = cvCreateMat( 1, avcount, CV_32SC1);
|
||||
@@ -726,10 +726,10 @@ const CvMat* CvMLData::get_var_idx()
|
||||
}
|
||||
|
||||
vidx = var_idx_out->data.i;
|
||||
|
||||
|
||||
for(int i = 0; i < var_idx_mask->cols; i++)
|
||||
if ( var_idx_mask->data.ptr[i] )
|
||||
{
|
||||
{
|
||||
*vidx = i;
|
||||
vidx++;
|
||||
}
|
||||
@@ -759,7 +759,7 @@ void CvMLData::change_var_idx( int vi, bool state )
|
||||
if ( vi < 0 || vi >= var_count)
|
||||
CV_ERROR( CV_StsBadArg, "variable index is not correct" );
|
||||
|
||||
assert( var_idx_mask );
|
||||
assert( var_idx_mask );
|
||||
var_idx_mask->data.ptr[vi] = state;
|
||||
|
||||
__END__;
|
||||
|
@@ -79,7 +79,7 @@ void EM::clear()
|
||||
logWeightDivDet.release();
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool EM::train(InputArray samples,
|
||||
OutputArray logLikelihoods,
|
||||
OutputArray labels,
|
||||
@@ -101,7 +101,7 @@ bool EM::trainE(InputArray samples,
|
||||
Mat samplesMat = samples.getMat();
|
||||
vector<Mat> covs0;
|
||||
_covs0.getMatVector(covs0);
|
||||
|
||||
|
||||
Mat means0 = _means0.getMat(), weights0 = _weights0.getMat();
|
||||
|
||||
setTrainData(START_E_STEP, samplesMat, 0, !_means0.empty() ? &means0 : 0,
|
||||
@@ -117,12 +117,12 @@ bool EM::trainM(InputArray samples,
|
||||
{
|
||||
Mat samplesMat = samples.getMat();
|
||||
Mat probs0 = _probs0.getMat();
|
||||
|
||||
|
||||
setTrainData(START_M_STEP, samplesMat, !_probs0.empty() ? &probs0 : 0, 0, 0, 0);
|
||||
return doTrain(START_M_STEP, logLikelihoods, labels, probs);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Vec2d EM::predict(InputArray _sample, OutputArray _probs) const
|
||||
{
|
||||
Mat sample = _sample.getMat();
|
||||
@@ -456,14 +456,14 @@ bool EM::doTrain(int startStep, OutputArray logLikelihoods, OutputArray labels,
|
||||
covs[clusterIndex] = Mat::diag(covsEigenValues[clusterIndex]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(labels.needed())
|
||||
trainLabels.copyTo(labels);
|
||||
if(probs.needed())
|
||||
trainProbs.copyTo(probs);
|
||||
if(logLikelihoods.needed())
|
||||
trainLogLikelihoods.copyTo(logLikelihoods);
|
||||
|
||||
|
||||
trainSamples.release();
|
||||
trainProbs.release();
|
||||
trainLabels.release();
|
||||
|
@@ -149,8 +149,8 @@ int cvCrossValNextStep (CvStatModel* estimateModel)
|
||||
// Do checking part of loop of cross-validations metod.
|
||||
ML_IMPL
|
||||
void cvCrossValCheckClassifier (CvStatModel* estimateModel,
|
||||
const CvStatModel* model,
|
||||
const CvMat* trainData,
|
||||
const CvStatModel* model,
|
||||
const CvMat* trainData,
|
||||
int sample_t_flag,
|
||||
const CvMat* trainClasses)
|
||||
{
|
||||
@@ -194,7 +194,7 @@ void cvCrossValCheckClassifier (CvStatModel* estimateModel,
|
||||
data = crVal->sampleIdxEval->data.i;
|
||||
|
||||
// Eval tested feature vectors.
|
||||
CV_CALL (cvStatModelMultiPredict (model, trainData, sample_t_flag,
|
||||
CV_CALL (cvStatModelMultiPredict (model, trainData, sample_t_flag,
|
||||
crVal->predict_results, NULL, crVal->sampleIdxEval));
|
||||
// Count number if correct results.
|
||||
responses_result = crVal->predict_results->data.fl;
|
||||
@@ -307,12 +307,12 @@ float cvCrossValGetResult (const CvStatModel* estimateModel,
|
||||
result = ((float)crVal->sq_error) / crVal->all_results;
|
||||
if (correlation)
|
||||
{
|
||||
te = crVal->all_results * crVal->sum_cp -
|
||||
te = crVal->all_results * crVal->sum_cp -
|
||||
crVal->sum_correct * crVal->sum_predict;
|
||||
te *= te;
|
||||
te1 = (crVal->all_results * crVal->sum_cc -
|
||||
te1 = (crVal->all_results * crVal->sum_cc -
|
||||
crVal->sum_correct * crVal->sum_correct) *
|
||||
(crVal->all_results * crVal->sum_pp -
|
||||
(crVal->all_results * crVal->sum_pp -
|
||||
crVal->sum_predict * crVal->sum_predict);
|
||||
*correlation = (float)(te / te1);
|
||||
|
||||
@@ -330,7 +330,7 @@ float cvCrossValGetResult (const CvStatModel* estimateModel,
|
||||
}
|
||||
|
||||
/****************************************************************************************/
|
||||
// Reset cross-validation EstimateModel to state the same as it was immidiatly after
|
||||
// Reset cross-validation EstimateModel to state the same as it was immidiatly after
|
||||
// its creating.
|
||||
ML_IMPL
|
||||
void cvCrossValReset (CvStatModel* estimateModel)
|
||||
@@ -368,7 +368,7 @@ void cvReleaseCrossValidationModel (CvStatModel** model)
|
||||
|
||||
CV_FUNCNAME ("cvReleaseCrossValidationModel");
|
||||
__BEGIN__
|
||||
|
||||
|
||||
if (!model)
|
||||
{
|
||||
CV_ERROR (CV_StsNullPtr, "");
|
||||
@@ -397,7 +397,7 @@ void cvReleaseCrossValidationModel (CvStatModel** model)
|
||||
|
||||
/****************************************************************************************/
|
||||
// This function create cross-validation EstimateModel.
|
||||
ML_IMPL CvStatModel*
|
||||
ML_IMPL CvStatModel*
|
||||
cvCreateCrossValidationEstimateModel(
|
||||
int samples_all,
|
||||
const CvStatModelParams* estimateParams,
|
||||
@@ -413,7 +413,7 @@ cvCreateCrossValidationEstimateModel(
|
||||
|
||||
int i, j, k, s_len;
|
||||
int samples_selected;
|
||||
CvRNG rng;
|
||||
CvRNG rng;
|
||||
CvRNG* prng;
|
||||
int* res_s_data;
|
||||
int* te_s_data;
|
||||
@@ -435,7 +435,7 @@ cvCreateCrossValidationEstimateModel(
|
||||
|
||||
// Alloc memory and fill standart StatModel's fields.
|
||||
CV_CALL (crVal = (CvCrossValidationModel*)cvCreateStatModel (
|
||||
CV_STAT_MODEL_MAGIC_VAL | CV_CROSSVAL_MAGIC_VAL,
|
||||
CV_STAT_MODEL_MAGIC_VAL | CV_CROSSVAL_MAGIC_VAL,
|
||||
sizeof(CvCrossValidationModel),
|
||||
cvReleaseCrossValidationModel,
|
||||
NULL, NULL));
|
||||
@@ -443,7 +443,7 @@ cvCreateCrossValidationEstimateModel(
|
||||
crVal->folds_all = k_fold;
|
||||
if (estimateParams && ((CvCrossValidationParams*)estimateParams)->is_regression)
|
||||
crVal->is_regression = 1;
|
||||
else
|
||||
else
|
||||
crVal->is_regression = 0;
|
||||
if (estimateParams && ((CvCrossValidationParams*)estimateParams)->rng)
|
||||
prng = ((CvCrossValidationParams*)estimateParams)->rng;
|
||||
@@ -455,7 +455,7 @@ cvCreateCrossValidationEstimateModel(
|
||||
{
|
||||
int s_step;
|
||||
int s_type = 0;
|
||||
|
||||
|
||||
if (!CV_IS_MAT (sampleIdx))
|
||||
CV_ERROR (CV_StsBadArg, "Invalid sampleIdx array");
|
||||
|
||||
@@ -463,7 +463,7 @@ cvCreateCrossValidationEstimateModel(
|
||||
CV_ERROR (CV_StsBadSize, "sampleIdx array must be 1-dimensional");
|
||||
|
||||
s_len = sampleIdx->rows + sampleIdx->cols - 1;
|
||||
s_step = sampleIdx->rows == 1 ?
|
||||
s_step = sampleIdx->rows == 1 ?
|
||||
1 : sampleIdx->step / CV_ELEM_SIZE(sampleIdx->type);
|
||||
|
||||
s_type = CV_MAT_TYPE (sampleIdx->type);
|
||||
@@ -474,13 +474,13 @@ cvCreateCrossValidationEstimateModel(
|
||||
case CV_8SC1:
|
||||
{
|
||||
uchar* s_data = sampleIdx->data.ptr;
|
||||
|
||||
|
||||
// sampleIdx is array of 1's and 0's -
|
||||
// i.e. it is a mask of the selected samples
|
||||
if( s_len != samples_all )
|
||||
CV_ERROR (CV_StsUnmatchedSizes,
|
||||
"Sample mask should contain as many elements as the total number of samples");
|
||||
|
||||
|
||||
samples_selected = 0;
|
||||
for (i = 0; i < s_len; i++)
|
||||
samples_selected += s_data[i * s_step] != 0;
|
||||
@@ -502,7 +502,7 @@ cvCreateCrossValidationEstimateModel(
|
||||
}
|
||||
|
||||
// Alloc additional memory for internal Idx and fill it.
|
||||
/*!!*/ CV_CALL (res_s_data = crVal->sampleIdxAll =
|
||||
/*!!*/ CV_CALL (res_s_data = crVal->sampleIdxAll =
|
||||
(int*)cvAlloc (2 * s_len * sizeof(int)));
|
||||
|
||||
if (s_type < CV_32SC1)
|
||||
@@ -529,7 +529,7 @@ cvCreateCrossValidationEstimateModel(
|
||||
|
||||
if (out_of_order)
|
||||
qsort (res_s_data, s_len, sizeof(res_s_data[0]), icvCmpIntegers);
|
||||
|
||||
|
||||
if (res_s_data[0] < 0 ||
|
||||
res_s_data[s_len - 1] >= samples_all)
|
||||
CV_ERROR (CV_StsBadArg, "There are out-of-range sample indices");
|
||||
@@ -548,7 +548,7 @@ cvCreateCrossValidationEstimateModel(
|
||||
*res_s_data++ = i;
|
||||
}
|
||||
res_s_data = crVal->sampleIdxAll;
|
||||
} // if (sampleIdx) ... else
|
||||
} // if (sampleIdx) ... else
|
||||
|
||||
// Resort internal Idx.
|
||||
te_s_data = res_s_data + s_len;
|
||||
@@ -560,7 +560,7 @@ cvCreateCrossValidationEstimateModel(
|
||||
res_s_data[j] = k;
|
||||
}
|
||||
|
||||
// Duplicate resorted internal Idx.
|
||||
// Duplicate resorted internal Idx.
|
||||
// It will be used to simplify operation of getting trainIdx.
|
||||
te_s_data = res_s_data + s_len;
|
||||
for (i = 0; i < s_len; i++)
|
||||
@@ -573,7 +573,7 @@ cvCreateCrossValidationEstimateModel(
|
||||
{
|
||||
if (k_fold > s_len)
|
||||
{
|
||||
CV_ERROR (CV_StsBadArg,
|
||||
CV_ERROR (CV_StsBadArg,
|
||||
"Error in parameters of cross-validation ('k_fold' > #samples)!");
|
||||
}
|
||||
folds = crVal->folds = (int*) cvAlloc ((k_fold + 1) * sizeof (int));
|
||||
@@ -593,7 +593,7 @@ cvCreateCrossValidationEstimateModel(
|
||||
crVal->max_fold_size = k;
|
||||
if (k >= s_len)
|
||||
{
|
||||
CV_ERROR (CV_StsBadArg,
|
||||
CV_ERROR (CV_StsBadArg,
|
||||
"Error in parameters of cross-validation (-'k_fold' > #samples)!");
|
||||
}
|
||||
crVal->folds_all = k = (s_len - 1) / k + 1;
|
||||
@@ -634,7 +634,7 @@ cvCreateCrossValidationEstimateModel(
|
||||
|
||||
return model;
|
||||
} // End of cvCreateCrossValidationEstimateModel
|
||||
|
||||
|
||||
|
||||
/****************************************************************************************\
|
||||
* Extended interface with backcalls for models *
|
||||
@@ -643,13 +643,13 @@ ML_IMPL float
|
||||
cvCrossValidation (const CvMat* trueData,
|
||||
int tflag,
|
||||
const CvMat* trueClasses,
|
||||
CvStatModel* (*createClassifier) (const CvMat*,
|
||||
int,
|
||||
CvStatModel* (*createClassifier) (const CvMat*,
|
||||
int,
|
||||
const CvMat*,
|
||||
const CvClassifierTrainParams*,
|
||||
const CvMat*,
|
||||
const CvMat*,
|
||||
const CvMat*,
|
||||
const CvMat*,
|
||||
const CvMat*,
|
||||
const CvMat*,
|
||||
const CvMat*),
|
||||
const CvClassifierTrainParams* estimateParams,
|
||||
const CvClassifierTrainParams* trainParams,
|
||||
@@ -676,7 +676,7 @@ cvCrossValidation (const CvMat* trueData,
|
||||
}
|
||||
if (pCrValModel && *pCrValModel && !CV_IS_CROSSVAL(*pCrValModel))
|
||||
{
|
||||
CV_ERROR (CV_StsBadArg,
|
||||
CV_ERROR (CV_StsBadArg,
|
||||
"<pCrValModel> point to not cross-validation model");
|
||||
}
|
||||
|
||||
@@ -698,9 +698,9 @@ cvCrossValidation (const CvMat* trueData,
|
||||
// operation loop
|
||||
for (; crVal->nextStep((CvStatModel*)crVal) != 0; )
|
||||
{
|
||||
CV_CALL (pClassifier = createClassifier (trueData, tflag, trueClasses,
|
||||
CV_CALL (pClassifier = createClassifier (trueData, tflag, trueClasses,
|
||||
trainParams, compIdx, trainDataIdx, typeMask, missedMeasurementMask));
|
||||
CV_CALL (crVal->check ((CvStatModel*)crVal, pClassifier,
|
||||
CV_CALL (crVal->check ((CvStatModel*)crVal, pClassifier,
|
||||
trueData, tflag, trueClasses));
|
||||
|
||||
pClassifier->release (&pClassifier);
|
||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user