Merge pull request #3899 from StevenPuttemans:add_breakrule_traincascade_2.4
This commit is contained in:
commit
cc63452f65
@ -136,7 +136,8 @@ bool CvCascadeClassifier::train( const string _cascadeDirName,
|
|||||||
const CvCascadeParams& _cascadeParams,
|
const CvCascadeParams& _cascadeParams,
|
||||||
const CvFeatureParams& _featureParams,
|
const CvFeatureParams& _featureParams,
|
||||||
const CvCascadeBoostParams& _stageParams,
|
const CvCascadeBoostParams& _stageParams,
|
||||||
bool baseFormatSave )
|
bool baseFormatSave,
|
||||||
|
double acceptanceRatioBreakValue)
|
||||||
{
|
{
|
||||||
// Start recording clock ticks for training time output
|
// Start recording clock ticks for training time output
|
||||||
const clock_t begin_time = clock();
|
const clock_t begin_time = clock();
|
||||||
@ -186,6 +187,7 @@ bool CvCascadeClassifier::train( const string _cascadeDirName,
|
|||||||
cout << "numStages: " << numStages << endl;
|
cout << "numStages: " << numStages << endl;
|
||||||
cout << "precalcValBufSize[Mb] : " << _precalcValBufSize << endl;
|
cout << "precalcValBufSize[Mb] : " << _precalcValBufSize << endl;
|
||||||
cout << "precalcIdxBufSize[Mb] : " << _precalcIdxBufSize << endl;
|
cout << "precalcIdxBufSize[Mb] : " << _precalcIdxBufSize << endl;
|
||||||
|
cout << "acceptanceRatioBreakValue : " << acceptanceRatioBreakValue << endl;
|
||||||
cascadeParams.printAttrs();
|
cascadeParams.printAttrs();
|
||||||
stageParams->printAttrs();
|
stageParams->printAttrs();
|
||||||
featureParams->printAttrs();
|
featureParams->printAttrs();
|
||||||
@ -208,15 +210,20 @@ bool CvCascadeClassifier::train( const string _cascadeDirName,
|
|||||||
if ( !updateTrainingSet( requiredLeafFARate, tempLeafFARate ) )
|
if ( !updateTrainingSet( requiredLeafFARate, tempLeafFARate ) )
|
||||||
{
|
{
|
||||||
cout << "Train dataset for temp stage can not be filled. "
|
cout << "Train dataset for temp stage can not be filled. "
|
||||||
"Branch training terminated." << endl;
|
"Branch training terminated." << endl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if( tempLeafFARate <= requiredLeafFARate )
|
if( tempLeafFARate <= requiredLeafFARate )
|
||||||
{
|
{
|
||||||
cout << "Required leaf false alarm rate achieved. "
|
cout << "Required leaf false alarm rate achieved. "
|
||||||
"Branch training terminated." << endl;
|
"Branch training terminated." << endl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if( (tempLeafFARate <= acceptanceRatioBreakValue) && (acceptanceRatioBreakValue >= 0) ){
|
||||||
|
cout << "The required acceptanceRatio for the model has been reached to avoid overfitting of trainingdata. "
|
||||||
|
"Branch training terminated." << endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
CvCascadeBoost* tempStage = new CvCascadeBoost;
|
CvCascadeBoost* tempStage = new CvCascadeBoost;
|
||||||
bool isStageTrained = tempStage->train( (CvFeatureEvaluator*)featureEvaluator,
|
bool isStageTrained = tempStage->train( (CvFeatureEvaluator*)featureEvaluator,
|
||||||
|
@ -96,7 +96,8 @@ public:
|
|||||||
const CvCascadeParams& _cascadeParams,
|
const CvCascadeParams& _cascadeParams,
|
||||||
const CvFeatureParams& _featureParams,
|
const CvFeatureParams& _featureParams,
|
||||||
const CvCascadeBoostParams& _stageParams,
|
const CvCascadeBoostParams& _stageParams,
|
||||||
bool baseFormatSave = false );
|
bool baseFormatSave = false,
|
||||||
|
double acceptanceRatioBreakValue = -1.0 );
|
||||||
private:
|
private:
|
||||||
int predict( int sampleIdx );
|
int predict( int sampleIdx );
|
||||||
void save( const std::string cascadeDirName, bool baseFormat = false );
|
void save( const std::string cascadeDirName, bool baseFormat = false );
|
||||||
|
@ -17,6 +17,7 @@ int main( int argc, char* argv[] )
|
|||||||
int precalcValBufSize = 1024,
|
int precalcValBufSize = 1024,
|
||||||
precalcIdxBufSize = 1024;
|
precalcIdxBufSize = 1024;
|
||||||
bool baseFormatSave = false;
|
bool baseFormatSave = false;
|
||||||
|
double acceptanceRatioBreakValue = -1.0;
|
||||||
|
|
||||||
CvCascadeParams cascadeParams;
|
CvCascadeParams cascadeParams;
|
||||||
CvCascadeBoostParams stageParams;
|
CvCascadeBoostParams stageParams;
|
||||||
@ -37,6 +38,7 @@ int main( int argc, char* argv[] )
|
|||||||
cout << " [-precalcValBufSize <precalculated_vals_buffer_size_in_Mb = " << precalcValBufSize << ">]" << endl;
|
cout << " [-precalcValBufSize <precalculated_vals_buffer_size_in_Mb = " << precalcValBufSize << ">]" << endl;
|
||||||
cout << " [-precalcIdxBufSize <precalculated_idxs_buffer_size_in_Mb = " << precalcIdxBufSize << ">]" << endl;
|
cout << " [-precalcIdxBufSize <precalculated_idxs_buffer_size_in_Mb = " << precalcIdxBufSize << ">]" << endl;
|
||||||
cout << " [-baseFormatSave]" << endl;
|
cout << " [-baseFormatSave]" << endl;
|
||||||
|
cout << " [-acceptanceRatioBreakValue <value> = " << acceptanceRatioBreakValue << ">]" << endl;
|
||||||
cascadeParams.printDefaults();
|
cascadeParams.printDefaults();
|
||||||
stageParams.printDefaults();
|
stageParams.printDefaults();
|
||||||
for( int fi = 0; fi < fc; fi++ )
|
for( int fi = 0; fi < fc; fi++ )
|
||||||
@ -83,6 +85,10 @@ int main( int argc, char* argv[] )
|
|||||||
{
|
{
|
||||||
baseFormatSave = true;
|
baseFormatSave = true;
|
||||||
}
|
}
|
||||||
|
else if( !strcmp( argv[i], "-acceptanceRatioBreakValue" ) )
|
||||||
|
{
|
||||||
|
acceptanceRatioBreakValue = atof(argv[++i]);
|
||||||
|
}
|
||||||
else if ( cascadeParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
|
else if ( cascadeParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
|
||||||
else if ( stageParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
|
else if ( stageParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
|
||||||
else if ( !set )
|
else if ( !set )
|
||||||
@ -108,6 +114,7 @@ int main( int argc, char* argv[] )
|
|||||||
cascadeParams,
|
cascadeParams,
|
||||||
*featureParams[cascadeParams.featureType],
|
*featureParams[cascadeParams.featureType],
|
||||||
stageParams,
|
stageParams,
|
||||||
baseFormatSave );
|
baseFormatSave,
|
||||||
|
acceptanceRatioBreakValue );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -294,6 +294,10 @@ Command line arguments of ``opencv_traincascade`` application grouped by purpose
|
|||||||
|
|
||||||
This argument is actual in case of Haar-like features. If it is specified, the cascade will be saved in the old format.
|
This argument is actual in case of Haar-like features. If it is specified, the cascade will be saved in the old format.
|
||||||
|
|
||||||
|
* ``-acceptanceRatioBreakValue``
|
||||||
|
|
||||||
|
This argument is used to determine how precise your model should keep learning and when to stop. A good guideline is to train not further than 10e-5, to ensure the model does not overtrain on your training data. By default this value is set to -1 to disable this feature.
|
||||||
|
|
||||||
#.
|
#.
|
||||||
|
|
||||||
Cascade parameters:
|
Cascade parameters:
|
||||||
|
Loading…
Reference in New Issue
Block a user