This is an automated email from the git hooks/post-receive script. sebastic-guest pushed a commit to branch upstream-master in repository pktools.
commit e6a281f310bf2dab0196022607103b169530687a Author: Pieter Kempeneers <kempe...@gmail.com> Date: Wed Jan 16 15:55:31 2013 +0100 added OptFactory.h and pkopt_svm.cc --- ChangeLog | 14 +++++++++----- src/algorithms/Makefile.am | 2 +- src/algorithms/Makefile.in | 8 ++++---- src/apps/Makefile.am | 8 +++++--- src/apps/Makefile.in | 32 ++++++++++++++++++++++++-------- src/apps/pkfs_svm.cc | 18 ++++++------------ src/apps/pksensormodel.cc | 5 ++++- 7 files changed, 53 insertions(+), 34 deletions(-) diff --git a/ChangeLog b/ChangeLog index de06614..6e3148c 100755 --- a/ChangeLog +++ b/ChangeLog @@ -40,6 +40,8 @@ version 2.4 --enable-fann (when FANN is installed, needed for pkclassify_nn) --enable-las (when LIBLAS is installed, needed for pklas2img) --enable-nlopt (when NLOPT is installed, needed for pksensormodel and pkgetchandelier) + - OptFactory.h (added) + factory class for nlopt::opt (selecting algorithm via string) - ImgReaderGdal.cc in addition to internal setNoData member variable, also support GDALSetNoData - ImgWriterGdal.cc @@ -64,13 +66,15 @@ version 2.4 update of header information - pkclassify_nn support of cross validation - - pkfs_svm - feature selection tool for svm classification (added) - - pkfs_nn - feature selection tool for nn classification (added) + - pkfs_svm (added) + feature selection tool for svm classification + - pkfs_nn (added) + feature selection tool for nn classification + - pkopt_svm (added) + optimization tool for svm classification (optimize ccost and gamma using NLOPT) - pkascii2ogr tool to create simple vector files from coordinates in ASCII file (points or polygon) - pksensormodel - tool to model pushbroom sensor + tool to model pushbroom sensor (with optimization of boresight angles using NLOPT) - pkascii2ogr support csv input file diff --git a/src/algorithms/Makefile.am b/src/algorithms/Makefile.am index 9f0bafa..b00098e 100644 --- a/src/algorithms/Makefile.am +++ b/src/algorithms/Makefile.am @@ -19,7 +19,7 @@ libalgorithms_a_HEADERS += myfann_cpp.h endif if USE_NLOPT -libalgorithms_a_HEADERS += SensorModel.h +libalgorithms_a_HEADERS += SensorModel.h OptFactory.h endif # the sources to add to the library and to add to the source distribution diff --git a/src/algorithms/Makefile.in b/src/algorithms/Makefile.in index a0c6645..bb2bb97 100644 --- a/src/algorithms/Makefile.in +++ b/src/algorithms/Makefile.in @@ -34,7 +34,7 @@ NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : @USE_FANN_TRUE@am__append_1 = myfann_cpp.h -@USE_NLOPT_TRUE@am__append_2 = SensorModel.h +@USE_NLOPT_TRUE@am__append_2 = SensorModel.h OptFactory.h subdir = src/algorithms DIST_COMMON = $(am__libalgorithms_a_HEADERS_DIST) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in @@ -54,8 +54,8 @@ libalgorithms_a_AR = $(AR) $(ARFLAGS) libalgorithms_a_LIBADD = am__libalgorithms_a_SOURCES_DIST = Egcs.h Filter2d.h Filter.h \ Histogram.h ConfusionMatrix.h svm.h FeatureSelector.h \ - myfann_cpp.h SensorModel.h Egcs.cc Filter2d.cc Filter.cc \ - Histogram.cc ConfusionMatrix.cc svm.cpp + myfann_cpp.h SensorModel.h OptFactory.h Egcs.cc Filter2d.cc \ + Filter.cc Histogram.cc ConfusionMatrix.cc svm.cpp am__objects_1 = am__objects_2 = $(am__objects_1) $(am__objects_1) am_libalgorithms_a_OBJECTS = $(am__objects_2) Egcs.$(OBJEXT) \ @@ -79,7 +79,7 @@ SOURCES = $(libalgorithms_a_SOURCES) DIST_SOURCES = $(am__libalgorithms_a_SOURCES_DIST) am__libalgorithms_a_HEADERS_DIST = Egcs.h Filter2d.h Filter.h \ Histogram.h ConfusionMatrix.h svm.h FeatureSelector.h \ - myfann_cpp.h SensorModel.h + myfann_cpp.h SensorModel.h OptFactory.h am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ diff --git a/src/apps/Makefile.am b/src/apps/Makefile.am index aa0421f..5fe6484 100644 --- a/src/apps/Makefile.am +++ b/src/apps/Makefile.am @@ -23,9 +23,11 @@ pklas2img_SOURCES = pklas2img.cc pklas2img_LDADD = -L$(top_builddir)/src/fileclasses -lfileClasses -llas $(AM_LDFLAGS) endif if USE_NLOPT -bin_PROGRAMS += pksensormodel +bin_PROGRAMS += pksensormodel pkopt_svm pksensormodel_SOURCES = $(top_srcdir)/src/algorithms/SensorModel.h pksensormodel.h pksensormodel.cc pksensormodel_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) -lnlopt -lm -lgslwrap +pkopt_svm_SOURCES = $(top_srcdir)/src/algorithms/OptFactory.h pkclassify_nn.h pkopt_svm.cc +pkopt_svm_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) -lnlopt endif # list of sources for the binaries pkinfo_SOURCES = pkinfo.cc @@ -51,8 +53,8 @@ pkmosaic_SOURCES = pkmosaic.cc pkndvi_SOURCES = pkndvi.cc pkpolygonize_SOURCES = pkpolygonize.cc pkdiff_SOURCES = pkdiff.cc -pkclassify_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithms/svm.cpp pkclassify_svm.cc -pkfs_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithms/svm.cpp pkfs_svm.cc +pkclassify_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithms/svm.cpp pkclassify_nn.h pkclassify_svm.cc +pkfs_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithms/svm.cpp pkclassify_nn.h pkfs_svm.cc pkfs_svm_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) pkascii2img_SOURCES = pkascii2img.cc pkascii2ogr_SOURCES = pkascii2ogr.cc diff --git a/src/apps/Makefile.in b/src/apps/Makefile.in index d708c55..926267c 100644 --- a/src/apps/Makefile.in +++ b/src/apps/Makefile.in @@ -43,7 +43,7 @@ bin_PROGRAMS = pkinfo$(EXEEXT) pkcrop$(EXEEXT) pkreclass$(EXEEXT) \ $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) @USE_FANN_TRUE@am__append_1 = pkclassify_nn pkfs_nn @USE_LAS_TRUE@am__append_2 = pklas2img -@USE_NLOPT_TRUE@am__append_3 = pksensormodel +@USE_NLOPT_TRUE@am__append_3 = pksensormodel pkopt_svm subdir = src/apps DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -57,7 +57,8 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = @USE_FANN_TRUE@am__EXEEXT_1 = pkclassify_nn$(EXEEXT) pkfs_nn$(EXEEXT) @USE_LAS_TRUE@am__EXEEXT_2 = pklas2img$(EXEEXT) -@USE_NLOPT_TRUE@am__EXEEXT_3 = pksensormodel$(EXEEXT) +@USE_NLOPT_TRUE@am__EXEEXT_3 = pksensormodel$(EXEEXT) \ +@USE_NLOPT_TRUE@ pkopt_svm$(EXEEXT) am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_pkascii2img_OBJECTS = pkascii2img.$(OBJEXT) @@ -189,6 +190,13 @@ pkndvi_LDADD = $(LDADD) pkndvi_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(top_builddir)/src/algorithms/libalgorithms.a \ $(top_builddir)/src/imageclasses/libimageClasses.a +am__pkopt_svm_SOURCES_DIST = \ + $(top_srcdir)/src/algorithms/OptFactory.h pkclassify_nn.h \ + pkopt_svm.cc +@USE_NLOPT_TRUE@am_pkopt_svm_OBJECTS = pkopt_svm.$(OBJEXT) +pkopt_svm_OBJECTS = $(am_pkopt_svm_OBJECTS) +@USE_NLOPT_TRUE@pkopt_svm_DEPENDENCIES = $(am__DEPENDENCIES_1) \ +@USE_NLOPT_TRUE@ $(am__DEPENDENCIES_2) am_pkpolygonize_OBJECTS = pkpolygonize.$(OBJEXT) pkpolygonize_OBJECTS = $(am_pkpolygonize_OBJECTS) pkpolygonize_LDADD = $(LDADD) @@ -250,9 +258,10 @@ SOURCES = $(pkascii2img_SOURCES) $(pkascii2ogr_SOURCES) \ $(pkfillnodata_SOURCES) $(pkfilter_SOURCES) $(pkfs_nn_SOURCES) \ $(pkfs_svm_SOURCES) $(pkgetmask_SOURCES) $(pkinfo_SOURCES) \ $(pklas2img_SOURCES) $(pkmosaic_SOURCES) $(pkndvi_SOURCES) \ - $(pkpolygonize_SOURCES) $(pkreclass_SOURCES) \ - $(pksensormodel_SOURCES) $(pksetmask_SOURCES) \ - $(pksieve_SOURCES) $(pkstat_SOURCES) $(pkstatogr_SOURCES) + $(pkopt_svm_SOURCES) $(pkpolygonize_SOURCES) \ + $(pkreclass_SOURCES) $(pksensormodel_SOURCES) \ + $(pksetmask_SOURCES) $(pksieve_SOURCES) $(pkstat_SOURCES) \ + $(pkstatogr_SOURCES) DIST_SOURCES = $(pkascii2img_SOURCES) $(pkascii2ogr_SOURCES) \ $(am__pkclassify_nn_SOURCES_DIST) $(pkclassify_svm_SOURCES) \ $(pkcreatect_SOURCES) $(pkcrop_SOURCES) $(pkdiff_SOURCES) \ @@ -262,7 +271,8 @@ DIST_SOURCES = $(pkascii2img_SOURCES) $(pkascii2ogr_SOURCES) \ $(am__pkfs_nn_SOURCES_DIST) $(pkfs_svm_SOURCES) \ $(pkgetmask_SOURCES) $(pkinfo_SOURCES) \ $(am__pklas2img_SOURCES_DIST) $(pkmosaic_SOURCES) \ - $(pkndvi_SOURCES) $(pkpolygonize_SOURCES) $(pkreclass_SOURCES) \ + $(pkndvi_SOURCES) $(am__pkopt_svm_SOURCES_DIST) \ + $(pkpolygonize_SOURCES) $(pkreclass_SOURCES) \ $(am__pksensormodel_SOURCES_DIST) $(pksetmask_SOURCES) \ $(pksieve_SOURCES) $(pkstat_SOURCES) $(pkstatogr_SOURCES) ETAGS = etags @@ -389,6 +399,8 @@ LDADD = $(GDAL_LDFLAGS) $(top_builddir)/src/algorithms/libalgorithms.a $(top_bui @USE_LAS_TRUE@pklas2img_LDADD = -L$(top_builddir)/src/fileclasses -lfileClasses -llas $(AM_LDFLAGS) @USE_NLOPT_TRUE@pksensormodel_SOURCES = $(top_srcdir)/src/algorithms/SensorModel.h pksensormodel.h pksensormodel.cc @USE_NLOPT_TRUE@pksensormodel_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) -lnlopt -lm -lgslwrap +@USE_NLOPT_TRUE@pkopt_svm_SOURCES = $(top_srcdir)/src/algorithms/OptFactory.h pkclassify_nn.h pkopt_svm.cc +@USE_NLOPT_TRUE@pkopt_svm_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) -lnlopt # list of sources for the binaries pkinfo_SOURCES = pkinfo.cc pkcrop_SOURCES = pkcrop.cc @@ -413,8 +425,8 @@ pkmosaic_SOURCES = pkmosaic.cc pkndvi_SOURCES = pkndvi.cc pkpolygonize_SOURCES = pkpolygonize.cc pkdiff_SOURCES = pkdiff.cc -pkclassify_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithms/svm.cpp pkclassify_svm.cc -pkfs_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithms/svm.cpp pkfs_svm.cc +pkclassify_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithms/svm.cpp pkclassify_nn.h pkclassify_svm.cc +pkfs_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithms/svm.cpp pkclassify_nn.h pkfs_svm.cc pkfs_svm_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) pkascii2img_SOURCES = pkascii2img.cc pkascii2ogr_SOURCES = pkascii2ogr.cc @@ -552,6 +564,9 @@ pkmosaic$(EXEEXT): $(pkmosaic_OBJECTS) $(pkmosaic_DEPENDENCIES) pkndvi$(EXEEXT): $(pkndvi_OBJECTS) $(pkndvi_DEPENDENCIES) @rm -f pkndvi$(EXEEXT) $(CXXLINK) $(pkndvi_OBJECTS) $(pkndvi_LDADD) $(LIBS) +pkopt_svm$(EXEEXT): $(pkopt_svm_OBJECTS) $(pkopt_svm_DEPENDENCIES) + @rm -f pkopt_svm$(EXEEXT) + $(CXXLINK) $(pkopt_svm_OBJECTS) $(pkopt_svm_LDADD) $(LIBS) pkpolygonize$(EXEEXT): $(pkpolygonize_OBJECTS) $(pkpolygonize_DEPENDENCIES) @rm -f pkpolygonize$(EXEEXT) $(CXXLINK) $(pkpolygonize_OBJECTS) $(pkpolygonize_LDADD) $(LIBS) @@ -601,6 +616,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pklas2img.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkmosaic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkndvi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkopt_svm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkpolygonize.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkreclass.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pksensormodel.Po@am__quote@ diff --git a/src/apps/pkfs_svm.cc b/src/apps/pkfs_svm.cc index e7d799f..24c4969 100644 --- a/src/apps/pkfs_svm.cc +++ b/src/apps/pkfs_svm.cc @@ -21,10 +21,6 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>. #include <string> #include <map> #include <algorithm> -#include "imageclasses/ImgReaderGdal.h" -#include "imageclasses/ImgWriterGdal.h" -#include "imageclasses/ImgReaderOgr.h" -#include "imageclasses/ImgWriterOgr.h" #include "base/Optionpk.h" #include "algorithms/ConfusionMatrix.h" #include "algorithms/FeatureSelector.h" @@ -37,7 +33,6 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>. #define Malloc(type,n) (type *)malloc((n)*sizeof(type)) - //static enum SelectorValue { NA, SFFS, SFS, SBS, BFS }; enum SelectorValue { NA=0, SFFS=1, SFS=2, SBS=3, BFS=4 }; //global parameters used in cost function getCost @@ -107,13 +102,13 @@ double getCost(const vector<Vector2d<float> > &trainingFeatures) } assert(lIndex==prob.l); - if(verbose_opt[0]>1) + if(verbose_opt[0]>2) std::cout << "checking parameters" << std::endl; svm_check_parameter(&prob,¶m); - if(verbose_opt[0]>1) + if(verbose_opt[0]>2) std::cout << "parameters ok, training" << std::endl; svm=svm_train(&prob,¶m); - if(verbose_opt[0]>1) + if(verbose_opt[0]>2) std::cout << "SVM is now trained" << std::endl; ConfusionMatrix cm(nclass); @@ -124,6 +119,8 @@ double getCost(const vector<Vector2d<float> > &trainingFeatures) for(int i=0;i<prob.l;i++) cm.incrementResult(cm.getClass(prob.y[i]),cm.getClass(target[i]),1); assert(cm.nReference()); + if(verbose_opt[0]>1) + std::cout << cm << std::endl; // std::cout << "Kappa: " << cm.kappa() << std::endl; // double se95_oa=0; // double doa=0; @@ -159,7 +156,7 @@ int main(int argc, char *argv[]) Optionpk<bool> license_opt("lic","license","show license information",false); Optionpk<bool> help_opt("h","help","shows this help info",false); Optionpk<bool> todo_opt("\0","todo","",false); - Optionpk<string> training_opt("t", "training", "training shape file. A single shape file contains all training features (must be set as: B0, B1, B2,...) for all classes (class numbers identified by label option). Use multiple training files for bootstrap aggregation (alternative to the bag and bsize options, where a random subset is taken from a single training file)"); + Optionpk<string> training_opt("t", "training", "training shape file. A single shape file contains all training features (must be set as: B0, B1, B2,...) for all classes (class numbers identified by label option)."); Optionpk<string> label_opt("\0", "label", "identifier for class label in training shape file.","label"); Optionpk<unsigned short> maxFeatures_opt("n", "nf", "number of features to select (0 to select optimal number, see also ecost option)", 0); Optionpk<unsigned short> reclass_opt("\0", "rc", "reclass code (e.g. --rc=12 --rc=23 to reclass first two classes to 12 and 23 resp.).", 0); @@ -170,8 +167,6 @@ int main(int argc, char *argv[]) Optionpk<short> band_opt("b", "band", "band index (starting from 0, either use band option or use start to end)"); Optionpk<double> offset_opt("\0", "offset", "offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band]", 0.0); Optionpk<double> scale_opt("\0", "scale", "scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale[band] (use 0 if scale min and max in each band to -1.0 and 1.0)", 0.0); - Optionpk<unsigned short> aggreg_opt("a", "aggreg", "how to combine aggregated classifiers, see also rc option (0: no aggregation, 1: sum rule, 2: max rule).",0); - // Optionpk<double> priors_opt("p", "prior", "prior probabilities for each class (e.g., -p 0.3 -p 0.3 -p 0.2 )", 0.0); Optionpk<string> selector_opt("sm", "sm", "feature selection method (sffs=sequential floating forward search,sfs=sequential forward search, sbs, sequential backward search ,bfs=brute force search)","sffs"); Optionpk<float> epsilon_cost_opt("ecost", "ecost", "epsilon for stopping criterion in cost function to determine optimal number of features",0.001); @@ -190,7 +185,6 @@ int main(int argc, char *argv[]) band_opt.retrieveOption(argc,argv); offset_opt.retrieveOption(argc,argv); scale_opt.retrieveOption(argc,argv); - aggreg_opt.retrieveOption(argc,argv); // priors_opt.retrieveOption(argc,argv); svm_type_opt.retrieveOption(argc,argv); kernel_type_opt.retrieveOption(argc,argv); diff --git a/src/apps/pksensormodel.cc b/src/apps/pksensormodel.cc index d7a44d3..90e3f38 100644 --- a/src/apps/pksensormodel.cc +++ b/src/apps/pksensormodel.cc @@ -24,6 +24,7 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>. #include <math.h> #include <nlopt.hpp> #include "base/Optionpk.h" +#include "algorithms/OptFactory.h" #include "algorithms/Histogram.h" #include "pksensormodel.h" @@ -103,6 +104,7 @@ int main(int argc, char *argv[]) Optionpk<bool> aplrad_opt("arad","arad","platform attitude angles",false); Optionpk<bool> bcrad_opt("brad","brad","boresight attitude angles",false); Optionpk<bool> getzenith_opt("gz","getzenith","get zenith angle from platform",false); + Optionpk<string> algorithm_opt("a", "algorithm", "optimization algorithm (see http://ab-initio.mit.edu/wiki/index.php/NLopt_Algorithms)","LN_COBYLA"); Optionpk<short> verbose_opt("v", "verbose", "verbose mode when > 0", 0); version_opt.retrieveOption(argc,argv); @@ -152,6 +154,7 @@ int main(int argc, char *argv[]) aplrad_opt.retrieveOption(argc,argv); bcrad_opt.retrieveOption(argc,argv); getzenith_opt.retrieveOption(argc,argv); + algorithm_opt.retrieveOption(argc,argv); verbose_opt.retrieveOption(argc,argv); if(version_opt[0]){ @@ -570,7 +573,7 @@ int main(int argc, char *argv[]) init_opt.push_back(init_opt[0]); //todo: make nlopt::LN_COBYLA as a command line option //nlopt::opt opt(nlopt::LN_COBYLA,4*input_opt.size());//k,e,a,haze - nlopt::opt optimizer(nlopt::LN_SBPLX,3);//bore sight angles + nlopt::opt optimizer=OptFactory::getOptimizer(algorithm_opt[0],3);//bore sight angles optimizer.set_min_objective(objFunction, &theDataModel); -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/pktools.git _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel