Exemplo n.º 1
0
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')
Exemplo n.º 2
0
        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
Exemplo n.º 5
0
                                                       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()