def parallel_testing(test_image, test_label, codebook, svm, scaler, pca): gray = io.load_grayscale_image(test_image) kpt, des = feature_extraction.dense(gray) labels = np.array([test_label] * des.shape[0]) ind = np.array([0] * des.shape[0]) vis_word, _ = bovw.visual_words(des, labels, ind, codebook) prediction_prob = classification.predict_svm(vis_word, svm, std_scaler=scaler, pca=pca) predicted_class = lin_svm.classes_[np.argmax(prediction_prob)] return predicted_class == test_label, predicted_class, np.ravel(prediction_prob)
def parallel_testing(test_image, test_label, codebook, svm, scaler, pca): gray = io.load_grayscale_image(test_image) kpt, des = feature_extraction.dense(gray) kpt_pos = np.array([kpt[i].pt for i in range(0, len(kpt))], dtype=np.float64) labels = np.array([test_label] * des.shape[0]) ind = np.array([0] * des.shape[0]) vis_word, _ = bovw.visual_words(des, labels, ind, codebook, spatial_pyramid=True) prediction_prob = classification.predict_svm(vis_word, svm, std_scaler=scaler, pca=pca) predicted_class = svm.classes_[np.argmax(prediction_prob)] return predicted_class == test_label, predicted_class, np.ravel(prediction_prob)
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')
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 test_images_filenames, test_labels = io.load_test_set() print('Loaded {} test images.'.format(len(test_images_filenames))) # Feature extraction with sift, prediction with SVM and aggregation to obtain final class print('Predicting test data...')
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)) temp = time.time() # Read the test set test_images_filenames, test_labels = io.load_test_set() print('Loaded {} test images.'.format(len(test_images_filenames)))
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, normalization='l1') 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=1.396, dim_reduction=None, model_name='svm_pyramid_dense_l1') print('Elapsed time: {:.2f} s'.format(time.time() - temp))
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() # Read the test set test_images_filenames, test_labels = io.load_test_set() print('Loaded {} test images.'.format(len(test_images_filenames))) # Feature extraction with sift, prediction with SVM and aggregation to obtain final class print('Predicting test data...')