示例#1
0
def train_features():

    datasets = load_pascal_set('train', False, 'aeroplane', 'bicycle', 'car', 'bird', 'boat', 'person')
    train_set_x, train_set_y, train_images = datasets[0]
    val_set_x, val_set_y, val_images = datasets[1]

    all_descriptors = None
    print('extract descriptors with SIFT')
    desc_by_img = []
    for img in train_set_x:

        gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

        sift = cv2.SIFT()
        kp, des = sift.detectAndCompute(gray,None)

        desc_by_img.append(des)

        if all_descriptors is None:
            all_descriptors = des
        else:
            all_descriptors = np.concatenate([all_descriptors, des])

    print('Find vocabulary with K-means clustering')
    #pickle.dump(all_descriptors, open('all_descriptors.npy', 'wb'))
    #pickle.dump(desc_by_img, open('desc_by_img.npy', 'wb'))
    for nb_cluster in [8]:

        model = KMeans(n_clusters=nb_cluster)
        model.fit(all_descriptors)

        print('Compute histos')
        features = []
        for descriptors, img_name, label in zip(desc_by_img, train_images, train_set_y):

            feats = model.predict(descriptors)
            histo = np.bincount(feats, minlength=nb_cluster)
            feat_name_and_label = {}
            feat_name_and_label['features'] = histo
            feat_name_and_label['name'] = img_name
            feat_name_and_label['label'] = label
            features.append(feat_name_and_label)

            f_features = open('output/pascal/'+str(nb_cluster)+'-cluster/train_features.npy', 'wb')
            pickle.dump(features, f_features)
            f_features.close()
            f_model = open('output/pascal/'+str(nb_cluster)+'-cluster/train_kmeans_model.npy', 'wb')
            pickle.dump(model, f_model)
            f_model.close()
示例#2
0
文件: algos.py 项目: leovetter/cbir
def bag_of_words():

    datasets = load_pascal_set(False, 'aeroplane', 'bicycle', 'car', 'bird', 'boat', 'person')
    train_set_x, train_set_y, train_images = datasets[0]
    val_set_x, val_set_y, val_images = datasets[1]

    all_descriptors = None
    print('extract descriptors with SIFT')
    desc_by_img = []
    for img in train_set_x:

        gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

        sift = cv2.SIFT()
        kp, des = sift.detectAndCompute(gray,None)

        desc_by_img.append(des)

        if all_descriptors is None:
            all_descriptors = des
        else:
            all_descriptors = np.concatenate([all_descriptors, des])

    print('Find vocabulary with K-means clustering')

    model = KMeans(n_clusters=settings.NB_CLUSTER)
    model.fit(all_descriptors)

    print('Compute histos')
    features = []
    for descriptors, img_name in zip(desc_by_img, train_images):

        feats = model.predict(descriptors)
        print(feats)
        histo = np.bincount(feats, minlength=settings.NB_CLUSTER)
        print(histo)
        sys.exit('')
        feat_and_name = {}
        feat_and_name['features'] = histo
        feat_and_name['name'] = img_name
        features.append(feat_and_name)

        pickle.dump(features, open('pascal_train_features.npy', 'wb'))
        pickle.dump(model, open('pascal_train_model.npy', 'wb'))
示例#3
0
def val_bag_of_words_prediction():

    datasets = load_pascal_set('train', False, 'aeroplane', 'bicycle', 'car', 'bird', 'boat', 'person')
    _, val_set_y, _ = datasets[1]

    accuracies = []
    nb_clusters = []
    for nb_cluster in [32]:

        val_features = pickle.load(open('output/pascal/'+str(nb_cluster)+'-cluster/val_features.npy', 'rb'))
        clf = pickle.load(open('output/pascal/'+str(nb_cluster)+'-cluster/train_svm_classifier.npy', 'rb'))

        y_pred = clf.predict(val_features)
        accuracy = (y_pred == val_set_y).sum()/len(y_pred)
        print("Accuracy of the model for nb clusters of %f is : %f" % (nb_cluster, accuracy))
        accuracies.append(accuracy)
        nb_clusters.append(nb_cluster)
        pickle.dump(accuracies, open('output/pascal/accuracies.npy', 'wb'))
        pickle.dump(nb_clusters, open('output/pascal/nb_clusters.npy', 'wb'))
示例#4
0
def pascal_val_features(nb_cluster):

    datasets = load_pascal_set('train', False, 'aeroplane', 'bicycle', 'car', 'bird', 'boat', 'person')
    val_set_x, val_set_y, val_images = datasets[1]

    model = pickle.load(open('output/pascal/'+str(nb_cluster)+'-cluster/train_kmeans_model.npy', 'rb'))

    val_features = []
    for img in val_set_x:
        gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

        sift = cv2.SIFT()
        kp, des = sift.detectAndCompute(gray,None)

        features = model.predict(des)
        histo = np.bincount(features, minlength=nb_cluster)
        val_features.append(histo)

    pickle.dump(val_features, open('output/pascal/'+str(nb_cluster)+'-cluster/val_features.npy', 'wb'))