def train(): start = time.time() # Read the training set train_images_filenames, train_labels = io.load_training_set() print('Loaded {} train images.'.format(len(train_images_filenames))) # Feature extraction with sift print('Obtaining sift features...') try: D, L, I = io.load_object('train_sift_descriptors', ignore=True), \ io.load_object('train_sift_labels', ignore=True), \ io.load_object('train_sift_indices', ignore=True) except IOError: D, L, I, _ = feature_extraction.parallel_sift(train_images_filenames, train_labels, num_samples_class=-1, n_jobs=N_JOBS) io.save_object(D, 'train_sift_descriptors', ignore=True) io.save_object(L, 'train_sift_labels', ignore=True) io.save_object(I, 'train_sift_indices', ignore=True) print('Time spend: {:.2f} s'.format(time.time() - start)) # Start hyperparameters optimization print('\nSTARTING HYPERPARAMETER OPTIMIZATION FOR RBF SVM') codebook_k_values = [2**i for i in range(7, 16)] params_distribution = { 'C': np.logspace(-4, 1, 10**3), 'gamma': np.logspace(-3, 1, 10**3) } n_iter = 100 best_accuracy = 0 best_params = {} cv_results = {} # Iterate codebook values for k in codebook_k_values: temp = time.time() print('Creating codebook with {} visual words'.format(k)) D = D.astype(np.uint32) codebook = bovw.create_codebook(D, codebook_name='codebook_{}'.format(k)) print('Time spend: {:.2f} s'.format(time.time() - temp)) temp = time.time() print('Getting visual words from training set...') vis_words, labels = bovw.visual_words(D, L, I, codebook, normalization='l1') print('Time spend: {:.2f} s'.format(time.time() - temp)) temp = time.time() print('Scaling features...') std_scaler = StandardScaler().fit(vis_words) vis_words = std_scaler.transform(vis_words) print('Time spend: {:.2f} s'.format(time.time() - temp)) temp = time.time() print('Optimizing SVM hyperparameters...') svm = SVC(kernel='rbf') random_search = RandomizedSearchCV(svm, params_distribution, n_iter=n_iter, scoring='accuracy', n_jobs=N_JOBS, refit=False, verbose=1, cv=4) random_search.fit(vis_words, labels) print('Time spend: {:.2f} s'.format(time.time() - temp)) # Convert MaskedArrays to ndarrays to avoid unpickling bugs results = random_search.cv_results_ results['param_C'] = results['param_C'].data results['param_gamma'] = results['param_gamma'].data # Appending all parameter-scores combinations cv_results.update({k: results}) io.save_object(cv_results, 'rbf_svm_optimization_norml1') # Obtaining the parameters which yielded the best accuracy if random_search.best_score_ > best_accuracy: best_accuracy = random_search.best_score_ best_params = random_search.best_params_ best_params.update({'k': k}) print('-------------------------------\n') print('\nBEST PARAMS') print('k={}, C={} , gamma={} --> accuracy: {:.3f}'.format( best_params['k'], best_params['C'], best_params['gamma'], best_accuracy)) print('Saving all cross-validation values...') io.save_object(cv_results, 'rbf_svm_optimization_norml1') print('Done')
try: D, L, I = io.load_object('train_dense_descriptors', ignore=True), \ io.load_object('train_dense_labels', ignore=True), \ io.load_object('train_dense_indices', ignore=True) except IOError: D, L, I, _ = feature_extraction.parallel_dense(train_images_filenames, train_labels, num_samples_class=-1, n_jobs=N_JOBS) io.save_object(D, 'train_dense_descriptors', ignore=True) io.save_object(L, 'train_dense_labels', ignore=True) io.save_object(I, 'train_dense_indices', ignore=True) print('Elapsed time: {:.2f} s'.format(time.time() - start)) temp = time.time() print('Creating codebook with {} visual words'.format(K)) codebook = bovw.create_codebook(D, codebook_name='dense_codebook') print('Elapsed time: {:.2f} s'.format(time.time() - temp)) temp = time.time() print('Getting visual words from training set...') vis_words, labels = bovw.visual_words(D, L, I, codebook) print('Elapsed time: {:.2f} s'.format(time.time() - temp)) temp = time.time() # Train Linear SVM classifier print('Training the SVM classifier...') lin_svm, std_scaler, pca = classification.train_rbf_svm(vis_words, labels, C=7.76, gamma=0.0013808, dim_reduction=None) print('Elapsed time: {:.2f} s'.format(time.time() - temp)) temp = time.time() # Read the test set
io.load_object('train_dense_keypoints', ignore=True) except IOError: print('error') D, L, I, Kp = feature_extraction.parallel_dense(train_images_filenames, train_labels, num_samples_class=-1, n_jobs=N_JOBS) io.save_object(D, 'train_dense_descriptors', ignore=True) io.save_object(L, 'train_dense_labels', ignore=True) io.save_object(I, 'train_dense_indices', ignore=True) Kp_pos = np.array([Kp[i].pt for i in range(0, len(Kp))], dtype=np.float64) io.save_object(Kp_pos, 'train_dense_keypoints', ignore=True) print('Elapsed time: {:.2f} s'.format(time.time() - start)) temp = time.time() print('Creating codebook with {} visual words'.format(K)) codebook = bovw.create_codebook(D, codebook_name='default_codebook') print('Elapsed time: {:.2f} s'.format(time.time() - temp)) temp = time.time() print('Getting visual words from training set...') vis_words, labels = bovw.visual_words(D, L, I, codebook, spatial_pyramid=True) print('Elapsed time: {:.2f} s'.format(time.time() - temp)) temp = time.time() # Train Linear SVM classifier print('Training the SVM classifier...') pyramid_svm, std_scaler, pca = classification.train_pyramid_svm(vis_words, labels, C=0.0004, dim_reduction=None, model_name='svm_pyramid_dense' ) print('Elapsed time: {:.2f} s'.format(time.time() - temp))
try: D, L, I = io.load_object('train_dense_descriptors', ignore=True), \ io.load_object('train_dense_labels', ignore=True), \ io.load_object('train_dense_indices', ignore=True) except IOError: D, L, I, _ = feature_extraction.parallel_dense(train_images_filenames, train_labels, num_samples_class=-1, n_jobs=N_JOBS) io.save_object(D, 'train_dense_descriptors', ignore=True) io.save_object(L, 'train_dense_labels', ignore=True) io.save_object(I, 'train_dense_indices', ignore=True) print('Elapsed time: {:.2f} s'.format(time.time() - start)) temp = time.time() print('Creating codebook with {} visual words'.format(K)) codebook = bovw.create_codebook(D, codebook_name='codebook_256_dense') print('Elapsed time: {:.2f} s'.format(time.time() - temp)) temp = time.time() print('Getting visual words from training set...') vis_words, labels = bovw.visual_words(D, L, I, codebook) print('Elapsed time: {:.2f} s'.format(time.time() - temp)) temp = time.time() # Train Linear SVM classifier print('Training the SVM classifier...') lin_svm, std_scaler, pca = classification.train_rbf_svm(vis_words, labels, C=1.65, gamma=0.005926, dim_reduction=None) print('Elapsed time: {:.2f} s'.format(time.time() - temp)) temp = time.time() # Read the test set
num_samples_class=-1, n_jobs=settings.n_jobs) io.save_object(D, 'train_densee_descriptors', ignore=True) io.save_object(L, 'train_densee_labels', ignore=True) io.save_object(I, 'train_densee_indices', ignore=True) print('Elapsed time: {:.2f} s'.format(time.time() - start)) temp = time.time() print('Applying PCA...') pca, D = feature_extraction.pca(D) print('Elapsed time: {:.2f} s'.format(time.time() - temp)) temp = time.time() print('Creating codebook with {} visual words'.format(settings.codebook_size)) #gmm = bovw.create_gmm(D, codebook_name='gmm_{}_dense'.format(settings.codebook_size)) codebook = bovw.create_codebook(D) print('Elapsed time: {:.2f} s'.format(time.time() - temp)) temp = time.time() print('Getting visual words from training set...') #fisher, labels = bovw.fisher_vectors(D, L, I, gmm) pyramid, labels = bovw.visual_words(D, L, I, codebook, spatial_pyramid=True) print('Elapsed time: {:.2f} s'.format(time.time() - temp)) temp = time.time() # Train Linear SVM classifier print('Training the SVM classifier...') lin_svm, std_scaler, _ = classification.train_pyramid_svm(pyramid, train_labels, C=0.0009, dim_reduction=None) print('Elapsed time: {:.2f} s'.format(time.time() - temp)) temp = time.time()
D, L, I = io.load_object('train_dense_descriptors', ignore=True), \ io.load_object('train_dense_labels', ignore=True), \ io.load_object('train_dense_indices', ignore=True) except IOError: D, L, I, _ = feature_extraction.parallel_dense(train_images_filenames, train_labels, num_samples_class=-1, n_jobs=N_JOBS) io.save_object(D, 'train_dense_descriptors', ignore=True) io.save_object(L, 'train_dense_labels', ignore=True) io.save_object(I, 'train_dense_indices', ignore=True) print('Elapsed time: {:.2f} s'.format(time.time() - start)) temp = time.time() print('Creating codebook with {} visual words'.format(K)) codebook = bovw.create_codebook(D, codebook_name='codebook_{}_dense'.format(K)) print('Elapsed time: {:.2f} s'.format(time.time() - temp)) temp = time.time() print('Getting visual words from training set...') vis_words, labels = bovw.visual_words(D, L, I, codebook, normalization=None) print('Elapsed time: {:.2f} s'.format(time.time() - temp)) temp = time.time() # Train Linear SVM classifier print('Training the SVM classifier...') svm, std_scaler, pca = classification.train_intersection_svm(vis_words, labels, C=0.0023, dim_reduction=None) print('Elapsed time: {:.2f} s'.format(time.time() - temp)) temp = time.time()