In [1]:
import graphlab
We will use a popular benchmark dataset in computer vision called CIFAR-10.
(We've reduced the data to just 4 categories = {'cat','bird','automobile','dog'}.)
This dataset is already split into a training set and test set. In this simple retrieval example, there is no notion of "testing", so we will only use the training data.
In [2]:
image_train = graphlab.SFrame('image_train_data/')
image_test = graphlab.SFrame('image_test_data/')
The two lines below allow us to compute deep features. This computation takes a little while, so we have already computed them and saved the results as a column in the data you loaded.
(Note that if you would like to compute such deep features and have a GPU on your machine, you should use the GPU enabled GraphLab Create, which will be significantly faster for this task.)
In [3]:
#deep_learning_model = graphlab.load_model('http://s3.amazonaws.com/GraphLab-Datasets/deeplearning/imagenet_model_iter45')
#image_train['deep_features'] = deep_learning_model.extract_features(image_train)
In [4]:
image_train.head()
Out[4]:
In [5]:
knn_model = graphlab.nearest_neighbors.create(image_train,features=['deep_features'],
label='id')
In [6]:
graphlab.canvas.set_target('ipynb')
cat = image_train[18:19]
cat['image'].show()
In [7]:
knn_model.query(cat)
Out[7]:
We are going to create a simple function to view the nearest neighbors to save typing:
In [8]:
def get_images_from_ids(query_result):
return image_train.filter_by(query_result['reference_label'],'id')
In [9]:
cat_neighbors = get_images_from_ids(knn_model.query(cat))
In [10]:
cat_neighbors['image'].show()
In [11]:
car = image_train[8:9]
car['image'].show()
In [12]:
get_images_from_ids(knn_model.query(car))['image'].show()
In [13]:
show_neighbors = lambda i: get_images_from_ids(knn_model.query(image_train[i:i+1]))['image'].show()
In [14]:
show_neighbors(8)
In [15]:
show_neighbors(26)
In [16]:
auto_data = image_train[image_train['label'] == 'automobile']
cat_data = image_train[image_train['label'] == 'cat']
dog_data = image_train[image_train['label'] == 'dog']
bird_data = image_train[image_train['label'] == 'bird']
In [18]:
auto_model = graphlab.nearest_neighbors.create(auto_data,features=['deep_features'],
label='id')
In [19]:
cat_model = graphlab.nearest_neighbors.create(cat_data,features=['deep_features'],
label='id')
In [20]:
dog_model = graphlab.nearest_neighbors.create(dog_data,features=['deep_features'],
label='id')
In [21]:
bird_model = graphlab.nearest_neighbors.create(bird_data,features=['deep_features'],
label='id')
In [22]:
cat = image_test[0:1]
In [23]:
cat_model_query = cat_model.query(cat)
cat_neighbors = get_images_from_ids(cat_model_query)
#cat_neighbors
cat_neighbors['image'].show()
In [24]:
cat_model_query['distance'].mean()
Out[24]:
In [25]:
dog_model_query = dog_model.query(cat)
In [26]:
dog_neighbor = get_images_from_ids(dog_model_query)
dog_neighbor['image'].show()
In [ ]:
dog_model_query['distance'].mean()
In [ ]:
image_test_auto = image_test[image_test['label'] == 'automobile']
image_test_cat = image_test[image_test['label'] == 'cat']
image_test_dog = image_test[image_test['label'] == 'dog']
image_test_bird = image_test[image_test['label'] == 'bird']
In [ ]:
dog_cat_neighbors = cat_model.query(image_test_dog, k=1)
dog_dog_neighbors = dog_model.query(image_test_dog, k=1)
dog_bird_neighbors = bird_model.query(image_test_dog, k=1)
dog_auto_neighbors = auto_model.query(image_test_dog, k=1)
In [ ]:
dog_distances = graphlab.SFrame()
dog_distances['dog-dog'] = dog_dog_neighbors['distance']
dog_distances['dog-cat'] = dog_cat_neighbors['distance']
dog_distances['dog-bird'] = dog_bird_neighbors['distance']
dog_distances['dog-auto'] = dog_auto_neighbors['distance']
In [ ]:
dog_distances
In [ ]:
def is_dog_correct(row):
for col_name in dog_distances.column_names():
if row['dog-dog'] > row[col_name]:
return 0
return 1
In [ ]:
num_correct = dog_distances.apply(is_dog_correct)
In [ ]:
num_correct.sum()
In [ ]:
cat_model_query
In [ ]:
cat_model.query(cat)
In [ ]: