diff --git a/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx b/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx index 807459cd486943f8c63a2d1c3d384a09f24428fa..1add64f9282a18f99226e889858ea189bb2075e6 100644 --- a/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx +++ b/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx @@ -192,10 +192,8 @@ private: typedef otb::LibSVMMachineLearningModel<ValueType,LabelPixelType> LibSVMType; LibSVMType::Pointer libSVMClassifier = LibSVMType::New(); - libSVMClassifier->SetInputListSample(trainingListSample); - libSVMClassifier->SetTargetListSample(trainingLabeledListSample); libSVMClassifier->Load(modelfile); - libSVMClassifier->PredictAll(); + trainingLabeledListSample = libSVMClassifier->PredictBatch(trainingListSample); otb::ogr::DataSource::Pointer source2 = otb::ogr::DataSource::New(shapefile, otb::ogr::DataSource::Modes::Update_LayerUpdate); otb::ogr::Layer layer2 = source2->GetLayer(0); diff --git a/Modules/Applications/AppClassification/include/otbLearningApplicationBase.txx b/Modules/Applications/AppClassification/include/otbLearningApplicationBase.txx index c0a66443a8066cebc3bb906cdcb1f68d68981b0d..cd0e243dc4d1eb43412d19cf01b0090e98ae694d 100644 --- a/Modules/Applications/AppClassification/include/otbLearningApplicationBase.txx +++ b/Modules/Applications/AppClassification/include/otbLearningApplicationBase.txx @@ -109,9 +109,8 @@ LearningApplicationBase<TInputValue,TOutputValue> model->Load(modelPath); model->SetRegressionMode(this->m_RegressionFlag); - model->SetInputListSample(validationListSample); - model->SetTargetListSample(predictedList); - model->PredictAll(); + + predictedList = model->PredictBatch(validationListSample, NULL); // update reporter dummyFilter->UpdateProgress(1.0f); diff --git a/Modules/Learning/Supervised/include/otbMachineLearningModel.h b/Modules/Learning/Supervised/include/otbMachineLearningModel.h index a71d819eff893cee01c60d411b1116c2351aa6df..93bce2d2e612882fa04687e6e99ad2281bb0c105 100644 --- a/Modules/Learning/Supervised/include/otbMachineLearningModel.h +++ b/Modules/Learning/Supervised/include/otbMachineLearningModel.h @@ -126,9 +126,6 @@ public: */ typename TargetListSampleType::Pointer PredictBatch(const InputListSampleType * input, ConfidenceListSampleType * quality = ITK_NULLPTR) const; - /** THIS METHOD IS DEPRECATED AND SHOULD NOT BE USED. */ - void PredictAll(); - /**\name Classification model file manipulation */ //@{ /** Save the model to file */ @@ -161,7 +158,7 @@ public: //@{ /** Set the target labels (to be used before training) */ itkSetObjectMacro(TargetListSample,TargetListSampleType); - /** Get the target labels (to be used after PredictAll) */ + /** Get the target labels */ itkGetObjectMacro(TargetListSample,TargetListSampleType); //@} diff --git a/Modules/Learning/Supervised/include/otbMachineLearningModel.txx b/Modules/Learning/Supervised/include/otbMachineLearningModel.txx index 0c89a19d817789c03ddc50c43cecc051d9b2ebf5..678974e9d4f23525783842b860548dfc8b5ad4a9 100644 --- a/Modules/Learning/Supervised/include/otbMachineLearningModel.txx +++ b/Modules/Learning/Supervised/include/otbMachineLearningModel.txx @@ -63,21 +63,6 @@ MachineLearningModel<TInputValue,TOutputValue,TConfidenceValue> } } -template <class TInputValue, class TOutputValue, class TConfidenceValue> -void -MachineLearningModel<TInputValue,TOutputValue,TConfidenceValue> -::PredictAll() -{ - itkWarningMacro("MachineLearningModel::PredictAll() has been DEPRECATED. Use MachineLearningModel::PredictBatch() instead."); - - typename TargetListSampleType::Pointer targets = this->GetTargetListSample(); - targets->Clear(); - - typename TargetListSampleType::Pointer tmpTargets = this->PredictBatch(this->GetInputListSample()); - - targets->Graft(tmpTargets); -} - template <class TInputValue, class TOutputValue, class TConfidenceValue> typename MachineLearningModel<TInputValue,TOutputValue,TConfidenceValue> ::TargetSampleType diff --git a/Modules/Learning/Supervised/test/otbTrainMachineLearningModel.cxx b/Modules/Learning/Supervised/test/otbTrainMachineLearningModel.cxx index 5fc1f79f1de5c6af752e37edad080555ae7e58e2..5400a0abb42dff0e65c81efae1ba2a9bb691c5d8 100644 --- a/Modules/Learning/Supervised/test/otbTrainMachineLearningModel.cxx +++ b/Modules/Learning/Supervised/test/otbTrainMachineLearningModel.cxx @@ -204,7 +204,6 @@ int otbLibSVMMachineLearningModel(int argc, char * argv[]) typedef otb::LibSVMMachineLearningModel<InputValueType, TargetValueType> SVMType; InputListSampleType::Pointer samples = InputListSampleType::New(); TargetListSampleType::Pointer labels = TargetListSampleType::New(); - TargetListSampleType::Pointer predicted = TargetListSampleType::New(); if (!ReadDataFile(argv[1], samples, labels)) { @@ -217,8 +216,7 @@ int otbLibSVMMachineLearningModel(int argc, char * argv[]) classifier->SetTargetListSample(labels); classifier->Train(); - classifier->SetTargetListSample(predicted); - classifier->PredictAll(); + TargetListSampleType::Pointer predicted = classifier->PredictBatch(samples, NULL); ConfusionMatrixCalculatorType::Pointer cmCalculator = ConfusionMatrixCalculatorType::New(); @@ -235,13 +233,10 @@ int otbLibSVMMachineLearningModel(int argc, char * argv[]) classifier->Save(argv[2]); //Load Model to new LibSVM - TargetListSampleType::Pointer predictedLoad = TargetListSampleType::New(); SVMType::Pointer classifierLoad = SVMType::New(); classifierLoad->Load(argv[2]); - classifierLoad->SetInputListSample(samples); - classifierLoad->SetTargetListSample(predictedLoad); - classifierLoad->PredictAll(); + TargetListSampleType::Pointer predictedLoad = classifierLoad->PredictBatch(samples, NULL); ConfusionMatrixCalculatorType::Pointer cmCalculatorLoad = ConfusionMatrixCalculatorType::New(); @@ -298,7 +293,6 @@ int otbSVMMachineLearningModel(int argc, char * argv[]) InputListSampleType::Pointer samples = InputListSampleType::New(); TargetListSampleType::Pointer labels = TargetListSampleType::New(); - TargetListSampleType::Pointer predicted = TargetListSampleType::New(); if(!ReadDataFile(argv[1],samples,labels)) { @@ -311,8 +305,7 @@ int otbSVMMachineLearningModel(int argc, char * argv[]) classifier->SetTargetListSample(labels); classifier->Train(); - classifier->SetTargetListSample(predicted); - classifier->PredictAll(); + TargetListSampleType::Pointer predicted = classifier->PredictBatch(samples, NULL); classifier->Save(argv[2]); @@ -329,13 +322,10 @@ int otbSVMMachineLearningModel(int argc, char * argv[]) std::cout<<"Overall Accuracy: "<<cmCalculator->GetOverallAccuracy()<<std::endl; //Load Model to new SVM - TargetListSampleType::Pointer predictedLoad = TargetListSampleType::New(); SVMType::Pointer classifierLoad = SVMType::New(); classifierLoad->Load(argv[2]); - classifierLoad->SetInputListSample(samples); - classifierLoad->SetTargetListSample(predictedLoad); - classifierLoad->PredictAll(); + TargetListSampleType::Pointer predictedLoad = classifierLoad->PredictBatch(samples); ConfusionMatrixCalculatorType::Pointer cmCalculatorLoad = ConfusionMatrixCalculatorType::New(); @@ -373,7 +363,6 @@ int otbSVMMachineLearningRegressionModel(int argc, char * argv[]) InputListSampleRegressionType::Pointer samples = InputListSampleRegressionType::New(); TargetListSampleRegressionType::Pointer labels = TargetListSampleRegressionType::New(); - TargetListSampleRegressionType::Pointer predicted = TargetListSampleRegressionType::New(); if(!ReadDataRegressionFile(argv[1],samples,labels)) { @@ -415,9 +404,7 @@ int otbSVMMachineLearningRegressionModel(int argc, char * argv[]) samplesT->SetMeasurementVectorSize(itk::NumericTraits<InputSampleRegressionType>::GetLength(sample)); samplesT->PushBack(sample); - classifier->SetInputListSample(samplesT); - classifier->SetTargetListSample(predicted); - classifier->PredictAll(); + TargetListSampleRegressionType::Pointer predicted = classifier->PredictBatch(samplesT, NULL); const float age = 15; @@ -451,7 +438,6 @@ int otbKNearestNeighborsMachineLearningModel(int argc, char * argv[]) typedef otb::KNearestNeighborsMachineLearningModel<InputValueType,TargetValueType> KNearestNeighborsType; InputListSampleType::Pointer samples = InputListSampleType::New(); TargetListSampleType::Pointer labels = TargetListSampleType::New(); - TargetListSampleType::Pointer predicted = TargetListSampleType::New(); if(!ReadDataFile(argv[1],samples,labels)) { @@ -466,8 +452,7 @@ int otbKNearestNeighborsMachineLearningModel(int argc, char * argv[]) //write the model classifier->Save(argv[2]); - classifier->SetTargetListSample(predicted); - classifier->PredictAll(); + TargetListSampleType::Pointer predicted = classifier->PredictBatch(samples, NULL); ConfusionMatrixCalculatorType::Pointer cmCalculator = ConfusionMatrixCalculatorType::New(); @@ -483,13 +468,10 @@ int otbKNearestNeighborsMachineLearningModel(int argc, char * argv[]) //Load Model to new KNN - TargetListSampleType::Pointer predictedLoad = TargetListSampleType::New(); KNearestNeighborsType::Pointer classifierLoad = KNearestNeighborsType::New(); classifierLoad->Load(argv[2]); - classifierLoad->SetInputListSample(samples); - classifierLoad->SetTargetListSample(predictedLoad); - classifierLoad->PredictAll(); + TargetListSampleType::Pointer predictedLoad = classifierLoad->PredictBatch(samples, NULL); ConfusionMatrixCalculatorType::Pointer cmCalculatorLoad = ConfusionMatrixCalculatorType::New(); @@ -533,7 +515,6 @@ int otbRandomForestsMachineLearningModel(int argc, char * argv[]) typedef otb::RandomForestsMachineLearningModel<InputValueType,TargetValueType> RandomForestType; InputListSampleType::Pointer samples = InputListSampleType::New(); TargetListSampleType::Pointer labels = TargetListSampleType::New(); - TargetListSampleType::Pointer predicted = TargetListSampleType::New(); if(!ReadDataFile(argv[1],samples,labels)) { @@ -558,8 +539,7 @@ int otbRandomForestsMachineLearningModel(int argc, char * argv[]) classifier->Train(); classifier->Save(argv[2]); - classifier->SetTargetListSample(predicted); - classifier->PredictAll(); + TargetListSampleType::Pointer predicted = classifier->PredictBatch(samples, NULL); ConfusionMatrixCalculatorType::Pointer cmCalculator = ConfusionMatrixCalculatorType::New(); @@ -574,13 +554,10 @@ int otbRandomForestsMachineLearningModel(int argc, char * argv[]) std::cout<<"Overall Accuracy: "<<cmCalculator->GetOverallAccuracy()<<std::endl; //Load Model to new RF - TargetListSampleType::Pointer predictedLoad = TargetListSampleType::New(); RandomForestType::Pointer classifierLoad = RandomForestType::New(); classifierLoad->Load(argv[2]); - classifierLoad->SetInputListSample(samples); - classifierLoad->SetTargetListSample(predictedLoad); - classifierLoad->PredictAll(); + TargetListSampleType::Pointer predictedLoad = classifierLoad->PredictBatch(samples, NULL); ConfusionMatrixCalculatorType::Pointer cmCalculatorLoad = ConfusionMatrixCalculatorType::New(); @@ -625,7 +602,6 @@ int otbBoostMachineLearningModel(int argc, char * argv[]) InputListSampleType::Pointer samples = InputListSampleType::New(); TargetListSampleType::Pointer labels = TargetListSampleType::New(); - TargetListSampleType::Pointer predicted = TargetListSampleType::New(); if(!ReadDataFile(argv[1],samples,labels)) { @@ -647,8 +623,7 @@ int otbBoostMachineLearningModel(int argc, char * argv[]) classifier->SetTargetListSample(labels); classifier->Train(); - classifier->SetTargetListSample(predicted); - classifier->PredictAll(); + TargetListSampleType::Pointer predicted = classifier->PredictBatch(samples, NULL); classifier->Save(argv[2]); @@ -665,13 +640,10 @@ int otbBoostMachineLearningModel(int argc, char * argv[]) std::cout<<"Overall Accuracy: "<<cmCalculator->GetOverallAccuracy()<<std::endl; //Load Model to new Boost model - TargetListSampleType::Pointer predictedLoad = TargetListSampleType::New(); BoostType::Pointer classifierLoad = BoostType::New(); classifierLoad->Load(argv[2]); - classifierLoad->SetInputListSample(samples); - classifierLoad->SetTargetListSample(predictedLoad); - classifierLoad->PredictAll(); + TargetListSampleType::Pointer predictedLoad = classifierLoad->PredictBatch(samples, NULL); ConfusionMatrixCalculatorType::Pointer cmCalculatorLoad = ConfusionMatrixCalculatorType::New(); @@ -716,7 +688,6 @@ int otbANNMachineLearningModel(int argc, char * argv[]) typedef otb::NeuralNetworkMachineLearningModel<InputValueType, TargetValueType> ANNType; InputListSampleType::Pointer samples = InputListSampleType::New(); TargetListSampleType::Pointer labels = TargetListSampleType::New(); - TargetListSampleType::Pointer predicted = TargetListSampleType::New(); if (!ReadDataFile(argv[1], samples, labels)) { @@ -742,8 +713,7 @@ int otbANNMachineLearningModel(int argc, char * argv[]) classifier->SetEpsilon(0.01); */ classifier->Train(); - classifier->SetTargetListSample(predicted); - classifier->PredictAll(); + TargetListSampleType::Pointer predicted = classifier->PredictBatch(samples, NULL); ConfusionMatrixCalculatorType::Pointer cmCalculator = ConfusionMatrixCalculatorType::New(); @@ -760,13 +730,10 @@ int otbANNMachineLearningModel(int argc, char * argv[]) classifier->Save(argv[2]); //Load Model to new ANN - TargetListSampleType::Pointer predictedLoad = TargetListSampleType::New(); ANNType::Pointer classifierLoad = ANNType::New(); classifierLoad->Load(argv[2]); - classifierLoad->SetInputListSample(samples); - classifierLoad->SetTargetListSample(predictedLoad); - classifierLoad->PredictAll(); + TargetListSampleType::Pointer predictedLoad = classifierLoad->PredictBatch(samples, NULL); ConfusionMatrixCalculatorType::Pointer cmCalculatorLoad = ConfusionMatrixCalculatorType::New(); @@ -811,7 +778,6 @@ int otbNormalBayesMachineLearningModel(int argc, char * argv[]) InputListSampleType::Pointer samples = InputListSampleType::New(); TargetListSampleType::Pointer labels = TargetListSampleType::New(); - TargetListSampleType::Pointer predicted = TargetListSampleType::New(); if(!ReadDataFile(argv[1],samples,labels)) { @@ -824,8 +790,7 @@ int otbNormalBayesMachineLearningModel(int argc, char * argv[]) classifier->SetTargetListSample(labels); classifier->Train(); - classifier->SetTargetListSample(predicted); - classifier->PredictAll(); + TargetListSampleType::Pointer predicted = classifier->PredictBatch(samples, NULL); classifier->Save(argv[2]); @@ -842,13 +807,10 @@ int otbNormalBayesMachineLearningModel(int argc, char * argv[]) std::cout<<"Overall Accuracy: "<<cmCalculator->GetOverallAccuracy()<<std::endl; //Load Model to new Normal Bayes - TargetListSampleType::Pointer predictedLoad = TargetListSampleType::New(); NormalBayesType::Pointer classifierLoad = NormalBayesType::New(); classifierLoad->Load(argv[2]); - classifierLoad->SetInputListSample(samples); - classifierLoad->SetTargetListSample(predictedLoad); - classifierLoad->PredictAll(); + TargetListSampleType::Pointer predictedLoad = classifierLoad->PredictBatch(samples, NULL); ConfusionMatrixCalculatorType::Pointer cmCalculatorLoad = ConfusionMatrixCalculatorType::New(); @@ -893,7 +855,6 @@ int otbDecisionTreeMachineLearningModel(int argc, char * argv[]) InputListSampleType::Pointer samples = InputListSampleType::New(); TargetListSampleType::Pointer labels = TargetListSampleType::New(); - TargetListSampleType::Pointer predicted = TargetListSampleType::New(); if(!ReadDataFile(argv[1],samples,labels)) { @@ -906,8 +867,7 @@ int otbDecisionTreeMachineLearningModel(int argc, char * argv[]) classifier->SetTargetListSample(labels); classifier->Train(); - classifier->SetTargetListSample(predicted); - classifier->PredictAll(); + TargetListSampleType::Pointer predicted = classifier->PredictBatch(samples, NULL); classifier->Save(argv[2]); @@ -924,13 +884,10 @@ int otbDecisionTreeMachineLearningModel(int argc, char * argv[]) std::cout<<"Overall Accuracy: "<<cmCalculator->GetOverallAccuracy()<<std::endl; //Load Model to new Decision Tree - TargetListSampleType::Pointer predictedLoad = TargetListSampleType::New(); DecisionTreeType::Pointer classifierLoad = DecisionTreeType::New(); classifierLoad->Load(argv[2]); - classifierLoad->SetInputListSample(samples); - classifierLoad->SetTargetListSample(predictedLoad); - classifierLoad->PredictAll(); + TargetListSampleType::Pointer predictedLoad = classifierLoad->PredictBatch(samples, NULL); ConfusionMatrixCalculatorType::Pointer cmCalculatorLoad = ConfusionMatrixCalculatorType::New(); @@ -976,7 +933,6 @@ int otbGradientBoostedTreeMachineLearningModel(int argc, char * argv[]) InputListSampleType::Pointer samples = InputListSampleType::New(); TargetListSampleType::Pointer labels = TargetListSampleType::New(); - TargetListSampleType::Pointer predicted = TargetListSampleType::New(); if(!ReadDataFile(argv[1],samples,labels)) { @@ -989,8 +945,7 @@ int otbGradientBoostedTreeMachineLearningModel(int argc, char * argv[]) classifier->SetTargetListSample(labels); classifier->Train(); - classifier->SetTargetListSample(predicted); - classifier->PredictAll(); + TargetListSampleType::Pointer predicted = classifier->PredictBatch(samples, NULL); classifier->Save(argv[2]); @@ -1007,13 +962,10 @@ int otbGradientBoostedTreeMachineLearningModel(int argc, char * argv[]) std::cout<<"Overall Accuracy: "<<cmCalculator->GetOverallAccuracy()<<std::endl; //Load Model to new GBT - TargetListSampleType::Pointer predictedLoad = TargetListSampleType::New(); GBTreeType::Pointer classifierLoad = GBTreeType::New(); classifierLoad->Load(argv[2]); - classifierLoad->SetInputListSample(samples); - classifierLoad->SetTargetListSample(predictedLoad); - classifierLoad->PredictAll(); + TargetListSampleType::Pointer predictedLoad = classifierLoad->PredictBatch(samples, NULL); ConfusionMatrixCalculatorType::Pointer cmCalculatorLoad = ConfusionMatrixCalculatorType::New(); @@ -1196,7 +1148,6 @@ int otbSharkRFMachineLearningModel(int argc, char * argv[]) typedef otb::SharkRandomForestsMachineLearningModel<InputValueType,TargetValueType> RandomForestType; InputListSampleType::Pointer samples = InputListSampleType::New(); TargetListSampleType::Pointer labels = TargetListSampleType::New(); - TargetListSampleType::Pointer predicted = TargetListSampleType::New(); if(!SharkReadDataFile(argv[1],samples,labels)) { @@ -1216,11 +1167,10 @@ int otbSharkRFMachineLearningModel(int argc, char * argv[]) std::cout << "Train\n"; classifier->Train(); std::cout << "Save\n"; - classifier->Save(argv[2]); - + classifier->Save(argv[2]); + std::cout << "Predict\n"; - classifier->SetTargetListSample(predicted); - classifier->PredictAll(); + TargetListSampleType::Pointer predicted = classifier->PredictBatch(samples, NULL); ConfusionMatrixCalculatorType::Pointer cmCalculator = ConfusionMatrixCalculatorType::New(); @@ -1233,7 +1183,7 @@ int otbSharkRFMachineLearningModel(int argc, char * argv[]) const float kappaIdx = cmCalculator->GetKappaIndex(); std::cout<<"Kappa: "<<kappaIdx<<std::endl; std::cout<<"Overall Accuracy: "<<cmCalculator->GetOverallAccuracy()<<std::endl; - + // //Predict single samples. Written for benchmarking purposes, but // too long for regression testing // std::cout << "Predict single samples\n"; @@ -1244,27 +1194,24 @@ int otbSharkRFMachineLearningModel(int argc, char * argv[]) // { // classifier->Predict(sIt.GetMeasurementVector())[0]; // } - // auto duration = std::chrono::duration_cast< TimeT> + // auto duration = std::chrono::duration_cast< TimeT> // (std::chrono::system_clock::now() - start); // auto elapsed = duration.count(); // std::cout << "Predict took " << elapsed << " ms\n"; // std::cout << "Single sample OA = " << oa << '\n'; //Load Model to new RF - TargetListSampleType::Pointer predictedLoad = TargetListSampleType::New(); RandomForestType::Pointer classifierLoad = RandomForestType::New(); std::cout << "Load\n"; classifierLoad->Load(argv[2]); auto start = std::chrono::system_clock::now(); - classifierLoad->SetInputListSample(samples); - classifierLoad->SetTargetListSample(predictedLoad); std::cout << "Predict loaded\n"; - classifierLoad->PredictAll(); + TargetListSampleType::Pointer predictedLoad = classifierLoad->PredictBatch(samples, NULL); using TimeT = std::chrono::milliseconds; - auto duration = std::chrono::duration_cast< TimeT> + auto duration = std::chrono::duration_cast< TimeT> (std::chrono::system_clock::now() - start); auto elapsed = duration.count(); - std::cout << "PredictAll took " << elapsed << " ms\n"; + std::cout << "PredictBatch took " << elapsed << " ms\n"; ConfusionMatrixCalculatorType::Pointer cmCalculatorLoad = ConfusionMatrixCalculatorType::New(); cmCalculatorLoad->SetProducedLabels(predictedLoad); @@ -1286,7 +1233,7 @@ int otbSharkRFMachineLearningModel(int argc, char * argv[]) { return EXIT_FAILURE; } - + return EXIT_SUCCESS; }