A causa dei problemi e dei costi associati agli approcci di valutazione dietetica manuale, sono necessarie soluzioni automatizzate per facilitare e accelerare il lavoro e aumentarne la qualità. Oggi, le soluzioni automatizzate sono in grado di registrare l'assunzione alimentare di una persona in un modo molto più semplice, ad esempio scattando un'immagine con una fotocamera per smartphone. In questo articolo, ci concentreremo su tali approcci basati su immagini alla valutazione dietetica utilizzando reti neurali profonde, che rappresentano lo stato dell'arte nel campo.
In particolare, presenteremo tre soluzioni, una per il riconoscimento delle immagini alimentari, una per la segmentazione dell'immagine delle repliche alimentari, o cibo falso, e una per la segmentazione dell'immagine del cibo reale. Raccogli un elenco di diversi alimenti e bevande che saranno gli output del modello di riconoscimento delle immagini alimentari. Salvare l'elenco di alimenti e bevande in un file di testo, ad esempio TXT o CSV.
Si noti che il file di testo utilizzato dagli autori di questo articolo è disponibile nei file supplementari sotto gli alimenti dot TXT e include un elenco di 520 prodotti alimentari sloveni. Scrivi o scarica uno script Python che utilizza l'API di ricerca personalizzata di Google per scaricare immagini di ogni elemento alimentare dall'elenco e salvarle in una cartella separata per ogni elemento alimentare. Si noti che lo script Python utilizzato dagli autori di questo articolo può essere trovato nei file supplementari sotto le immagini di download dot pi.
Se questo script viene utilizzato, la riga della chiave di sviluppo della variabile di sviluppo della chiave per sviluppatori otto nel codice script Python e nella variabile ID motore di ricerca personalizzata CX line 28 nel codice script Python deve essere sostituita con valori specifici dell'account Google utilizzato. Eseguire lo script Python dal passaggio 1.1.3. Creare una nuova versione di ogni immagine dal set di dati dell'immagine alimentare ruotandola di 90 gradi, utilizzando la libreria CLoDSA.
Si noti che lo script Python contenente tutti i comandi CLoDSA utilizzati dagli autori di questo articolo può essere trovato in un file incluso nei file supplementari sotto NutriNet sottolineatura aumento dot pi. Creare una nuova versione di ogni immagine dal set di dati dell'immagine alimentare ruotandola di 180 gradi, utilizzando la libreria CLoDSA. Creare una nuova versione di ogni immagine dal set di dati dell'immagine alimentare ruotandola di 270 gradi, utilizzando la libreria CLoDSA.
Creare una nuova versione di ogni immagine dal set di dati dell'immagine alimentare capovolgerla orizzontalmente, utilizzando la libreria CLoDSA. Creare una nuova versione di ogni immagine dal set di dati dell'immagine alimentare aggiungendo un disturbo casuale del colore, utilizzando la libreria CLoDSA. Creare una nuova versione di ogni immagine dal set di dati dell'immagine alimentare ingrandirla del 25% utilizzando la libreria CLoDSA.
Salvare le immagini dai passaggi da 1.3.1 a 1.3.6 insieme alle immagini originali in un nuovo set di dati di immagini alimentari. In totale, sette varianti per immagine del cibo. Importare il set di dati delle immagini alimentari dal passaggio 1.3.7 nell'ambiente delle cifre NVIDI, dividendo il set di dati in sottoinsiemi di training, convalida e test.
Copiare e incollare il testo di definizione dell'architettura NutriNet in cifre NVIDIA. Si noti che la definizione dell'architettura NutriNet è disponibile nei file supplementari in NutriNet dot proto TXT. Facoltativamente, definire iper-parametri di training nelle cifre NVIDIA o utilizzare i valori predefiniti.
Gli iper-parametri utilizzati dagli autori di questo articolo sono disponibili in un file incluso nei file supplementari in NutriNet sottolineare iper-parametri dot proto TXT. Eseguire il training del modello NutriNet. Al termine del training, eseguire l'iterazione del modello NutriNet con le migliori prestazioni.
Questo modello viene quindi utilizzato per testare le prestazioni di questo approccio. Si noti che esistono diversi modi per determinare l'iterazione del modello con le prestazioni migliori. Fare riferimento ai testi dell'articolo per maggiori dettagli.
Ottenere un set di dati di immagini di cibo falso. Si noti che gli autori di questo articolo hanno ricevuto immagini di cibo falso che sono state raccolte in un ambiente di laboratorio. Annota manualmente ogni immagine del cibo a livello di pixel.
Ogni pixel nell'immagine deve contenere informazioni sulla classe di cibo a cui appartiene. Si noti che ci sono molti strumenti per raggiungere questo obiettivo. Gli autori di questo articolo usavano l'annotatore di segmenti JavaScript.
Il risultato di questo passaggio è un'immagine di annotazione per ogni immagine del set di dati dell'immagine alimentare, in cui ogni pixel rappresenta una delle classi di cibo. Eseguire gli stessi passaggi della sezione 1.3, ma solo sulle immagini del sottoinsieme di training del set di dati delle immagini alimentari. Si noti che, ad eccezione del passaggio 1.3.5, tutti i passaggi di aumento dei dati devono essere eseguiti anche sulle immagini di annotazione corrispondenti.
Eseguire gli stessi passaggi della sezione 1.4 ad eccezione del passaggio 1.4.2. Al posto di tale passaggio eseguire i passaggi 2.3.2 e 2.3.3. Si noti che gli iper-parametri di training utilizzati dagli autori di questo articolo sono disponibili nel file incluso nei file supplementari in FCN-8S che sottolineano gli iper-parametri dot proto TXT.
Copiare e incollare il testo di definizione dell'architettura FCN-8S in cifre NVIDIA. Immettere i pesi pre-addestrati del modello FCN-8S in cifre NVIDIA. Si noti che questi pesi del modello sono stati preformati sul set di dati delle classi di oggetti visivi Pascal e possono essere trovati su Internet.
Scarica il set di dati delle immagini alimentari dal sito Web Food Recognition Challenge. Eseguire i passaggi da 1.3.1 a 1.3.4. Si noti che lo script Python contenente tutti i comandi CLoDSA utilizzati dagli autori di questo articolo può essere trovato nel file incluso nei file supplementari sotto FRC sottolineatura aumento dot pi.
Creare una nuova versione di ogni immagine dal set di dati dell'immagine alimentare aggiungendo una sfocatura gaussiana, utilizzando la libreria CLoDSA. Creare una nuova versione di ogni immagine dal set di dati dell'immagine alimentare affinarla utilizzando la libreria CLoDSA. Creare una nuova versione di ogni immagine dal set di dati dell'immagine alimentare applicando ad essa la correzione gamma, utilizzando la libreria CLoDSA.
Salvare le immagini dai passaggi da 3.2.1 a 3.2.4 insieme alle immagini originali in un nuovo set di dati di immagini alimentari. In totale, otto varianti per immagine del cibo. Salvare le immagini dai passaggi da 3.2.2 a 3.2.4 insieme alle immagini originali in un nuovo set di dati di immagini alimentari.
In totale, quattro varianti per immagine del cibo. Modificare la definizione di architettura HTC ResNet 101 esistente dalla libreria mm detection in modo che accetti i set di dati delle immagini alimentari dai passaggi 3.1.1, 3.2.5 e 3.2.6. Facoltativamente, modificare la definizione dell'architettura HTC ResNet 101 dal passaggio 3.3.1 per definire iper-parametri di training o utilizzare i valori predefiniti.
Si noti che la definizione di architettura HTC ResNet 101 modificata è disponibile nei file supplementari sotto HTC sottolineatura ResNet 101 dot pi. Eseguire il training del modello HTC ResNet 101 sui set di dati delle immagini alimentari dal passaggio 3.1.1 utilizzando la libreria di rilevamento MM. Al termine del training del passaggio 3.3.3, eseguire l'iterazione del modello HTC ResNet 101 con le migliori prestazioni e ottimizzarla eseguendo la fase successiva di training sul set di dati delle immagini alimentari dal passaggio 3.2.5.
Si noti che esistono diversi modi per determinare l'iterazione del modello con le prestazioni migliori. Fare riferimento ai testi dell'articolo per maggiori dettagli. Questo è rilevante anche per i prossimi passi.
Al termine del training del passaggio 3.3.4, eseguire l'iterazione del modello HTC ResNet 101 con le migliori prestazioni e ottimizzarla eseguendo la fase successiva di training sul set di dati delle immagini alimentari dal passaggio 3.2.6. Al termine del training del passaggio 3.3.5, eseguire l'iterazione del modello HTC ResNet 101 con le migliori prestazioni e ottimizzarla eseguendo nuovamente la fase successiva di training sul set di dati delle immagini alimentari dal passaggio 3.2.5. Al termine del training dal passaggio 3.3.6, eseguire l'iterazione del modello HTC ResNet 101 con le migliori prestazioni.
Questo modello viene quindi utilizzato per testare le prestazioni di questo approccio. Si noti che i passaggi da 3.3.3 a 3.3.7 hanno prodotto i migliori risultati per gli scopi definiti dagli autori di questo articolo. La sperimentazione è necessaria per ogni set di dati per trovare la sequenza ottimale di passaggi di training e aumento dei dati.
Dopo aver testato il modello di tendenza NutriNet ha ottenuto una precisione di classificazione dell'86,72% sul set di dati di riconoscimento, che era di circa il 2% superiore ad AlexNet e leggermente superiore a GoogLeNet, che erano popolari architetture di reti neurali profonde dell'epoca. Per misurare l'accuratezza del modello di segmentazione delle immagini alimentari false FCN-8S, è stata utilizzata la misura di precisione dei pixel. L'accuratezza del modello FCN-8S addestrato era del 92,18%La soluzione basata su ResNet per la segmentazione delle immagini alimentari è stata valutata utilizzando la misura di precisione definita nella sfida di riconoscimento alimentare.
Utilizzando questa misura, il modello di treno ha raggiunto una precisione media del 59,2%, che si è classificata seconda nella sfida di riconoscimento alimentare. Negli ultimi anni, le reti neurali profonde sono state convalidate più volte come soluzione adatta per riconoscere le immagini alimentari. Il nostro lavoro presentato in questo articolo serve a dimostrarlo ulteriormente.
L'approccio di riconoscimento delle immagini alimentari a singolo output è semplice e può essere utilizzato per applicazioni semplici. Mentre l'approccio di segmentazione delle immagini alimentari richiede più lavoro nella preparazione di immagini annotate, ma è molto più applicabile alle immagini del mondo reale. In futuro, il nostro obiettivo sarà quello di valutare ulteriormente le procedure sviluppate sulle immagini del mondo reale.
Il primo passo verso la convalida del mondo reale è stato fornito dal Food Recognition Challenge, che includeva un set di dati di immagini alimentari del mondo reale. Tuttavia, è necessario lavorare ulteriormente per convalidare questo approccio sulle immagini alimentari provenienti da tutto il mondo e in collaborazione con i dietologi.