From 23d69b729a7a77898ffb9e58e243e43c475bcc6d Mon Sep 17 00:00:00 2001 From: Guillaume Pasero <guillaume.pasero@c-s.fr> Date: Mon, 11 Dec 2017 18:12:49 +0100 Subject: [PATCH] TEST: add first tests for DR models (WIP) --- .../test/CMakeLists.txt | 52 +++++++++ .../test/otbAutoencoderModelTest.cxx | 105 ++++++++++++++++++ ...ensionalityReductionLearningTestDriver.cxx | 28 +++++ ...ImageDimensionalityReductionFilterTest.cxx | 20 ++++ .../test/otbPCAModelTest.cxx | 20 ++++ .../test/otbSOMModelTest.cxx | 20 ++++ 6 files changed, 245 insertions(+) create mode 100644 Modules/Learning/DimensionalityReductionLearning/test/CMakeLists.txt create mode 100644 Modules/Learning/DimensionalityReductionLearning/test/otbAutoencoderModelTest.cxx create mode 100644 Modules/Learning/DimensionalityReductionLearning/test/otbDimensionalityReductionLearningTestDriver.cxx create mode 100644 Modules/Learning/DimensionalityReductionLearning/test/otbImageDimensionalityReductionFilterTest.cxx create mode 100644 Modules/Learning/DimensionalityReductionLearning/test/otbPCAModelTest.cxx create mode 100644 Modules/Learning/DimensionalityReductionLearning/test/otbSOMModelTest.cxx diff --git a/Modules/Learning/DimensionalityReductionLearning/test/CMakeLists.txt b/Modules/Learning/DimensionalityReductionLearning/test/CMakeLists.txt new file mode 100644 index 0000000000..531d8e5223 --- /dev/null +++ b/Modules/Learning/DimensionalityReductionLearning/test/CMakeLists.txt @@ -0,0 +1,52 @@ +# +# Copyright (C) 2005-2017 Centre National d'Etudes Spatiales (CNES) +# +# This file is part of Orfeo Toolbox +# +# https://www.orfeo-toolbox.org/ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +otb_module_test() + +set(OTBDimensionalityReductionLearningTests +otbDimensionalityReductionLearningTestDriver.cxx +otbAutoencoderModelTest.cxx +) + +add_executable(otbDimensionalityReductionLearningTestDriver ${OTBDimensionalityReductionLearningTests}) +target_link_libraries(otbDimensionalityReductionLearningTestDriver ${OTBDimensionalityReductionLearning-Test_LIBRARIES}) +otb_module_target_label(otbDimensionalityReductionLearningTestDriver) + +# Tests Declaration +# --------------- Autoencoder -------------------------------- +otb_add_test(NAME leTuAutoencoderModelNew COMMAND + otbDimensionalityReductionLearningTestDriver + otbAutoencoderModelNew + ) + +otb_add_test(NAME leTvAutoencoderModelTrain COMMAND + otbDimensionalityReductionLearningTestDriver + otbAutoencoderModeTrain + ${INPUTDATA}/letter_light.scale + ${TEMP}/ae_model.txt + ) + +otb_add_test(NAME leTvAutoencoderModelCanRead COMMAND + otbDimensionalityReductionLearningTestDriver + otbAutoencoderModelCanRead + ${TEMP}/ae_model.txt + ) + +set_property(TEST leTvAutoencoderModelCanRead APPEND PROPERTY DEPENDS leTvAutoencoderModelTrain) diff --git a/Modules/Learning/DimensionalityReductionLearning/test/otbAutoencoderModelTest.cxx b/Modules/Learning/DimensionalityReductionLearning/test/otbAutoencoderModelTest.cxx new file mode 100644 index 0000000000..5f79af16c7 --- /dev/null +++ b/Modules/Learning/DimensionalityReductionLearning/test/otbAutoencoderModelTest.cxx @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2005-2017 Centre National d'Etudes Spatiales (CNES) + * + * This file is part of Orfeo Toolbox + * + * https://www.orfeo-toolbox.org/ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "otbAutoencoderModel.h" +#include "otbReadDataFile.h" +#include "itkMacro.h" + +typedef otb::AutoencoderModel<double, shark::LogisticNeuron> LogAutoencoderModel; +typedef LogAutoencoderModel::InputListSampleType InputListSampleType; +typedef LogAutoencoderModel::TargetListSampleType TargetListSampleType; + +int otbAutoencoderModelNew(int itkNotUsed(argc), char * itkNotUsed(argv) []) +{ + LogAutoencoderModel::Pointer model = LogAutoencoderModel::New(); + + return EXIT_SUCCESS; +} + +int otbAutoencoderModelCanRead(int argc, char * argv []) +{ + if (argc < 2) + { + std::cerr << "Usage: " << argv[0] << " <model>" << std::endl; + return EXIT_FAILURE; + } + + LogAutoencoderModel::Pointer model = LogAutoencoderModel::New(); + std::string filename(argv[1]); + if (! model->CanReadFile(filename) ) + { + std::cerr << "Failed to read model file : "<< filename << std::endl; + return EXIT_FAILURE; + } + return EXIT_SUCCESS; +} + +int otbAutoencoderModeTrain(int argc, char * argv []) +{ + if (argc < 3) + { + std::cerr << "Usage: " << argv[0] << " letter.scale model.out" << std::endl; + return EXIT_FAILURE; + } + + // Extract data from letter.scale + InputListSampleType::Pointer samples = InputListSampleType::New(); + TargetListSampleType::Pointer target = TargetListSampleType::New(); + if (!otb::ReadDataFile(argv[1], samples, target)) + { + std::cout << "Failed to read samples file " << argv[1] << std::endl; + return EXIT_FAILURE; + } + + itk::Array<unsigned int> nb_neuron; + itk::Array<float> noise; + itk::Array<float> regularization; + itk::Array<float> rho; + itk::Array<float> beta; + + nb_neuron.SetSize(1); + noise.SetSize(1); + regularization.SetSize(1); + rho.SetSize(1); + beta.SetSize(1); + + nb_neuron[0] = 14; + noise[0] = 0.0; + regularization[0] = 0.01; + rho[0] = 0.0; + beta[0] = 0.0; + + LogAutoencoderModel::Pointer model = LogAutoencoderModel::New(); + model->SetNumberOfHiddenNeurons(nb_neuron); + model->SetNumberOfIterations(100); + model->SetNumberOfIterationsFineTuning(0); + model->SetEpsilon(0.0); + model->SetInitFactor(1.0); + model->SetRegularization(regularization); + model->SetNoise(noise); + model->SetRho(rho); + model->SetBeta(beta); + model->SetWriteWeights(true); + model->SetInputListSample(samples); + model->Train(); + model->Save(std::string(argv[2])); + + return EXIT_SUCCESS; +} diff --git a/Modules/Learning/DimensionalityReductionLearning/test/otbDimensionalityReductionLearningTestDriver.cxx b/Modules/Learning/DimensionalityReductionLearning/test/otbDimensionalityReductionLearningTestDriver.cxx new file mode 100644 index 0000000000..d3ea9575c5 --- /dev/null +++ b/Modules/Learning/DimensionalityReductionLearning/test/otbDimensionalityReductionLearningTestDriver.cxx @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2005-2017 Centre National d'Etudes Spatiales (CNES) + * + * This file is part of Orfeo Toolbox + * + * https://www.orfeo-toolbox.org/ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "otbTestMain.h" + +void RegisterTests() +{ + REGISTER_TEST(otbAutoencoderModelNew); + REGISTER_TEST(otbAutoencoderModelCanRead); + REGISTER_TEST(otbAutoencoderModeTrain); +} diff --git a/Modules/Learning/DimensionalityReductionLearning/test/otbImageDimensionalityReductionFilterTest.cxx b/Modules/Learning/DimensionalityReductionLearning/test/otbImageDimensionalityReductionFilterTest.cxx new file mode 100644 index 0000000000..a2b8da9d9a --- /dev/null +++ b/Modules/Learning/DimensionalityReductionLearning/test/otbImageDimensionalityReductionFilterTest.cxx @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2005-2017 Centre National d'Etudes Spatiales (CNES) + * + * This file is part of Orfeo Toolbox + * + * https://www.orfeo-toolbox.org/ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + diff --git a/Modules/Learning/DimensionalityReductionLearning/test/otbPCAModelTest.cxx b/Modules/Learning/DimensionalityReductionLearning/test/otbPCAModelTest.cxx new file mode 100644 index 0000000000..a2b8da9d9a --- /dev/null +++ b/Modules/Learning/DimensionalityReductionLearning/test/otbPCAModelTest.cxx @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2005-2017 Centre National d'Etudes Spatiales (CNES) + * + * This file is part of Orfeo Toolbox + * + * https://www.orfeo-toolbox.org/ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + diff --git a/Modules/Learning/DimensionalityReductionLearning/test/otbSOMModelTest.cxx b/Modules/Learning/DimensionalityReductionLearning/test/otbSOMModelTest.cxx new file mode 100644 index 0000000000..a2b8da9d9a --- /dev/null +++ b/Modules/Learning/DimensionalityReductionLearning/test/otbSOMModelTest.cxx @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2005-2017 Centre National d'Etudes Spatiales (CNES) + * + * This file is part of Orfeo Toolbox + * + * https://www.orfeo-toolbox.org/ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + -- GitLab