Flickr image classification - Damiano Cancemi · Flickr API Con oltre 5 miliardi di foto la...

9
Flickr image classification Relazione progetto Social Media Management Università degli studi di Catania Dipartimento di Matematica e Informatica CANCEMI DAMIANO - W82000075 1

Transcript of Flickr image classification - Damiano Cancemi · Flickr API Con oltre 5 miliardi di foto la...

Page 1: Flickr image classification - Damiano Cancemi · Flickr API Con oltre 5 miliardi di foto la community di Flickr produce un’incredibile varietà di dati. Flickr mette a disposizione

Flickr image classification Relazione progetto Social Media ManagementUniversità degli studi di CataniaDipartimento di Matematica e Informatica

CANCEMI DAMIANO - W82000075 �1

Page 2: Flickr image classification - Damiano Cancemi · Flickr API Con oltre 5 miliardi di foto la community di Flickr produce un’incredibile varietà di dati. Flickr mette a disposizione

IntroduzioneQuesto progetto mira, tramite tecniche di machine learning, alla creazione di un

modello per la classificazione di immagini, prelevate tramite Flickr API.Sono stati effettuati diversi tipi di classificazioni, su un dataset contenenti immagini

appartenenti alla categoria “bird” (volatili) e “mammal” (mammiferi).Lo scopo è quello di allenare un modello che classifichi immagini come “animale

volatile” o “non volatile”.Vengono comparati i diversi classificatori con i relativi valori di “accuracy_score”

che ne misurano l’efficenza.In particolare sono stati implementati e comparati i seguenti classificatori: 1-nn, 3-

nn, 5-nn, logistic regression (one-vs-rest), logistic regression (multinomial), gaussian naive bayes e multinomial naive bayes.

Per comodità le feature calcolate sono salvati su file per mediante cPickle.

Flickr APICon oltre 5 miliardi di foto la community di Flickr produce un’incredibile varietà di

dati. Flickr mette a disposizione gratuitamente a tutti i membri e sviluppatori delle API che rappresentano la modalità di accesso a quei dati anche al di fuori della propria piattaforma.

In questa sezione verrà in particolare descritta la sezione “flickr.photos.search” che permette appunto di ricercare ed ottenere foto (secondo alcuni criteri di ricerca) dal social network in questione.

Ecco alcuni parametri principali da poter utilizzare:

api_key L’api_key della nostra applicazione. obbligatorio

tags Una lista di tags separati da virgola. Verranno restituite le foto che contengono uno o più tags della lista. Se si vogliono escludere le immagini che non contengono un determinato tag, è possibile farlo aggiungendo come prefisso di un tag il carattere “-“.

facoltativo

tag_mode Si può scegliere “any” per filtrare le immagini contenenti almeno uno dei tags specificati (OR), oppure “all” (AND).

facoltativo

CANCEMI DAMIANO - W82000075 �2

Page 3: Flickr image classification - Damiano Cancemi · Flickr API Con oltre 5 miliardi di foto la community di Flickr produce un’incredibile varietà di dati. Flickr mette a disposizione

Per utilizzare le API di Flickr, c’è bisogno innanzitutto di creare una propria “applicazione” per poter ottenere una chiave. La chiave API è il componente fondamentale della nostra applicazione web, senza di essa non potremmo usare le API.

In questo progetto è stata utilizzata la libreria “flickrapi” di Python che facilita appunto il collegamento con le API.

Per prima cosa dobbiamo quindi autenticarci, fornendo all’applicazione l’api_key e l’api_secret create:

text Saranno ritornate le immagini che contengono il valore specificato nel titolo, nella descrizione o nei tags. Si può escludere un singolo termine aggiungendo come prefisso il carattere “-“.

facoltativo

sort Permette di stabilire l’ordine dei risultati. I valori possibili sono: date-posted-asc, date-posted-desc, date-taken-asc, date-taken-desc, interestingness-desc, interestingness-asc, e relevance.Di default viene utilizzato il valore date-postesd-desc

facoltativo

