Bag of Words obtiene las características de una imagen, es decir, las formas, texturas, etc., como palabras [1]. Así, se describe la imagen en función de la frecuencia de cada una de estas palabras o características.
En este notebook entrenaremos un clasificador con la técnica Bag of Words. Lo cual se compone, brevemente explicado, de los siguientes pasos:
In [9]:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
In [ ]:
path = '../rsc/obj/'
mini_kmeans_path = path + 'mini_kmeans.sav'
mini_kmeans = pickle.load(open(mini_kmeans_path, 'rb'))
In [ ]:
trainInstances = []
for imgFeatures in train_features:
# extrae pertenencias a cluster
pertenencias = mini_kmeans.predict(imgFeatures)
# extrae histograma
bovw_representation, _ = np.histogram(pertenencias, bins=500, range=(0,499))
# añade al conjunto de entrenamiento final
trainInstances.append(bovw_representation)
trainInstances = np.array(trainInstances)
In [ ]:
from sklearn import svm
classifier = svm.SVC(kernel='linear', C=0.01)
y_pred = classifier.fit(trainInstances, y_train)
In [ ]:
import pickle # Módulo para serializar
path = '../rsc/obj/'
svm_BoW_path = path + 'svm_BoW.sav'
pickle.dump(classifier, open(svm_BoW_path, 'wb'))