testImageNetMedian.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /**
  2. * @file testImageNetMedian.cpp
  3. * @brief test our median prototype idea
  4. * @author Erik Rodner
  5. * @date 01/04/2012
  6. */
  7. #include <core/basics/Config.h>
  8. #ifdef NICE_USELIB_MATIO
  9. #include <core/matlabAccess/MatFileIO.h>
  10. //----------
  11. #include <vislearning/matlabAccessHighLevel/ImageNetData.h>
  12. //----------
  13. #include <gp-hik-core/FMKGPHyperparameterOptimization.h>
  14. #include <gp-hik-core/parameterizedFunctions/PFAbsExp.h>
  15. #include <gp-hik-core/tools.h>
  16. using namespace std;
  17. using namespace NICE;
  18. /**
  19. test the basic functionality of fast-hik hyperparameter optimization
  20. */
  21. int main (int argc, char **argv)
  22. {
  23. std::set_terminate(__gnu_cxx::__verbose_terminate_handler);
  24. Config conf ( argc, argv );
  25. // std::string root = "/home/dbv/bilder/imagenet/devkit-1.0/demo/";
  26. std::string root = "/users2/rodner/data/imagenet/devkit-1.0/demo/";
  27. ImageNetData imageNet ( root );
  28. cerr << "Reading ImageNet data files (takes some seconds)..." << endl;
  29. NICE::Vector y;
  30. sparse_t data;
  31. imageNet.getBatchData ( data, y, "train", "training" );
  32. uint n = y.size();
  33. map<int, int> examples;
  34. for ( uint i = 0 ; i < n; i++ )
  35. examples.insert( pair<int, int> (i, i) );
  36. y.resize(n);
  37. cerr << "Sorting features ..." << endl;
  38. FeatureMatrix fm ( data, examples );
  39. // count the number of examples of each class
  40. Vector elementCounts (y.Max()+1, 0.0);
  41. for ( uint i = 0 ; i < n; i++ )
  42. elementCounts[ y[i] ]++;
  43. // calculate the median for each class
  44. map<int, SparseVector> medians;
  45. for ( int dim = 0 ; dim < fm.get_d(); dim++ )
  46. {
  47. cerr << "Calculating the median values for dimension " << dim << endl;
  48. SparseVector classMedians;
  49. fm.getFeatureValues(dim).getClassMedians ( classMedians, y, elementCounts );
  50. for ( SparseVector::const_iterator i = classMedians.begin(); i != classMedians.end(); i++ )
  51. {
  52. int classno = i->first;
  53. double medianValue = i->second;
  54. medians[classno].insert ( pair<int, double> ( dim, medianValue ) );
  55. }
  56. }
  57. // ------------------------------ TESTING ------------------------------
  58. cerr << "Reading ImageNet test data files (takes some seconds)..." << endl;
  59. imageNet.preloadData ( "val", "testing" );
  60. for ( uint i = 0 ; i < imageNet.getNumPreloadedExamples(); i++ )
  61. {
  62. const SparseVector & svec = imageNet.getPreloadedExample ( i );
  63. set< pair<double, int> > scores;
  64. // calculate the distance to each of the classes !
  65. for ( map<int, SparseVector>::const_iterator k = medians.begin(); k != medians.end(); k++ )
  66. {
  67. const SparseVector & prototype = k->second;
  68. int classno = k->first;
  69. //double kval = prototype.minimumKernel ( svec );
  70. double kval = prototype.innerProduct ( svec );
  71. scores.insert ( pair<double, int> ( -1.0 * kval, classno ) );
  72. }
  73. cerr << "# groundtruth example: " << imageNet.getPreloadedLabel(i) << " " << i << " / " << imageNet.getNumPreloadedExamples() << endl;
  74. uint nBestClasses = std::min( 5, (int)scores.size() );
  75. uint kk = 0;
  76. for ( set< pair<double, int> >::const_iterator k = scores.begin(); k != scores.end() && kk < nBestClasses; k++, kk++ )
  77. cerr << k->second << " ";
  78. cerr << endl;
  79. }
  80. return 0;
  81. }
  82. #else
  83. int main (int argc, char **argv)
  84. {
  85. std::cerr << "MatIO library is missing in your system - this program will have no effect. " << std::endl;
  86. }
  87. #endif