9 #include <utils/logger.hpp>
15 #if ENABLE_MULTITHREADING && ENABLE_OPENMP
18 #if ENABLE_MULTITHREADING && ENABLE_MPI
22 _INITIALIZE_EASYLOGGINGPP
25 #if ENABLE_FASTCLUSTER && ENABLE_MPI
26 int rank = MPI::COMM_WORLD.Get_rank();
35 std::shared_ptr<BagOfWords::TrainParams> train_params = std::make_shared<BagOfWords::TrainParams>();
36 train_params->numClusters = num_clusters;
37 train_params->numFeatures = num_features;
39 std::stringstream vocab_output_file;
40 vocab_output_file << dataset.
location() <<
"/vocabulary/" << train_params->numClusters <<
".vocab";
43 bow.
load(vocab_output_file.str());
45 const std::vector< std::shared_ptr<const Image> > &random_images = dataset.
random_images(num_images);
46 bow.
train(dataset, train_params, random_images);
47 #if ENABLE_FASTCLUSTER && ENABLE_MPI
50 bow.
save(vocab_output_file.str());
51 #if ENABLE_FASTCLUSTER && ENABLE_MPI
56 #if ENABLE_MULTITHREADING && ENABLE_MPI
60 const std::vector< std::shared_ptr<const Image> > &all_images = dataset.
all_images();
62 #if ENABLE_MULTITHREADING && ENABLE_OPENMP
63 uint32_t num_threads = omp_get_max_threads();
64 std::vector< cv::Ptr<cv::DescriptorMatcher> > matchers;
65 for(uint32_t i=0; i<num_threads; i++) {
68 #pragma omp parallel for schedule(dynamic)
72 for (int64_t i = 0; i < (int64_t)all_images.size(); i++) {
74 #if ENABLE_MULTITHREADING && ENABLE_OPENMP
75 const cv::Ptr<cv::DescriptorMatcher> &matcher = matchers[omp_get_thread_num()];
77 const std::string &sift_descriptor_location = dataset.
location(all_images[i]->feature_path(
"descriptors"));
78 const std::string &bow_descriptor_location = dataset.
location(all_images[i]->feature_path(
"bow_descriptors"));
80 cv::Mat descriptors, bow_descriptors, descriptorsf;
83 descriptors.convertTo(descriptorsf, CV_32FC1);
87 const std::vector< std::pair<uint32_t, float> > &bow_descriptors_sparse =
numerics::sparsify(bow_descriptors);
89 LINFO <<
"Wrote " << bow_descriptor_location;
91 #if ENABLE_MULTITHREADING && ENABLE_MPI
96 int main(
int argc,
char *argv[]) {
98 #if ENABLE_MULTITHREADING && ENABLE_MPI
99 MPI::Init(argc, argv);
112 #if ENABLE_MULTITHREADING && ENABLE_MPI