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()
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'))
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'))
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'))