diff --git a/Modules/Learning/DimensionalityReductionLearning/test/CMakeLists.txt b/Modules/Learning/DimensionalityReductionLearning/test/CMakeLists.txt index 531d8e522349b21ac2cbbb04c0cf5b16f0dee415..e51906297744b458c625bcc8b0d78f65a67a529a 100644 --- a/Modules/Learning/DimensionalityReductionLearning/test/CMakeLists.txt +++ b/Modules/Learning/DimensionalityReductionLearning/test/CMakeLists.txt @@ -23,6 +23,8 @@ otb_module_test() set(OTBDimensionalityReductionLearningTests otbDimensionalityReductionLearningTestDriver.cxx otbAutoencoderModelTest.cxx +otbPCAModelTest.cxx +otbSOMModelTest.cxx ) add_executable(otbDimensionalityReductionLearningTestDriver ${OTBDimensionalityReductionLearningTests}) @@ -40,13 +42,61 @@ otb_add_test(NAME leTvAutoencoderModelTrain COMMAND otbDimensionalityReductionLearningTestDriver otbAutoencoderModeTrain ${INPUTDATA}/letter_light.scale - ${TEMP}/ae_model.txt + ${TEMP}/model.ae ) otb_add_test(NAME leTvAutoencoderModelCanRead COMMAND otbDimensionalityReductionLearningTestDriver otbAutoencoderModelCanRead - ${TEMP}/ae_model.txt + ${TEMP}/model.ae ) set_property(TEST leTvAutoencoderModelCanRead APPEND PROPERTY DEPENDS leTvAutoencoderModelTrain) + +# --------------- PCA -------------------------------- +otb_add_test(NAME leTuPCAModelNew COMMAND + otbDimensionalityReductionLearningTestDriver + otbPCAModelNew + ) + +otb_add_test(NAME leTvPCAModelTrain COMMAND + otbDimensionalityReductionLearningTestDriver + otbPCAModeTrain + ${INPUTDATA}/letter_light.scale + ${TEMP}/model.pca + ) + +otb_add_test(NAME leTvPCAModelCanRead COMMAND + otbDimensionalityReductionLearningTestDriver + otbPCAModelCanRead + ${TEMP}/model.pca + ) + +set_property(TEST leTvPCAModelCanRead APPEND PROPERTY DEPENDS leTvPCAModelTrain) + +# --------------- SOM -------------------------------- +otb_add_test(NAME leTuSOMModelNew COMMAND + otbDimensionalityReductionLearningTestDriver + otbSOMModelNew + ) + +otb_add_test(NAME leTvSOMModelTrain COMMAND + otbDimensionalityReductionLearningTestDriver + otbSOMModeTrain + ${INPUTDATA}/letter_light.scale + ${TEMP}/model2D.som + ${TEMP}/model3D.som + ${TEMP}/model4D.som + ${TEMP}/model5D.som + ) + +otb_add_test(NAME leTvSOMModelCanRead COMMAND + otbDimensionalityReductionLearningTestDriver + otbSOMModelCanRead + ${TEMP}/model2D.som + ${TEMP}/model3D.som + ${TEMP}/model4D.som + ${TEMP}/model5D.som + ) + +set_property(TEST leTvSOMModelCanRead APPEND PROPERTY DEPENDS leTvSOMModelTrain) diff --git a/Modules/Learning/DimensionalityReductionLearning/test/otbAutoencoderModelTest.cxx b/Modules/Learning/DimensionalityReductionLearning/test/otbAutoencoderModelTest.cxx index 5f79af16c70fefe6343d1edac2a209f06c8387c0..ad3880f6f54b9e4fb234d4d3a9297a2918c02d27 100644 --- a/Modules/Learning/DimensionalityReductionLearning/test/otbAutoencoderModelTest.cxx +++ b/Modules/Learning/DimensionalityReductionLearning/test/otbAutoencoderModelTest.cxx @@ -88,7 +88,7 @@ int otbAutoencoderModeTrain(int argc, char * argv []) LogAutoencoderModel::Pointer model = LogAutoencoderModel::New(); model->SetNumberOfHiddenNeurons(nb_neuron); - model->SetNumberOfIterations(100); + model->SetNumberOfIterations(50); model->SetNumberOfIterationsFineTuning(0); model->SetEpsilon(0.0); model->SetInitFactor(1.0); diff --git a/Modules/Learning/DimensionalityReductionLearning/test/otbDimensionalityReductionLearningTestDriver.cxx b/Modules/Learning/DimensionalityReductionLearning/test/otbDimensionalityReductionLearningTestDriver.cxx index d3ea9575c5c57dbad3390920f626573ec31cb6c4..6e0c644798e2501bbc77a3c7dc3a28c55b87f5d8 100644 --- a/Modules/Learning/DimensionalityReductionLearning/test/otbDimensionalityReductionLearningTestDriver.cxx +++ b/Modules/Learning/DimensionalityReductionLearning/test/otbDimensionalityReductionLearningTestDriver.cxx @@ -25,4 +25,10 @@ void RegisterTests() REGISTER_TEST(otbAutoencoderModelNew); REGISTER_TEST(otbAutoencoderModelCanRead); REGISTER_TEST(otbAutoencoderModeTrain); + REGISTER_TEST(otbPCAModelNew); + REGISTER_TEST(otbPCAModelCanRead); + REGISTER_TEST(otbPCAModeTrain); + REGISTER_TEST(otbSOMModelNew); + REGISTER_TEST(otbSOMModelCanRead); + REGISTER_TEST(otbSOMModeTrain); } diff --git a/Modules/Learning/DimensionalityReductionLearning/test/otbPCAModelTest.cxx b/Modules/Learning/DimensionalityReductionLearning/test/otbPCAModelTest.cxx index a2b8da9d9a15553f2681fa732d90711d1b24306f..6fe3945e43729e464de4f264025dd78fb8610e16 100644 --- a/Modules/Learning/DimensionalityReductionLearning/test/otbPCAModelTest.cxx +++ b/Modules/Learning/DimensionalityReductionLearning/test/otbPCAModelTest.cxx @@ -18,3 +18,61 @@ * limitations under the License. */ +#include "otbPCAModel.h" +#include "otbReadDataFile.h" + +typedef otb::PCAModel<double> PCAModelType; +typedef PCAModelType::InputListSampleType InputListSampleType; +typedef PCAModelType::TargetListSampleType TargetListSampleType; + +int otbPCAModelNew(int itkNotUsed(argc), char * itkNotUsed(argv) []) +{ + PCAModelType::Pointer model = PCAModelType::New(); + + return EXIT_SUCCESS; +} + +int otbPCAModelCanRead(int argc, char * argv []) +{ + if (argc < 2) + { + std::cerr << "Usage: " << argv[0] << " <model>" << std::endl; + return EXIT_FAILURE; + } + + PCAModelType::Pointer model = PCAModelType::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 otbPCAModeTrain(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; + } + + PCAModelType::Pointer model = PCAModelType::New(); + model->SetDimension(14); + model->SetWriteEigenvectors(true); + model->SetInputListSample(samples); + model->Train(); + model->Save(std::string(argv[2])); + + return EXIT_SUCCESS; +} diff --git a/Modules/Learning/DimensionalityReductionLearning/test/otbSOMModelTest.cxx b/Modules/Learning/DimensionalityReductionLearning/test/otbSOMModelTest.cxx index a2b8da9d9a15553f2681fa732d90711d1b24306f..092cac8404ced25b8a106e5ac5037bbaa06ced71 100644 --- a/Modules/Learning/DimensionalityReductionLearning/test/otbSOMModelTest.cxx +++ b/Modules/Learning/DimensionalityReductionLearning/test/otbSOMModelTest.cxx @@ -18,3 +18,151 @@ * limitations under the License. */ +#include "otbSOMModel.h" +#include "otbReadDataFile.h" + +typedef otb::SOMModel<double,2> SOMModel2D; +typedef otb::SOMModel<double,3> SOMModel3D; +typedef otb::SOMModel<double,4> SOMModel4D; +typedef otb::SOMModel<double,5> SOMModel5D; + +typedef SOMModel2D::InputListSampleType InputListSampleType; +typedef SOMModel2D::TargetListSampleType TargetListSampleType; + +int otbSOMModelNew(int itkNotUsed(argc), char * itkNotUsed(argv) []) +{ + SOMModel2D::Pointer model2D = SOMModel2D::New(); + SOMModel3D::Pointer model3D = SOMModel3D::New(); + SOMModel4D::Pointer model4D = SOMModel4D::New(); + SOMModel5D::Pointer model5D = SOMModel5D::New(); + + return EXIT_SUCCESS; +} + +int otbSOMModelCanRead(int argc, char * argv []) +{ + if (argc < 2) + { + std::cerr << "Usage: " << argv[0] << " <model2D> <model3D> <model4D> <model5D>" << std::endl; + return EXIT_FAILURE; + } + + std::string filename2D(argv[1]); + std::string filename3D(argv[2]); + std::string filename4D(argv[3]); + std::string filename5D(argv[4]); + + SOMModel2D::Pointer model2D = SOMModel2D::New(); + SOMModel3D::Pointer model3D = SOMModel3D::New(); + SOMModel4D::Pointer model4D = SOMModel4D::New(); + SOMModel5D::Pointer model5D = SOMModel5D::New(); + + if (! model2D->CanReadFile(filename2D) ) + { + std::cerr << "Failed to read model file : "<< filename2D << std::endl; + return EXIT_FAILURE; + } + if (! model3D->CanReadFile(filename3D) ) + { + std::cerr << "Failed to read model file : "<< filename3D << std::endl; + return EXIT_FAILURE; + } + if (! model4D->CanReadFile(filename4D) ) + { + std::cerr << "Failed to read model file : "<< filename4D << std::endl; + return EXIT_FAILURE; + } + if (! model5D->CanReadFile(filename5D) ) + { + std::cerr << "Failed to read model file : "<< filename5D << std::endl; + return EXIT_FAILURE; + } + return EXIT_SUCCESS; +} + +int otbSOMModeTrain(int argc, char * argv []) +{ + if (argc < 3) + { + std::cerr << "Usage: " << argv[0] << " letter.scale model2D.out model3D.out model4D.out model5D.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; + } + + SOMModel2D::Pointer model2D = SOMModel2D::New(); + SOMModel3D::Pointer model3D = SOMModel3D::New(); + SOMModel4D::Pointer model4D = SOMModel4D::New(); + SOMModel5D::Pointer model5D = SOMModel5D::New(); + + SOMModel2D::SizeType size2D, radius2D; + size2D.Fill(10); + radius2D.Fill(3); + SOMModel3D::SizeType size3D, radius3D; + size3D.Fill(6); + radius3D.Fill(3); + SOMModel4D::SizeType size4D, radius4D; + size4D.Fill(4); + radius4D.Fill(2); + SOMModel5D::SizeType size5D, radius5D; + size5D.Fill(3); + radius5D.Fill(2); + + std::cout << "Train 2D model..."<< std::endl; + model2D->SetNumberOfIterations(10); + model2D->SetBetaInit(1.0); + model2D->SetWriteMap(true); + model2D->SetBetaEnd(0.1); + model2D->SetMaxWeight(10.0); + model2D->SetMapSize(size2D); + model2D->SetNeighborhoodSizeInit(radius2D); + model2D->SetInputListSample(samples); + model2D->Train(); + model2D->Save(std::string(argv[2])); + + std::cout << "Train 3D model..."<< std::endl; + model3D->SetNumberOfIterations(10); + model3D->SetBetaInit(1.0); + model3D->SetWriteMap(true); + model3D->SetBetaEnd(0.1); + model3D->SetMaxWeight(10.0); + model3D->SetMapSize(size3D); + model3D->SetNeighborhoodSizeInit(radius3D); + model3D->SetInputListSample(samples); + model3D->Train(); + model3D->Save(std::string(argv[3])); + + std::cout << "Train 4D model..."<< std::endl; + model4D->SetNumberOfIterations(10); + model4D->SetBetaInit(1.0); + model4D->SetWriteMap(true); + model4D->SetBetaEnd(0.1); + model4D->SetMaxWeight(10.0); + model4D->SetMapSize(size4D); + model4D->SetNeighborhoodSizeInit(radius4D); + model4D->SetInputListSample(samples); + model4D->Train(); + model4D->Save(std::string(argv[4])); + + std::cout << "Train 5D model..."<< std::endl; + model5D->SetNumberOfIterations(10); + model5D->SetBetaInit(1.0); + model5D->SetWriteMap(true); + model5D->SetBetaEnd(0.1); + model5D->SetMaxWeight(10.0); + model5D->SetMapSize(size5D); + model5D->SetNeighborhoodSizeInit(radius5D); + model5D->SetInputListSample(samples); + model5D->Train(); + model5D->Save(std::string(argv[5])); + + return EXIT_SUCCESS; +} +