has_geo Verranno restituite solamente le foto che sono state geotaggate, ovvero contenenti latitudine e longitudine. Possibili valori: “0” o “1”.

facoltativo

geo_context Valore numerico che ci permette di filtrare le foto scattate in ambienti interni o esterni:• 0: non definito• 1: ambienti interni• 2: ambienti esterni

facoltativo

per_page Numero di foto ritornate per pagina. Se l’argomento non è specificato, di default è 100. Il massimo valore permesso è 500.

facoltativo

page La pagina di risultati da ritornare. Se l’argomento non è specificato di default è 1.

facoltativo

1. flickr = flickrapi.FlickrAPI(api_key, api_secret)

CANCEMI DAMIANO - W82000075 �3

Page 4: Flickr image classification - Damiano Cancemi · Flickr API Con oltre 5 miliardi di foto la community di Flickr produce un’incredibile varietà di dati. Flickr mette a disposizione

Possiamo ora effettuare la chiamata per ricercare le immagini tramite la seguente chiamata esempio:

L’oggetto restituito sarà un JSON o un XML contenente tutte le informazioni utili per la costruzione dell’URL di origine della foto. A seguire un esempio di ritorno della chiamata:

L’URL finale da cui sarà possibile ottenere una singola immagine avrà la forma:

1. flickr.photos_search(2. page=1,3. sort=“relevance",4. per_page=500,5. text=“birds",6. tags=“animal"7. )

1. {2. "photos": {3. "page": 1,4. "pages": 39343,5. "perpage": 10,6. "total": "393427",7. "photo": [8. {9. "id": "15196149858",10. "owner": "107543316@N05",11. "secret": "6c266faf10",12. "server": "3855",13. "farm": 4,14. "title": "chipmunk",15. "ispublic": 1,16. "isfriend": 0,17. "isfamily": 018. },19. …20. ]21. },22. "stat": "ok"23. }

1. https://farm{farm-id}.staticflickr.com/{server-id}/{id}_{secret}.jpg

CANCEMI DAMIANO - W82000075 �4

Page 5: Flickr image classification - Damiano Cancemi · Flickr API Con oltre 5 miliardi di foto la community di Flickr produce un’incredibile varietà di dati. Flickr mette a disposizione

Creazione del datasetIl file flickrAPI.py si occupa della creazione dei dataset. Scelti gli hashtag da

ricercare (bird, mammal) si sono scaricate 2 pagine dei risultati delle API di Flickr.Per ogni hashtag ricercato sono state collezionate complessivamente 976 immagini,

per un totale di 1.952 immagini.Per evitare eccessivo rumore, è stato necessario impostare i seguenti parametri alle

richieste API:• tags=“animal”• text=“bird|mammal”• sort=“relevance”

È stata creata un’interfaccia web in PHP che permette di visualizzare, per ogni hashtag, le immagini estratte da Flickr.

CANCEMI DAMIANO - W82000075 �5

Page 6: Flickr image classification - Damiano Cancemi · Flickr API Con oltre 5 miliardi di foto la community di Flickr produce un’incredibile varietà di dati. Flickr mette a disposizione

AnalisiDopo aver caricato il dataset, questo viene partizionato in training_set (70%) per

l’”allenamento” del modello e test_set (30%) per la validazione dei risultati.

> ---- SUMMARY ---- Numero totale di immagini nel dataset: 1952 Dimensione training set: 1366 Dimensione test set: 586

Viene creato un modello di tipo Bag of Visual Words (BOVW) dal nostro training set. Il modello BOVW sarà un dizionario di "parole visuali" utili a descrivere le immagini. La strategia adottata consiste nell'apprendere il vocabolario dai dati in maniera non supervisionata.

Per prima cosa si estraggono delle feature locali (tramite daisy) da tutte le immagini del training set per poterne estrarre i descrittori;

> ---- EXTRACTING FEATURES ---- Image 6/1366 [0.11/151.41 sec] Image 10/1366 [0.09/125.48 sec] Image 16/1366 [0.09/120.40 sec] Image 19/1366 [0.09/122.06 sec] Image 22/1366 [0.09/127.16 sec] Image 23/1366 [0.11/142.06 sec] Image 26/1366 [0.13/179.63 sec]

In secondo luogo si mettono insieme tutte le feature estratte dal training set e si utilizza Kmeans per ottenere un numero predeterminato di "parole visuali". Fatto ciò possiamo normalizzare i dati.

Original data vs Normalized data

CANCEMI DAMIANO - W82000075 �6

Page 7: Flickr image classification - Damiano Cancemi · Flickr API Con oltre 5 miliardi di foto la community di Flickr produce un’incredibile varietà di dati. Flickr mette a disposizione

Sono stati effettuati differenti test in base al numero di cluster di KMeans (parole visuali) e al parametro step di daisy. I risultati mostrano, per ogni classificatore la relativa matrice di confusione, l’accuracy score, il mean squared error e il coefficiente di Spearman.

Impostando il valore di step=10 e il numero di cluster di KMeans=500 vengono estratti 487.623 descrittori di 200 dimensioni.

Logistic regression plot 2D e 3D (step=10, KMeans=500)

classifier accuracy score confusion matrix

1-NN 0.71843 [[213 80] [ 85 208]]

3-NN 0.726962 [[215 78] [ 82 211]]

5-NN 0.744027 [[212 81] [ 69 224]]

Logistic Regressor (one-vs-rest) 0.738908 [[222 71] [ 82 211]]

Logistic Regressor (multinomial) 0.749147 [[220 73] [ 74 219]]

Gaussian Naive Bayes 0.697952 [[170 123] [ 54 239]]

Multinomial Naive Bayes 0.715017 [[152 141] [ 26 267]]

CANCEMI DAMIANO - W82000075 �7

Page 8: Flickr image classification - Damiano Cancemi · Flickr API Con oltre 5 miliardi di foto la community di Flickr produce un’incredibile varietà di dati. Flickr mette a disposizione

Impostando il valore di step=4 e stesso numero di cluster vengono estratti 2.972.778 descrittori di 200 dimensioni.

Logistic regression plot 2D e 3D (step=4, KMeans=500)

classifier accuracy score confusion matrix

1-NN 0.699659 [[195 98] [ 78 215]]

3-NN 0.720137 [[200 93] [ 71 222]]

5-NN 0.761092 [[213 80] [ 60 233]]

Logistic Regressor (one-vs-rest) 0.738908 [[222 71] [ 82 211]]

Logistic Regressor (multinomial) 0.744027 [[220 73] [ 77 216]]

Gaussian Naive Bayes 0.694539 [[177 116] [ 63 230]]

Multinomial Naive Bayes 0.720137 [[160 133] [ 31 262]]

CANCEMI DAMIANO - W82000075 �8

Page 9: Flickr image classification - Damiano Cancemi · Flickr API Con oltre 5 miliardi di foto la community di Flickr produce un’incredibile varietà di dati. Flickr mette a disposizione

Impostando il valore di step=2 e stesso numero di cluster vengono estratti 11.754.147, descrittori di 200 dimensioni.

Logistic regression plot 2D e 3D (step=4, KMeans=500)

I migliori punteggi di accuracy score si ottengono per il classificatore 5-nn con step=4 e per il classificatore Multinomial Naive Bayes con step=2.

classifier accuracy score confusion matrix

1-NN 0.709898 [[208 85] [ 85 208]]

3-NN 0.75256 [[218 75] [ 70 223]]

5-NN 0.759386 [[211 82] [ 59 234]]

Logistic Regressor (one-vs-rest) 0.755973 [[223 70] [ 73 220]]

Logistic Regressor (multinomial) 0.759386 [[221 72] [ 69 224]]

Gaussian Naive Bayes 0.742321 [[190 103] [ 48 245]]

Multinomial Naive Bayes 0.769625 [[181 112] [ 23 270]]

CANCEMI DAMIANO - W82000075 �9