Tecnologie utilizzate
Per il backend è stato utilizzato il linguaggio Python versione 3.7 e integrato con del codice Matlab per la gestione e correzione delle immagini. Come ambiente di sviluppo è stato scelto l’ambiente PyCharm, un IDE della famiglia Jetbrains.
Creazione del Dataset
Il dataset di partenza è un dataset di immagini raccolto dall’e-commerce cinese JD.com che contiene circa 10.000 istanze relative a prodotti di abbigliamento. Un file .csv raggruppa le informazioni relative a ciascuna foto in cui sono indicati nome, classe e gruppo. Dall’estrapolazione dei dati fatta attraverso uno script Python è emerso che fossero presenti circa 9690 classi e 359 gruppi, ognuno da etichettare manualmente. Un lavoro oneroso ma necessario per riportare nel file .csv le categorie dei prodotti (ad esempio “Giubbotto”, “Asciugacapelli”, “Frigorifero”).
Successivamente sono state estratte manualmente tre macro-categorie, tra tutte quelle trovate:
- Jacket: 3069 immagini.
- Pants: 8430 immagini.
- Shoes: 12917 immagini.
Per ognuna delle tre macro-categorie è stato necessario estrarre delle sottocategorie, ad esempio “Adult Jacket”, “Baby Jacket”, “Suit Jacket” e “Swetshirt” per la categoria “Jacket”.
Preparazione del dataset
Come rendere operativo il dataset appena creato? Occorre eseguire una serie di operazioni, vediamo quali.
Segmentazione
In questa fase l’immagine viene partizionata per estrapolare le regioni significative con lo scopo di rimuovere lo sfondo e mantenere le componenti significative per individuare nel caso specifico il capo di abbigliamento.
Il modello utilizzato è U-net, una rete convoluzionale sviluppata inizialmente per scopi biometrici ma che può essere riadattata per altri progetti. La metrica utilizzata per estrapolare le regioni è alpha score (α), e tanto più è grande questo valore tanto più spazio occupa l’elemento da estrarre. Le seguenti immagini chiariscono quanto appena scritto:
Estrazione delle feature
Nella seconda fase di estrazione delle feature viene utilizzata un’altra rete neurale convoluzionale, VGG16, basata e addestrata su un dataset di circa 14 milioni di immagini appartenenti a circa 1000 classi differenti. Le feature estratte verranno poi utilizzate da una rete neurale per la classificazione delle immagini, spiegato in seguito.
Data Augmentation
In questa fase si cerca di bilanciare il numero di immagini precedentemente categorizzate nella fase di creazione del dataset. Tramite operazioni di oversampling – generazione di immagini random – e undersampling – rimozione di immagini random – si va quindi a bilanciare il peso di ciascuna categoria e sottocategoria.
Istogrammi di colore
Vengono creati istogrammi di colore per ciascuna immagine, estrapolando la maschera di interesse e creando quindi il grafico dei colori presenti.
Estrazione delle texture
Questa operazione viene fatta utilizzando la matrice di co-occorrenza (GLCM Gray – Level Co-Occurrence Matrix) che è composta dai valori di grigio dei singoli pixel usati appunto per misurare diverse proprietà – texture appunto – dell’immagine quali il contrasto, la luminosità, l’omogeneità, l’energia e la correlazione.
Estrazione degli edges
In questa fase si estraggono le proprietà relative alla forma delle immagini. Nel caso specifico sono state fatte due estrazioni, una per i contorni orizzontali e l’altra per i contorni verticali.