From 701e20ac0d19fc92ada48f34e9be0bba69fff8c1 Mon Sep 17 00:00:00 2001 From: Ludovic Hussonnois <ludovic.hussonnois@c-s.fr> Date: Mon, 13 Mar 2017 15:37:15 +0100 Subject: [PATCH] ENH: Set input vector as required, percent strategy is removed. Now input vector with class is required for unsupervised classifier. The cases where input vector data were optional for unsupervised classification are commented. --- .../app/otbTrainImagesClassifier.cxx | 54 +++++++++---------- .../include/otbTrainImagesBase.txx | 26 ++++----- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/Modules/Applications/AppClassification/app/otbTrainImagesClassifier.cxx b/Modules/Applications/AppClassification/app/otbTrainImagesClassifier.cxx index 3c1bada305..5a5512b35a 100644 --- a/Modules/Applications/AppClassification/app/otbTrainImagesClassifier.cxx +++ b/Modules/Applications/AppClassification/app/otbTrainImagesClassifier.cxx @@ -73,20 +73,20 @@ public: // Change mandatory of input vector depending on supervised and unsupervised mode. - if( HasValue( "classifier" ) ) - { - UpdateInternalParameters( "training" ); - switch( trainVectorBase->GetClassifierCategory() ) - { - case TrainVectorBase::Unsupervised: - MandatoryOff( "io.vd" ); - break; - default: - case TrainVectorBase::Supervised: - MandatoryOn( "io.vd" ); - break; - } - } +// if( HasValue( "classifier" ) ) +// { +// UpdateInternalParameters( "training" ); +// switch( trainVectorBase->GetClassifierCategory() ) +// { +// case TrainVectorBase::Unsupervised: +// MandatoryOff( "io.vd" ); +// break; +// default: +// case TrainVectorBase::Supervised: +// MandatoryOn( "io.vd" ); +// break; +// } +// } } @@ -113,14 +113,14 @@ public: ComputePolygonStatistics( imageList, validationVectorFileList, fileNames.polyStatValidOutputs ); ComputeSamplingRate( fileNames.polyStatValidOutputs, fileNames.rateValidOut, rates.fmv ); SelectAndExtractValidationSamples( fileNames, imageList, validationVectorFileList ); - if( HasInputVector ) // if input vector is provided the sampleTrainOutputs is the previously extracted sampleOutputs - fileNames.sampleTrainOutputs = fileNames.sampleOutputs; +// if( HasInputVector ) // if input vector is provided the sampleTrainOutputs is the previously extracted sampleOutputs + fileNames.sampleTrainOutputs = fileNames.sampleOutputs; } else if(GetParameterFloat("sample.vtr") != 0.0)// Split training data to validation { - if( !HasInputVector ) // Compute one class statistics and sampling rate for the generated vector. - ComputePolygonStatistics( imageList, fileNames.sampleOutputs, fileNames.polyStatTrainOutputs ); - ComputeSamplingRate( fileNames.polyStatTrainOutputs, fileNames.rateTrainOut, rates.fmt ); +// if( !HasInputVector ) // Compute one class statistics and sampling rate for the generated vector. +// ComputePolygonStatistics( imageList, fileNames.sampleOutputs, fileNames.polyStatTrainOutputs ); +// ComputeSamplingRate( fileNames.polyStatTrainOutputs, fileNames.rateTrainOut, rates.fmt ); SplitTrainingToValidationSamples( fileNames, imageList ); } else // nothing to do, except update fileNames @@ -140,16 +140,16 @@ public: std::vector<std::string> vectorFileList, const SamplingRates& rates) { - if( !vectorFileList.empty() ) // Select and Extract samples for training with computed statistics and rates - { +// if( !vectorFileList.empty() ) // Select and Extract samples for training with computed statistics and rates +// { ComputePolygonStatistics( imageList, vectorFileList, fileNames.polyStatTrainOutputs ); ComputeSamplingRate( fileNames.polyStatTrainOutputs, fileNames.rateTrainOut, rates.fmt ); SelectAndExtractTrainSamples( fileNames, imageList, vectorFileList, SamplingStrategy::CLASS ); - } - else // Select training samples base on geometric sampling if no input vector is provided - { - SelectAndExtractTrainSamples( fileNames, imageList, vectorFileList, SamplingStrategy::GEOMETRIC, "fid" ); - } +// } +// else // Select training samples base on geometric sampling if no input vector is provided +// { +// SelectAndExtractTrainSamples( fileNames, imageList, vectorFileList, SamplingStrategy::GEOMETRIC, "fid" ); +// } } @@ -165,7 +165,7 @@ public: unsigned long nbInputs = imageList->Size(); - if( !HasInputVector && trainVectorBase->GetClassifierCategory() == TrainVectorBase::Supervised ) + if( !HasInputVector ) // && trainVectorBase->GetClassifierCategory() == TrainVectorBase::Supervised ) { otbAppLogFATAL( "Missing input vector data files" ); } diff --git a/Modules/Applications/AppClassification/include/otbTrainImagesBase.txx b/Modules/Applications/AppClassification/include/otbTrainImagesBase.txx index a0b881ee58..70bd7798b7 100644 --- a/Modules/Applications/AppClassification/include/otbTrainImagesBase.txx +++ b/Modules/Applications/AppClassification/include/otbTrainImagesBase.txx @@ -37,7 +37,7 @@ void TrainImagesBase::InitIO() SetParameterDescription( "io.il", "A list of input images." ); AddParameter( ParameterType_InputVectorDataList, "io.vd", "Input Vector Data List" ); SetParameterDescription( "io.vd", "A list of vector data to select the training samples." ); - MandatoryOff( "io.vd" ); + MandatoryOn( "io.vd" ); AddParameter( ParameterType_Empty, "cleanup", "Temporary files cleaning" ); EnableParameter( "cleanup" ); @@ -83,12 +83,12 @@ void TrainImagesBase::InitSampling() SetMaximumParameterFloatValue( "sample.vtr", 1.0 ); SetMinimumParameterFloatValue( "sample.vtr", 0.0 ); - AddParameter( ParameterType_Float, "sample.percent", "Percentage of sample extract from images" ); - SetParameterDescription( "sample.percent", "Percentage of sample extract from images for " - "training and validation when only images are provided." ); - SetDefaultParameterFloat( "sample.percent", 1.0 ); - SetMinimumParameterFloatValue( "sample.percent", 0.0 ); - SetMaximumParameterFloatValue( "sample.percent", 1.0 ); +// AddParameter( ParameterType_Float, "sample.percent", "Percentage of sample extract from images" ); +// SetParameterDescription( "sample.percent", "Percentage of sample extract from images for " +// "training and validation when only images are provided." ); +// SetDefaultParameterFloat( "sample.percent", 1.0 ); +// SetMinimumParameterFloatValue( "sample.percent", 0.0 ); +// SetMaximumParameterFloatValue( "sample.percent", 1.0 ); ShareSamplingParameters(); ConnectSamplingParameters(); @@ -274,12 +274,12 @@ void TrainImagesBase::SelectAndExtractSamples(FloatVectorImageType *image, std:: // Change the selection strategy based on selected sampling strategy switch( strategy ) { - case GEOMETRIC: - GetInternalApplication( "select" )->SetParameterString( "sampler", "random", false ); - GetInternalApplication( "select" )->SetParameterString( "strategy", "percent", false ); - GetInternalApplication( "select" )->SetParameterFloat( "strategy.percent.p", - GetParameterFloat( "sample.percent" ), false ); - break; +// case GEOMETRIC: +// GetInternalApplication( "select" )->SetParameterString( "sampler", "random", false ); +// GetInternalApplication( "select" )->SetParameterString( "strategy", "percent", false ); +// GetInternalApplication( "select" )->SetParameterFloat( "strategy.percent.p", +// GetParameterFloat( "sample.percent" ), false ); +// break; case CLASS: default: GetInternalApplication( "select" )->SetParameterString( "vec", vectorFileName, false ); -- GitLab