Ejemplo n.º 1
0
/**
 * \fn void trainBdd(std::string bddName, int dim, int maxPts, int k)
 * \brief Trains the specified BDD.
 *
 * \param[in] bddName The name of the BDD.
 * \param[in] dim The dimension of the STIPs.
 * \param[in] maxPts The maximum number of points we want to compute.
 * \param[in] k The number of cluster (means).
 */
void im_train_bdd(std::string bddName, int k){
  std::string path2bdd("bdd/" + bddName);
  std::string KMeansFile(path2bdd + "/" + "training.means");
  
  //std::cout << path2bdd << std::endl;
  //int desc = getDescID(path2bdd);
  //int dim = getDim(desc);
  // Loading the DenseTrack settings
  
  // Loading BDD
  IMbdd bdd(bddName,path2bdd);
  bdd.load_bdd_configuration(path2bdd.c_str(),"imconfig.xml");
  
  // In im_train_bdd all the people are the training people !!
  std::vector<std::string> trainingPeople = bdd.getPeople();
  
  // Loading activities
  std::vector<std::string> activities = bdd.getActivities();
  int nrActivities = activities.size();
  int labels[nrActivities];
  int index = 0;
  for(std::vector<std::string>::iterator activity = activities.begin();
      activity != activities.end();
      ++activity){
    labels[index] = index + 1;
    index++;
  }
  if(k%nrActivities != 0){
    std::cerr << "k is not divisible by nrActivities !" << std::endl;
    exit(EXIT_FAILURE);
  }
  
  // Saving KMeans settings
  bdd.changeKMSettings("specifical",
		       k,
		       "training.means");
  im_create_specifics_training_means(bdd, trainingPeople);
  
  // SVM train
  MatrixC trainMC = MatrixC(nrActivities,labels);
  std::vector<std::string> testingPeople;
  MatrixC testMC = MatrixC(nrActivities, labels);
  double crossValidationAccuracy = im_svm_train(bdd,
						trainingPeople, trainMC,
						testingPeople, testMC);
  trainMC.calculFrequence();
  trainMC.exportMC(path2bdd,"training_confusion_matrix.txt");
  bdd.write_bdd_configuration(path2bdd.c_str(),"imconfig.xml");
  
  std::cout << "Resume of the training phase:" << std::endl;
  bdd.show_bdd_configuration();
  std::cout << "Train recognition rate:" << std::endl;
  std::cout << "\t cross validation accuracy=" << crossValidationAccuracy << std::endl;
  std::cout << "\t tau_train=" << trainMC.recognitionRate*100 << "%" << std::endl;
  std::cout << "\t total number of train BOWs=" << trainMC.nrTest << std::endl;
}
Ejemplo n.º 2
0
Archivo: main.cpp Proyecto: utzms/siwir
//claimed function for calling the program, only due to the assignment tasks
static void matrixmult(const int M, const int N, const int K, double * A, const int lda, double * B, int ldb, double * C, int ldc)
{
		
	Matrix MatrixA(M,K,A,lda);
	Matrix MatrixB(K,N,B,ldb);
	Matrix MatrixC(M,N);
	
	//for matrices with dimensions to the power of two strassen is used  		
	if(Matrix::checkIfPowerOfTwo(M,K))
	{	
		if(Matrix::checkIfPowerOfTwo(K,N))
		{
			Matrix::matmult(MatrixA,MatrixB,MatrixC);
		}
	}
	else
	{
	//otherwise native matrix multiplication
		MatrixC = MatrixA*MatrixB;
	}
	for(size_t i = 0; i< MatrixC.getMdim() ; ++i)
	{	
		for(size_t j = 0; j<MatrixC.getNdim() ; ++j)
		{
			C[i*ldc + j] = MatrixC.getValueAt(i,j);
		}
	}
}
int main()
{
  long start_time; //Used for execution time (Start of execution)
  long stop_time; //Used for execution end time (End of execution)

  Matrix MatrixA("DataMatrixA.txt");//Input File data goes to Matrix A
  Matrix MatrixB("DataMatrixB.txt");// Input File data goes to Matrix B
  Matrix MatrixC(MatrixA.getRow(),MatrixB.getColumn());//Matrix C result gets rows of A and columns of B
  
  start_time=clock();//Starts timer 
  HorizontalMultiply(MatrixA, MatrixB,MatrixC);//Computing Multiplication
  stop_time=clock();//End timer
  
  double Horizontal_Time= (stop_time-start_time)/(double)(CLOCKS_PER_SEC); //Execution time
  
  MatrixC.print(); //Print result of Matrix C
  
  cout << endl;
  cout << "________________________________________________________________ " << endl;
  cout << "Divide Horizontal Time: (Core Count in System): " << Horizontal_Time << " seconds" << endl;
  cout << "________________________________________________________________ " << endl;

  long start_time2; //Timer for twice the core count
  long stop_time2;//End timer for twice the core count
  
  Matrix MatrixC2(MatrixA.getRow(),MatrixB.getColumn()); //MatrixC2 gets A rows and B cols
  start_time2= clock();//Start timer for function for twice core count
  HorizontalMultiply2(MatrixA, MatrixB, MatrixC2);//Twice core count multipling
  stop_time2 = clock();//End timer for function for twice core count
  
  double Horizontal_Time2 = (stop_time2-start_time2)/(double)(CLOCKS_PER_SEC); //Total execution time of twice core count Multiply
  
  MatrixC2.print();//Print Matrix C 
  
  cout << endl;
  cout << "_______________________________________________________________"<< endl;
  cout << "Divide Horizontal Time: (Twice amount of Cores in a system): " << Horizontal_Time2 << " seconds " << endl;
  cout << "_______________________________________________________________" << endl;
  
  return 0;
}
Ejemplo n.º 4
0
void im_leave_one_out(std::string bddName,
		      int k){
  std::string path2bdd("bdd/" + bddName);
  std::string KMeansFile(path2bdd + "/" + "training.means");
  
  //  std::cout << path2bdd << std::endl;
  // Loading BDD
  IMbdd bdd(bddName,path2bdd);
  bdd.load_bdd_configuration(path2bdd.c_str(),"imconfig.xml");
  
  // Saving KMeans settings
  bdd.changeKMSettings("specifical", k, "training.means");
  
  // Loading feature points settings
  std::string descriptor = bdd.getDescriptor();
  
  // Loading activities
  std::vector<std::string> activities = bdd.getActivities();
  int nrActivities = activities.size();
  int labels[nrActivities];
  int index = 0;
  for(std::vector<std::string>::iterator activity = activities.begin();
      activity != activities.end();
      ++activity){
    labels[index] = index + 1;
    index++;
  }
  if(k%nrActivities != 0){
    std::cerr << "k is not divisible by nrActivities !" << std::endl;
    exit(EXIT_FAILURE);
  }
  
  MatrixC trainMC = MatrixC(nrActivities,labels);
  MatrixC testMC = MatrixC(nrActivities,labels);
  double crossValidationAccuracy = 0;
  std::vector<std::string> people = bdd.getPeople();
  // Leave One Person Out 
  for(std::vector<std::string>::iterator person = people.begin() ;
      person != people.end();
      ++person){
    std::vector<std::string> testingPeople;
    std::vector<std::string> trainingPeople;
    testingPeople.push_back(*person);
    // Filling trainingPeople
    for(std::vector<std::string>::iterator trainingPerson = people.begin() ;
	trainingPerson != people.end();
	++trainingPerson){
      if((*trainingPerson).compare(*person) != 0)
	trainingPeople.push_back(*trainingPerson);
    }
    std::cout << "Testing" << *person << std::endl;
    im_create_specifics_training_means(bdd, trainingPeople);
    crossValidationAccuracy += im_svm_train(bdd,
					    trainingPeople, trainMC,
					    testingPeople, testMC);
    std::cout << "Test " << *person << " ok!" << std::endl;
  }
  crossValidationAccuracy /= people.size();
  
  trainMC.calculFrequence();
  trainMC.exportMC(path2bdd,"training_confusion_matrix.txt");
  trainMC.output();
  testMC.calculFrequence();
  testMC.exportMC(path2bdd,"testing_confusion_matrix.txt");
  testMC.output();
  
  std::cout << "#######################################" << std::endl;
  std::cout << "######## RESUME OF THE TEST ###########" << std::endl;
  std::cout << "#######################################" << std::endl;
  std::cout << "Number of people: " << people.size() << std::endl;
  std::cout << "Descriptor ID: " << descriptor << std::endl;
  std::cout << "Number of means: " << k << std::endl;
  std::cout << "Train recognition rate:" << std::endl;
  std::cout << "\t cross validation accuracy=" << crossValidationAccuracy << std::endl;
  std::cout << "\t tau_train=" << trainMC.recognitionRate*100 << "%" << std::endl;
  std::cout << "\t total number of train BOWs=" << trainMC.nrTest << std::endl;
  std::cout << "Test recognition rate:" << std::endl;
  std::cout << "\t tau_test=" << testMC.recognitionRate*100 << "%" << std::endl;
  std::cout << "\t total number of test BOWs=" << testMC.nrTest << std::endl;
}