Summary

Reti neurali profonde per la valutazione dietetica basata su immagini

Published: March 13, 2021
doi:

Summary

L’obiettivo del lavoro presentato in questo articolo è quello di sviluppare una tecnologia per il riconoscimento automatizzato di prodotti alimentari e bevande da immagini scattate da dispositivi mobili. La tecnologia comprende due diversi approcci: il primo esegue il riconoscimento delle immagini alimentari mentre il secondo esegue la segmentazione delle immagini alimentari.

Abstract

A causa dei problemi e dei costi associati agli approcci manuali di valutazione dietetica, 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. Per il problema del riconoscimento delle immagini alimentari, le reti neurali profonde hanno raggiunto lo stato dell’arte negli ultimi anni e presentiamo il nostro lavoro in questo campo. In particolare, descriviamo prima il metodo per il riconoscimento delle immagini di alimenti e bevande utilizzando un’architettura di rete neurale profonda, chiamata NutriNet. Questo metodo, come la maggior parte delle ricerche fatte nei primi giorni del riconoscimento delle immagini alimentari basato sul deep learning, è limitato a un output per immagine e quindi inadatto per immagini con più alimenti o bevande. Ecco perché gli approcci che eseguono la segmentazione delle immagini alimentari sono considerevolmente più robusti, in quanto sono in grado di identificare qualsiasi numero di alimenti o bevande nell’immagine. Presentiamo quindi anche due metodi per la segmentazione delle immagini alimentari: uno si basa su reti completamente convoluzionali (FCN) e l’altro su reti residue profonde (ResNet).

Introduction

La valutazione dietetica è un passo cruciale per determinare le aree utilizzabili della dieta di un individuo. Tuttavia, l’esecuzione di una valutazione dietetica utilizzando approcci tradizionalmente manuali è associata a costi considerevoli. Questi approcci sono anche soggetti a errori in quanto spesso si basano sull’auto-segnalazione da parte dell’individuo. La valutazione dietetica automatizzata affronta questi problemi fornendo un modo più semplice per quantificare e qualificare l’assunzione di cibo. Tale approccio può anche alleviare alcuni degli errori presenti negli approcci manuali, come i pasti persi, l’incapacità di valutare con precisione il volume del cibo, ecc. Pertanto, ci sono chiari benefici nell’automatizzare la valutazione dietetica sviluppando soluzioni che identificano diversi alimenti e bevande e quantificano l’assunzione di cibo1. Queste soluzioni possono anche essere utilizzate per consentire una stima dei valori nutrizionali degli alimenti e delle bevande (d’ora in poi “prodotti alimentari”). Di conseguenza, la valutazione dietetica automatizzata è utile per molteplici applicazioni, dagli usi strettamente medici, come consentire ai dietologi di tracciare e analizzare in modo più semplice e accurato le diete dei loro pazienti, all’uso all’interno di app di benessere rivolte alla popolazione generale.

Riconoscere automaticamente gli alimenti dalle immagini è un problema di visione artificiale impegnativo. Ciò è dovuto al fatto che gli alimenti sono in genere oggetti deformabili e al fatto che una grande quantità di informazioni visive dell’alimento può essere persa durante la sua preparazione. Inoltre, diversi alimenti possono sembrare molto simili tra loro e lo stesso cibo può sembrare sostanzialmente diverso su più immagini2. Inoltre, l’accuratezza del riconoscimento dipende da molti altri fattori, come la qualità dell’immagine, se l’alimento è ostruito da un altro articolo, la distanza da cui è stata scattata l’immagine, ecc. Riconoscere gli articoli per bevande presenta la propria serie di sfide, la principale delle seguenti è la quantità limitata di informazioni visive disponibili in un’immagine. Queste informazioni potrebbero essere il colore della bevanda, il colore e la struttura del contenitore delle bevande e, in condizioni di immagine ottimali, la densità dellebevande 2.

Per riconoscere con successo gli alimenti dalle immagini, è necessario apprendere le caratteristiche di ogni classe di cibo e bevande. Questa procedura viene tradizionalmente eseguita utilizzando estrattori di funzionalitàdefiniti manualmente 3,4,5,6 che eseguono il riconoscimento in base a funzionalità di elemento specifiche come colore, trama, dimensioni e così via o una combinazione di queste funzionalità. Esempi di questi estrattori di funzionalità includono più kernel learning4, pairwise local features5 e bag-of-features modello6. A causa della complessità delle immagini alimentari, questi approcci hanno raggiunto principalmente una bassa precisione di classificazione – tra il 10% e il 40%3,4,5. La ragione di ciò è che l’approccio manuale non è abbastanza robusto da essere sufficientemente accurato. Poiché un alimento può variare in modo significativo nell’aspetto, non è possibile includere manualmente tutte queste varianze. Una maggiore precisione di classificazione può essere ottenuta con estrattori di funzionalità definiti manualmente quando il numero di classi alimentariè ridotto di 5o diverse funzionalità di immaginesono combinate 6, indicando così che è necessario trovare soluzioni più complesse a questo problema.

Questo è il motivo per cui il deep learning si è dimostrato così efficace per il problema del riconoscimento delle immagini alimentari. Il deep learning, o reti neurali profonde, è stato ispirato dal cervello biologico e consente ai modelli computazionali composti da più strati di elaborazione di apprendere automaticamente le funzionalità attraverso l’allenamento su una serie di immagini di input7,8. Per questo motivo, il deep learning ha notevolmente migliorato lo stato dell’arte in una varietà di campi diricerca 7, con visione artificiale e successivamente riconoscimento delle immagini alimentari, essendo uno di questi2.

In particolare, le reti neurali convoluzionali profonde (DCNN) sono più popolari per il riconoscimento delle immagini alimentari – queste reti sono ispirate al sistema visivo degli animali, dove i singoli neuroni cercano di acquisire una comprensione dell’input visivo reagendo alle regioni sovrapposte nel campo visivo9. Una rete neurale convoluzionale prende l’immagine di input ed esegue una serie di operazioni in ciascuno dei livelli di rete, i più comuni dei quali sono livelli convoluzionali, completamente connessi e di pooling. I livelli convoluzionali contengono filtri apprendibili che rispondono a determinate funzionalità nei dati di input, mentre i livelli completamente connessi compongono i dati di output da altri livelli per ottenere conoscenze di livello superiore da esso. L’obiettivo del pooling dei livelli è quello di campionare i dati di input2. Esistono due approcci all’utilizzo di modelli di deep learning che si sono rivelati popolari: prendere una definizione di rete neurale profondaesistente 10,11, definita architettura di deep learning in questo articolo o definire una nuova architettura di deep learning12,13e training di uno di questi su un set di dati di immagini alimentari. Ci sono punti di forza e di debolezza in entrambi gli approcci: quando si utilizza un’architettura di deep learning esistente, è possibile scegliere un’architettura che ha funzionato bene per altri problemi e perfezionare il problema desiderato, risparmiando così tempo e garantendo che sia stata scelta un’architettura convalidata. Definire una nuova architettura di deep learning, d’altra parte, richiede più tempo, ma consente lo sviluppo di architetture che sono specificamente fatte per tenere conto delle specifiche di un problema e quindi teoricamente funzionare meglio per quel problema.

In questo articolo, presentiamo entrambi gli approcci. Per il problema del riconoscimento delle immagini alimentari, abbiamo sviluppato una nuova architettura DCNN chiamata NutriNet2, che è una modifica della nota architettura AlexNet14. Ci sono due differenze principali rispetto ad AlexNet: NutriNet accetta immagini da 512×512 pixel come input (rispetto alle immagini da 256×256 pixel per AlexNet) e NutriNet ha un livello convoluzionale aggiuntivo all’inizio della rete neurale. Queste due modifiche sono state introdotte al fine di estrarre il più possibile le informazioni dalle immagini del set di dati di riconoscimento. Avere immagini a risoluzione più elevata significava che c’erano più informazioni presenti sulle immagini e avere più livelli convoluzionali significava che ulteriori conoscenze potevano essere estratte dalle immagini. Rispetto ai circa 60 milioni di parametri di AlexNet, NutriNet contiene meno parametri: circa 33 milioni. Ciò è dovuto alla differenza di dimensionalità nel primo livello completamente connesso causata dal livello convoluzionale aggiuntivo2. La figura 1 contiene un diagramma dell’architettura NutriNet. Le immagini alimentari utilizzate per addestrare il modello NutriNet sono state raccolte da Internet – la procedura è descritta nel testo del protocollo.

Per il problema della segmentazione delle immagini alimentari, abbiamo utilizzato due diverse architetture esistenti: reti completamente convoluzionali (FCN)15 e reti residue profonde (ResNet)16,che rappresentavano entrambe lo stato dell’arte per la segmentazione delle immagini quando le abbiamo utilizzate per sviluppare le rispettive soluzioni di segmentazione delle immagini alimentari. Ci sono più varianti FCN che sono state introdotte da Long et al.: FCN-32s, FCN-16s e FCN-8s15. FCN-32s emette una mappa pixel in base alle previsioni del livello finale della FCN, mentre la variante FCN-16s combina queste previsioni con quelle di un livello precedente. FCN-8s considera le previsioni di un altro strato ed è quindi in grado di fare previsioni al grano più fine, motivo per cui è adatto per il riconoscimento delle immagini alimentari. Gli FCN-8 che abbiamo usato sono stati pre-addestrati sul set di dati PASCAL Visual Object Classes (PASCAL VOC)17 e addestrati e testati su immagini di repliche di cibo (d’ora in poi “cibo falso”)18 a causa della loro somiglianza visiva con il cibo reale e a causa della mancanza di immagini annotate di cibo reale a livello di pixel. Il cibo falso viene utilizzato in diversi studi comportamentali e le immagini vengono prese per tutti i piatti di tutti i partecipanti allo studio. Poiché i contenuti alimentari di queste immagini sono noti, rende il set di dati dell’immagine utile per il training del modello di deep learning. I passaggi di elaborazione del set di dati sono descritti nel testo del protocollo.

La soluzione basata su ResNet è stata sviluppata nell’ambito del Food Recognition Challenge (FRC)19. Utilizza il metodo Hybrid Task Cascade (HTC)20 con una dorsale ResNet-10116. Si tratta di un approccio all’avanguardia per il problema della segmentazione delle immagini che può utilizzare diversi estrattori di funzionalità o dorsali. Abbiamo preso in considerazione anche altre reti backbone, in particolare altre varianti ResNet come ResNet-5016, ma ResNet-101 era il più adatto per la sua profondità e capacità di rappresentare le immagini di input in modo abbastanza complesso. Il set di dati utilizzato per il training del modello HTC ResNet-101 era il set di dati FRC con immagini aumentate aggiunte. Questi aumenti sono presentati nel testo del protocollo.

Questo articolo è inteso come una risorsa per gli esperti di machine learning alla ricerca di informazioni su quali architetture di deep learning e passaggi di aumento dei dati funzionano bene per i problemi di riconoscimento e segmentazione delle immagini alimentari, nonché per i ricercatori di nutrizione che cercano di utilizzare il nostro approccio per automatizzare il riconoscimento delle immagini alimentari da utilizzare nella valutazione dietetica. Nei paragrafi seguenti vengono presentate soluzioni di deep learning e set di dati dal campo del riconoscimento delle immagini alimentari. Nel testo del protocollo, dettagliamo come ciascuno dei tre approcci è stato utilizzato per addestrare modelli di rete neurale profonda che possono essere utilizzati per la valutazione dietetica automatizzata. Inoltre, ogni sezione del protocollo contiene una descrizione di come sono stati acquisiti ed elaborati i set di dati delle immagini alimentari utilizzati per il training e il test.

I DCN hanno generalmente ottenuto risultati sostanzialmente migliori rispetto ad altri metodi per il riconoscimento e la segmentazione delle immagini alimentari, motivo per cui la stragrande maggioranza delle recenti ricerche sul campo si basa su queste reti. ha utilizzato DCNN per integrare gli approcci manuali21 e ha raggiunto una precisione di classificazione del 72,26% sul set di dati UEC-FOOD10022. li ha utilizzati esclusivamente per ottenere una maggiore precisione dell’84,90% su un set di dati auto-acquisito23. ha sviluppato DeepFoodCam – un’app per smartphone per il riconoscimento delle immagini alimentari che utilizza DCNN24. ha presentato un sistema che esegue una valutazione dietetica basata sull’Internet of Things utilizzando DCNN25. ha introdotto un approccio basato su DCNN che sfrutta le specifiche delle immagini alimentari26 e ha riportato una precisione del 90,27% sul set di dati Food-10127. autore di una revisione delle soluzioni di deep learning nel settore alimentare28.

Recentemente, Zhao et al. Questo approccio utilizza una rete “studentesca” più piccola che impara da una rete più ampia di “insegnanti”. Con esso, sono riusciti a raggiungere una precisione dell’84% sull’UEC-FOOD25630 e una precisione del 91,2% sul set di dati Food-10127. hafiz et al. ha descritto un nuovo metodo per rilevare le regioni delle lastre nelle immagini alimentari senza l’uso di annotazioni in pixel32. ha introdotto un nuovo set di dati contenente prodotti alimentari provenienti da 20 diverse classi alimentari in 11 stati diversi (solido, affettato, pasta cremosa, ecc.) e ha presentato il loro approccio per modelli di riconoscimento della formazione in grado di riconoscere lo stato alimentare, oltre alla classealimentare 33. ha valutato le soluzioni di riconoscimento delle immagini alimentari per dispositivi mobili34. Infine, Furtado et al. Gli autori hanno notato che con un piccolo numero di classi alimentari, i DCNN funzionano bene, ma su un set di dati con centinaia di classi, l’accuratezza del riconoscimento umano è superiore a35, evidenziando la complessità del problema.

Nonostante i suoi risultati all’avanguardia, il deep learning ha un grosso inconveniente: richiede un set di dati di input di grandi dimensioni su cui addestrare il modello. Nel caso del riconoscimento delle immagini alimentari, è necessario un set di dati di immagini alimentari di grandi dimensioni e questo set di dati deve includere il maggior numero possibile di scenari del mondo reale diversi. In pratica ciò significa che per ogni singolo alimento o bevanda è necessaria una vasta raccolta di immagini e il maggior numero possibile di elementi diversi deve essere presente nel set di dati. Se nel set di dati non sono disponibili immagini sufficienti per un elemento specifico, è improbabile che tale elemento venga riconosciuto correttamente. D’altra parte, se solo un piccolo numero di elementi è coperto dal set di dati, la soluzione avrà un ambito limitato e sarà in grado di riconoscere solo una manciata di cibi e bevande diversi.

In passato sono stati resi disponibili più set di dati. Il Pittsburgh Fast-Food Image Dataset (PFID)3 è stato introdotto per incoraggiare ulteriori ricerche nel campo del riconoscimento delle immagini alimentari. L’Università di Elettro-Comunicazioni Alimentari 100 (UEC-FOOD100)22 e l’Università di Electro-Communications Food 256 (UEC-FOOD256)30 dataset contengono piatti giapponesi, ampliati con alcuni piatti internazionali nel caso del set di dati UEC-FOOD256. Il set di dati Food-101 contiene piatti popolari acquisiti da un sitoWeb 27. I set di datiFood-50 36 e Video Retrieval Group Food 172 (VireoFood-172)37 sono raccolte cinesi di immagini alimentari. Il dataset dell’Università degli Studi di Milano-Bicocca 2016 (UNIMIB2016) è composto da immagini di vassoi alimentari provenienti da una mensaitaliana 38. Recipe1M è un set di dati su larga scala di ricette di cucina e immagini dicibo 39. Il set di dati Food-47540 raccoglie quattro set di dati di immagini alimentari pubblicati inprecedenza 27,30,36,37 in uno. La Beijing Technology and Business University Food 60 (BTBUFood-60) è un set di dati di immagini destinato al rilevamento dialimenti 41. Recentemente, è stato reso disponibile il set di dati ISIA Food-50042 di varie immagini alimentari. Rispetto ad altri set di dati di immagini alimentari disponibili al pubblico, contiene un gran numero di immagini, suddivise in 500 classi di cibo, ed è destinato a promuovere lo sviluppo di soluzioni multimediali di riconoscimento alimentare42.

Protocol

1. Riconoscimento delle immagini alimentari con NutriNet Ottenere il set di dati delle immagini alimentari Raccogli un elenco di diversi alimenti e bevande che saranno gli output del modello di riconoscimento delle immagini alimentari. È preferibile un variegato elenco di cibi e bevande popolari, in quanto ciò consentirà la formazione di un robusto modello di riconoscimento delle immagini alimentari. Salvare l’elenco di alimenti e bevande in un file di testo (ad esempio, ‘txt’ o ‘csv’).NOTA: Il file di testo utilizzato dagli autori di questo articolo è disponibile nei file supplementari (‘food_items.txt’) e include un elenco di 520 prodotti alimentari sloveni. Scrivi o scarica uno script Python43 che utilizza l’API di ricerca personalizzata di Google44 per scaricare immagini di ogni elemento alimentare dall’elenco e salvarle in una cartella separata per ogni elemento alimentare.NOTA: Lo script Python utilizzato dagli autori di questo articolo può essere trovato nei file supplementari (‘download_images.py’). Se si utilizza questo script, la chiave dello sviluppatore (variabile ‘developerKey’, riga 8 nel codice script Python) e l’ID motore di ricerca personalizzato (variabile ‘cx’, riga 28 nel codice script Python) devono essere sostituiti con valori specifici dell’account Google utilizzato. Eseguire lo script Python dal passaggio 1.1.3 (ad esempio, con il comando: ‘python download_images.py’). (Facoltativo) Pulizia del set di dati delle immagini alimentari Addestrare un modello di rilevamento delle immagini alimentari allo stesso modo della sezione 1.4, ad eccezione dell’uso di due soli output (cibo, non alimentare) rispetto all’elenco delle uscite del passaggio 1.1.1.NOTA: gli autori di questo articolo hanno utilizzato immagini combinate dai siti Web di ricette e dal set di dati ImageNet45 per addestrare il modello di rilevamento delle immagini alimentari. Poiché l’attenzione qui è sul riconoscimento delle immagini alimentari e questo è un passaggio facoltativo per la pulizia del set di dati di riconoscimento, ulteriori dettagli vengono omessi. Invece, maggiori dettagli su questo approccio sono disponibili in Mezgec etal. Eseguire il modello di rilevamento dal passaggio 1.2.1 nel set di dati sulle immagini alimentari risultato del passaggio 1.1.4. Eliminare ogni immagine contrassegnata come non alimentare dal modello di rilevamento dal passaggio 1.2.1. Controllare manualmente il set di dati delle immagini alimentari per altre immagini errate o di bassa qualità e per i duplicati delle immagini. Eliminare le immagini trovate nel passaggio 1.2.4. Aumento del set di dati delle immagini alimentari Crea una nuova versione di ogni immagine dal set di dati delle immagini alimentari ruotandola di 90° utilizzando la libreria CLoDSA46 (righe da 19 a 21 nello script Python incluso).NOTA: Lo script Python contenente tutti i comandi CLoDSA utilizzati dagli autori di questo articolo può essere trovato in un file incluso nei file supplementari (‘nutrinet_augmentation.py’). Se si utilizza questo script, il percorso di input (variabile ‘INPUT_PATH’, riga 8 nel codice script Python) e il percorso di output (variabile ‘OUTPUT_PATH’, riga 11 nel codice script Python) devono essere sostituiti con percorsi per le cartelle desiderate. Crea una nuova versione di ogni immagine dal set di dati delle immagini alimentari ruotandola di 180° utilizzando la libreria CLoDSA (righe da 19 a 21 nello script Python incluso). Crea una nuova versione di ogni immagine dal set di dati delle immagini alimentari ruotandola di 270° utilizzando la libreria CLoDSA (righe da 19 a 21 nello script Python incluso). Crea una nuova versione di ogni immagine dal set di dati delle immagini alimentari capovolgendola orizzontalmente usando la libreria CLoDSA (righe 23 e 24 nello script Python incluso). Crea una nuova versione di ogni immagine dal set di dati delle immagini alimentari aggiungendo un rumore di colore casuale utilizzando la libreria CLoDSA (righe 26 e 27 nello script Python incluso). Crea una nuova versione di ogni immagine dal set di dati delle immagini alimentari ingrandindola del 25% utilizzando la libreria CLoDSA (righe 29 e 30 nello script Python incluso). Salva le immagini dai passaggi 1.3.1-1.3.6, insieme alle immagini originali (righe 16 e 17 nello script Python incluso), in un nuovo set di dati di immagini alimentari (in totale, 7 varianti per immagine alimentare). Questo viene fatto eseguendo il comando nella riga 32 dello script Python incluso. Esecuzione del riconoscimento delle immagini alimentari Importare il set di dati delle immagini alimentari dal passaggio 1.3.7 nell’ambiente NVIDIA DIGITS47, dividendo il set di dati in sottoinsiemi di training, convalida e test nell’interfaccia utente NVIDIA DIGITS. Copiare e incollare il testo di definizione dell’architetturaNutriNet 2 in NVIDIA DIGITS come rete personalizzata.NOTA: Il testo di definizione dell’architettura NutriNet è disponibile nei file supplementari (‘nutrinet.prototxt’). (Facoltativo) Definire gli iperparametri di training nell’interfaccia utente NVIDIA DIGITS.NOTA: gli iperparametri sono parametri utilizzati per definire il processo di training prima dell’avvio. Gli iperparametri utilizzati dagli autori di questo articolo sono disponibili in un file incluso nei file supplementari (‘nutrinet_hyperparameters.prototxt’). Sebbene sia necessaria la sperimentazione per ogni dataset per trovare gli iperparametri ottimali, il file contiene una configurazione iperparametrica che può essere copiata nell’interfaccia utente NVIDIA DIGITS. Inoltre, NVIDIA DIGITS popola gli iperparametri con valori predefiniti che possono essere utilizzati come linea di base. Questo passaggio è quindi facoltativo. 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.NOTA: esistono diversi modi per determinare l’iterazione del modello con le prestazioni migliori. Un modo semplice per farlo è il seguente. NVIDIA DIGITS emette un grafico delle misure di precisione per ogni epoca di allenamento. Verificare quale epoca ha ottenuto il valore di perdita più basso per il sottoinsieme di convalida del set di dati delle immagini alimentari: tale iterazione del modello può essere considerata con le prestazioni migliori. Un passaggio facoltativo per determinare l’iterazione del modello con le migliori prestazioni consiste nell’osservare come il valore di perdita per il sottoinsieme di training cambia da epoca a epoca e se inizia a scendere continuamente mentre il valore di perdita per il sottoinsieme di convalida rimane lo stesso o aumenta continuamente, prendere l’epoca precedente a questo calo del valore di perdita di training, in quanto ciò può segnalare quando il modello ha iniziato l’overfitting sulle immagini di training. 2. Segmentazione delle immagini alimentari con FCN Ottenere il set di dati di immagini fake-food Ottenere un set di dati di immagini di cibo falso. Le immagini di cibo falso sono raccolte dai ricercatori che conducono studi comportamentali utilizzando repliche alimentari.NOTA: Gli autori di questo articolo hanno ricevuto immagini di cibo falso che sono state raccolte in un ambiente di laboratorio18. Annota manualmente ogni immagine del cibo a livello di pixel: ogni pixel nell’immagine deve contenere informazioni su quale classe di cibo appartiene. 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.NOTA: esistono molti strumenti per raggiungere questo obiettivo: gli autori di questo articolo hanno utilizzato JavaScript Segment Annotator48. Aumentare il set di dati di immagini di cibo falso Eseguire gli stessi passaggi della sezione 1.3, ma solo sulle immagini del sottoinsieme di training del set di dati delle immagini alimentari.NOTA: Ad eccezione del passaggio 1.3.5, tutti i passaggi di aumento dei dati devono essere eseguiti anche sulle immagini di annotazione corrispondenti. Se si utilizza lo script della sezione 1.3, il percorso di input (variabile ‘INPUT_PATH’, riga 8 nel codice script Python43) e output path (variabile ‘OUTPUT_PATH’, riga 11 nel codice script Python) devono essere sostituiti con percorsi per le cartelle desiderate. Inoltre, imposta il problema (variabile ‘PROBLEM’, riga 6 nel codice script Python) su ‘instance_segmentation’ e la modalità di annotazione (variabile ‘ANNOTATION_MODE’, riga 7 nel codice script Python) e modalità di output (variabile ‘OUTPUT_MODE’, riga 10 nel codice script Python) su ‘coco’. Esecuzione della segmentazione delle immagini di alimenti falsi 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.NOTA: gli iperparametri sono parametri utilizzati per definire il processo di training prima dell’avvio. Gli iperparametri di training utilizzati dagli autori di questo articolo per il passaggio facoltativo 1.4.3 sono disponibili in un file incluso nei file supplementari (‘fcn-8s_hyperparameters.prototxt’). Sebbene sia necessaria la sperimentazione affinché ogni dataset trovi l’insieme ottimale di iperparametri, il file contiene una configurazione iperparametrica che può essere copiata nell’interfaccia utente NVIDIA DIGITS47. Inoltre, NVIDIA DIGITS popola gli iperparametri con valori predefiniti che possono essere utilizzati come linea di base. Copiare e incollare il testo di definizione dell’architetturaFCN-8s 15 nell’ambiente NVIDIA DIGITS come rete personalizzata.NOTA: il testo di definizione dell’architettura FCN-8s è disponibile pubblicamente su GitHub49. Immettere il percorso dei pesi del modello FCN-8s pre-addestrati nell’interfaccia utente NVIDIA DIGITS.NOTA: questi pesi del modello sono stati pre-addestrati sul set di dati PASCALVOC 17 e possono essere trovati su Internet49. 3. Segmentazione delle immagini alimentari con HTC ResNet Ottenere il set di dati delle immagini alimentari Scaricare il set di dati sulle immagini alimentari dal sito WebFRC 19. Aumento del set di dati delle immagini alimentari Eseguire i passaggi da 1.3.1 a 1.3.4.NOTA: Lo script Python43 contenente tutti i comandi CLoDSA46 utilizzati dagli autori di questo articolo può essere trovato in un file incluso nei file supplementari (‘frc_augmentation.py’). Se si utilizza questo script, il percorso di input (variabile ‘INPUT_PATH’, riga 8 nel codice script Python) e il percorso di output (variabile ‘OUTPUT_PATH’, riga 11 nel codice script Python) devono essere sostituiti con percorsi per le cartelle desiderate. Crea una nuova versione di ogni immagine dal set di dati delle immagini alimentari aggiungendo la sfocatura gaussiana usando la libreria CLoDSA (righe 26 e 27 nello script Python incluso). Crea una nuova versione di ogni immagine dal set di dati delle immagini alimentari affinandola utilizzando la libreria CLoDSA (righe 29 e 30 nello script Python incluso). Crea una nuova versione di ogni immagine dal set di dati delle immagini alimentari applicandole la correzione gamma utilizzando la libreria CLoDSA (righe 32 e 33 nello script Python incluso). Salva le immagini dai passaggi 3.2.1-3.2.4, insieme alle immagini originali (righe 16 e 17 nello script Python incluso), in un nuovo set di dati di immagini alimentari (in totale, 8 varianti per immagine alimentare). Questo viene fatto eseguendo il comando nella riga 35 dello script Python incluso. Salva le immagini dai passaggi 3.2.2-3.2.4, insieme alle immagini originali (righe 16 e 17 nello script Python incluso), in un nuovo set di dati di immagini alimentari (in totale, 4 varianti per immagine alimentare). Questo viene fatto eliminando le righe da 19 a 24 dello script Python incluso ed eseguendo il comando nella riga 35. Esecuzione della segmentazione delle immagini alimentari Modificare la definizione dell’architettura16 HTC20 ResNet-101 esistente dalla libreria MMDetection50 nelle sezioni “impostazioni del modello” e “impostazioni del set di dati” del file di definizione dell’architettura in modo che accetti i set di dati delle immagini alimentari dai passaggi 3.1.1, 3.2.5 e 3.2.6. (Facoltativo) Modificare la definizione dell’architettura HTC ResNet-101 dal passaggio 3.3.1 per definire gli iperparametri di training: dimensione batch nella sezione ‘impostazioni set di dati’, tipo di risolutore e velocità di apprendimento nella sezione ‘ottimizzatore’, criteri di apprendimento nella sezione ‘criteri di apprendimento’ e numero di epoche di training nella sezione ‘impostazioni di runtime’ del file di definizione dell’architettura.NOTA: il file di definizione dell’architettura HTC ResNet-101 modificato è disponibile nei file supplementari (‘htc_resnet-101.py’). Gli iperparametri sono parametri utilizzati per definire il processo di training prima dell’avvio. Sebbene sia necessaria la sperimentazione per ogni dataset per trovare l’insieme ottimale di iperparametri, il file contiene già una configurazione iperparametrica che può essere utilizzata senza modifiche. Questo passaggio è quindi facoltativo. Eseguire il training del modello HTC ResNet-101 sul set di dati delle immagini alimentari dal passaggio 3.1.1 utilizzando la libreria MMDetection (ad esempio, con il comando: ‘python mmdetection/tools/train.py htc_resnet-101.py’). Al termine del training del passaggio 3.3.3, eseguire l’iterazione del modello HTC ResNet-101 con le migliori prestazioni e ottimizzarlo eseguendo la fase successiva di training sul set di dati delle immagini alimentari dal passaggio 3.2.5.NOTA: esistono diversi modi per determinare l’iterazione del modello con le prestazioni migliori. Un modo semplice per farlo è il seguente. La libreria MMDetection restituisce i valori delle misure di precisione per ogni epoca di training nell’interfaccia della riga di comando. Verificare quale epoca ha ottenuto il valore di perdita più basso per il sottoinsieme di convalida del set di dati delle immagini alimentari: tale iterazione del modello può essere considerata con le prestazioni migliori. Un passaggio facoltativo per determinare l’iterazione del modello con le migliori prestazioni consiste nell’osservare come il valore di perdita per il sottoinsieme di training cambia da epoca a epoca e se inizia a scendere continuamente mentre il valore di perdita per il sottoinsieme di convalida rimane lo stesso o aumenta continuamente, prendere l’epoca precedente a questo calo del valore di perdita di training, in quanto ciò può segnalare quando il modello ha iniziato l’overfitting sulle immagini di training. Al termine del training del passaggio 3.3.4, eseguire l’iterazione del modello HTC ResNet-101 con le migliori prestazioni e ottimizzarlo eseguendo la fase successiva di training sul set di dati delle immagini alimentari dal passaggio 3.2.6.NOTA: Vedi nota per il passaggio 3.3.4. 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.NOTA: Vedi nota per il passaggio 3.3.4. Al termine del training del 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.NOTA: Vedi nota per il passaggio 3.3.4. I passaggi 3.3.3-3.3.7 hanno dato i migliori risultati ai fini 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.

Representative Results

NutriNet è stato testato contro tre popolari architetture di deep learning dell’epoca: AlexNet14,GoogLeNet51 e ResNet16. Sono stati inoltre testati più parametri di training per tutte le architetture per definire i valoriottimali 2. Tra questi c’è la scelta del tipo di risolutore, che determina come la funzione di perdita è ridotta al minimo. Questa funzione è la misura di qualità primaria per il training delle reti neurali in quanto è più adatta per l’ottimizzazione durante l’allenamento rispetto all’accuratezza della classificazione. Abbiamo testato tre risolutori: Stochastic Gradient Descent (SGD)52,Nesterov’s Accelerated Gradient (NAG)53 e Adaptive Gradient algorithm (AdaGrad)54. Il secondo parametro è la dimensione batch, che definisce il numero di immagini elaborate contemporaneamente. La profondità dell’architettura di deep learning ha determinato il valore di questo parametro, poiché le architetture più profonde richiedono più spazio nella memoria GPU – la conseguenza di questo approccio è stata che la memoria è stata completamente riempita di immagini per tutte le architetture, indipendentemente dalla profondità. Il terzo parametro è il tasso di apprendimento, che definisce la velocità con cui i parametri della rete neurale vengono modificati durante l’allenamento. Questo parametro è stato impostato all’unisono con la dimensione del batch, poiché il numero di immagini elaborate contemporaneamente determina il tasso di convergenza. I modelli AlexNet sono stati addestrati utilizzando una dimensione batch di 256 immagini e un tasso di apprendimento di base di 0,02; NutriNet ha utilizzato una dimensione batch di 128 immagini e una velocità di 0,01; Immagini GoogLeNet 64 e una velocità di 0,005; e ResNet 16 immagini e una velocità di 0,00125. Altri tre parametri sono stati fissati per tutte le architetture: politica del tasso di apprendimento (step-down), dimensione del passo (30%) gamma (0,1). Questi parametri descrivono congiuntamente come il tasso di apprendimento sta cambiando in ogni epoca. L’idea alla base di questo approccio è che il tasso di apprendimento viene gradualmente abbassato per perfezionare il modello più vicino al valore di perdita ottimale. Infine, il numero di epoche di formazione è stato fissato anche a 150 per tutte le architetture di deep learning2. Il miglior risultato tra tutti i parametri testati da NutriNet è stata una precisione di classificazione dell’86,72% sul set di dati di riconoscimento, che è stata di circa il 2% superiore al miglior risultato per AlexNet e leggermente superiore al miglior risultato di GoogLeNet. L’architettura più performante in generale è stata ResNet (di circa l’1%), tuttavia il tempo di formazione per ResNet è sostanzialmente più alto rispetto a NutriNet (di un fattore di circa cinque), il che è importante se i modelli vengono continuamente ridestrati per migliorare l’accuratezza e il numero di alimenti riconoscibili. NutriNet, AlexNet e GoogLeNet hanno ottenuto i migliori risultati utilizzando il risolutore AdaGrad, mentre il modello migliore di ResNet utilizzava il risolutore NAG. NutriNet è stato anche testato sul set di dati di immagini alimentari UNIMIB2016 disponibile al pubblico38. Questo set di dati contiene 3.616 immagini di 73 diversi prodotti alimentari. NutriNet ha ottenuto una precisione di riconoscimento dell’86,39% su questo set di dati, superando leggermente il risultato del riconoscimento di base degli autori del set di dati, che era dell’85,80%. Inoltre, NutriNet è stato testato su un piccolo set di dati di 200 immagini reali di 115 diversi prodotti alimentari e bevande, in cui NutriNet ha raggiunto una precisione massima di 5 del 55%. Per addestrare il modello di segmentazione delle immagini fake-food FCN-8s, abbiamo usato Adam55 come tipo di risolutore, poiché abbiamo scoperto che funzionava in modo ottimale per questo compito. Il tasso di apprendimento di base è stato impostato molto basso – a 0,0001. Il motivo del numero basso è il fatto che è stato possibile elaborare una sola immagine alla volta, che è una conseguenza del processo di classificazione a livello di pixel. I requisiti di memoria GPU per questo approccio sono significativamente maggiori rispetto alla classificazione a livello di immagine. Il tasso di apprendimento doveva quindi essere fissato a basso in modo che i parametri non fossero cambiati troppo velocemente e convergevano a valori meno ottimali. Il numero di epoche di allenamento è stato impostato su 100, mentre la politica del tasso di apprendimento, le dimensioni del passo e la gamma sono state impostate rispettivamente a di step-down, 34% e 0,1, poiché questi parametri hanno prodotto i modelli più accurati. Le misurazioni di precisione del modello FCN-8s sono state eseguite utilizzando la misura di precisione dei pixel15, che è analoga all’accuratezza di classificazione delle reti di deep learning tradizionali, con la differenza principale che l’accuratezza viene calcolata a livello di pixel anziché a livello di immagine: dove PA è la misura dell’accuratezza dei pixel, nij è il numero di pixel della classe i che si prevede appartengano alla classe j e ti = Σj nij è il numero totale di pixel della classe nelle etichette di verità fondamentale1. In altre parole, la misura di precisione dei pixel viene calcolata dividendo i pixel previsti correttamente per il numero totale di pixel. La precisione finale del modello FCN-8s addestrato era del 92,18%. La figura 2 mostra tre immagini di esempio del set di dati di immagini false-food (una per ciascuno dei sottoinsiemi di training, convalida e test), insieme alle corrispondenti etichette di previsione della verità di base e del modello. I parametri per addestrare il modello HTC20 ResNet-101 per la segmentazione delle immagini alimentari sono stati impostati come segue: il tipo di risolutore utilizzato era SGD perché superava altri tipi di risolutore. La velocità di apprendimento di base è stata impostata su 0,00125 e la dimensione del batch su 2 immagini. Il numero di epoche di training è stato impostato su 40 per fase di training e sono state eseguite più fasi di training, prima sul set di dati FRC originale senza immagini aumentate, quindi sul set di dati FRC 8x-augmented e 4x-augmented più volte in modo alternato, ogni volta prendendo il modello più performante e regolandolo nella fase di training successiva. Maggiori dettagli sulle fasi di formazione sono disponibili nella sezione 3.3 del testo del protocollo. Infine, è stata utilizzata la politica di apprendimento step-down, con epoche fisse per quando il tasso di apprendimento è diminuito (epoche 28 e 35 per la prima fase di formazione). Una cosa importante da notare è che mentre questa sequenza di fasi di training ha prodotto i migliori risultati nei nostri test nell’ambito del FRC, l’utilizzo di un altro set di dati potrebbe richiedere una sequenza diversa per produrre risultati ottimali. Questa soluzione basata su ResNet per la segmentazione delle immagini alimentari è stata valutata utilizzando la seguente misura diprecisione 19: dove P è precisione, TP è il numero di vere previsioni positive dal modello di segmentazione delle immagini alimentari, FP è il numero di false previsioni positive e IoU è Intersection over Union, che è calcolato con questa equazione: dove Area of Overlap rappresenta il numero di previsioni per il modello che si sovrappongono alla verità fondamentale, e Area of Union rappresenta il numero totale di previsioni da parte del modello insieme alla verità di base, sia a livello di pixel che per ogni singola classe alimentare. Il richiamo è usato come misura secondaria ed è calcolato in modo simile, utilizzando la seguente formula19: dove R è richiamo e FN è il numero di false previsioni negative da parte del modello di segmentazione dell’immagine alimentare. Le misure di precisione e richiamo sono quindi mediate in tutte le classi della verità di base. Utilizzando queste misure, il nostro modello ha raggiunto una precisione media del 59,2% e un richiamo medio dell’82,1%, che si è classificato secondo al secondo turno del Food Recognition Challenge19. Il risultato è stato del 4,2% dietro il primo posto e del 5,3% rispetto al terzo posto in termini di misura media di precisione. La tabella 1 contiene i risultati per i primi 4 partecipanti al concorso. Figura 1: Diagramma dell’architettura di rete neurale profonda NutriNet. Questa cifra è stata pubblicata in Mezgec etal. Clicca qui per visualizzare una versione più grande di questa figura. Figura 2: Immagini dal set di dati di immagini di alimenti falsi. Immagini originali (a sinistra), etichette di verità fondamentale etichettate manualmente (al centro) e previsioni dal modello FCN-8s (a destra). Questa cifra è stata pubblicata in Mezgec etal. Clicca qui per visualizzare una versione più grande di questa figura. Nome team Posizionamento Precisione media Richiamo medio rssfete 1 63.4% 88.6% simon_mezgec 2 59.2% 82.1% arimboux 3 53.9% 73.5% latentevec 4 48.7% 71.1% Tabella 1: Risultati top-4 del secondo turno della Food Recognition Challenge. La precisione media è presa come misura primaria delle prestazioni e richiamo medio come misura secondaria. I risultati sono presi dalla classifica ufficiale della competizione19. File supplementari. Clicca qui per scaricare questo file.

Discussion

Negli ultimi anni, le reti neurali profonde sono state convalidate più volte come soluzione adatta per riconoscere le immaginialimentari 10,11,12,21,23,25,26,29,31,33. Il nostro lavoro presentato in questo articolo serve a dimostrare ulteriormente questo1,2. L’approccio di riconoscimento delle immagini alimentari a singolo output è semplice e può essere utilizzato per semplici applicazioni in cui sono previste immagini con un solo alimento o bevanda2.

L’approccio di segmentazione delle immagini alimentari sembra particolarmente adatto per riconoscere le immagini degli alimenti in generale, senza alcuna restrizione sul numero di prodotti alimentari1. Poiché funziona classificando ogni singolo pixel dell’immagine, è in grado non solo di riconoscere un numero qualsiasi di alimenti nell’immagine, ma anche di specificare dove si trova un alimento, nonché quanto è grande. Quest’ultimo può quindi essere utilizzato per eseguire la stima del peso alimentare, in particolare se utilizzato con un oggetto di riferimento o una telecamera a distanza fissa.

C’è stato un lavoro fatto per quanto riguarda la disponibilità di set di dati di immagini alimentari3,22,27,30, 36,37,38,39,40,41,42, e speriamo che in futuro si farà di più, in particolare quando si tratta di aggregare set di dati di immagini alimentari provenienti da diverse regioni del mondo, il che consentirebbe di sviluppare soluzioni più robuste. Attualmente, l’accuratezza delle soluzioni automatiche di riconoscimento delle immagini alimentari non ha ancora raggiunto l’accuratezza a livelloumano 35, e questo è probabilmente in gran parte dovuto all’uso di set di dati di immagini alimentari di dimensioni e qualità insufficienti.

In futuro, il nostro obiettivo sarà quello di valutare ulteriormente le procedure sviluppate sulle immagini del mondo reale. In generale, i set di dati in questo campo contengono spesso immagini scattate in ambienti controllati o immagini ottimizzate manualmente per il riconoscimento. Ecco perché è importante raccogliere un set di dati di immagini alimentari del mondo reale ampio e diversificato per includere tutti i diversi prodotti alimentari e bevande che gli individui potrebbero voler riconoscere. Il primo passo in questa direzione è stato fornito dal Food Recognition Challenge, che includeva un set di dati di immagini alimentari del mondo reale19, ma è necessario lavorare ulteriormente per convalidare questo approccio sulle immagini alimentari provenienti da tutto il mondo e in collaborazione con dietologi.

Disclosures

The authors have nothing to disclose.

Acknowledgements

Gli autori ringraziano Tamara Bucher dell’Università di Newcastle, in Australia, per aver fornito il set di dati sulle immagini di cibo falso. Questo lavoro è stato supportato dai programmi di ricerca e innovazione Horizon 2020 dell’Unione Europea (numeri di sovvenzione 863059 – FNS-Cloud, 769661 – SAAM); e l’Agenzia slovena per la ricerca (numero di sovvenzione P2-0098). L’Unione europea e l’Agenzia slovena per la ricerca non hanno avuto alcun ruolo nella progettazione, nell’analisi o nella stesura di questo articolo.

Materials

HARDWARE
NVIDIA GPU NVIDIA N/A An NVIDIA GPU is needed as some of the software frameworks below will not work otherwise. https://www.nvidia.com
SOFTWARE
Caffe Berkeley AI Research N/A Caffe is a deep learning framework. https://caffe.berkeleyvision.org
CLoDSA Jónathan Heras N/A CLoDSA is a Python image augmentation library. https://github.com/joheras/CLoDSA
Google API Client Google N/A Google API Client is a Python client library for Google's discovery based APIs. https://github.com/googleapis/google-api-python-client
JavaScript Segment Annotator Kota Yamaguchi N/A JavaScript Segment Annotator is a JavaScript image annotation tool. https://github.com/kyamagu/js-segment-annotator
MMDetection Multimedia Laboratory, CUHK N/A MMDetection is an object detection toolbox based on PyTorch. https://github.com/open-mmlab/mmdetection
NVIDIA DIGITS NVIDIA N/A NVIDIA DIGITS is a wrapper for Caffe that provides a graphical web interface. https://developer.nvidia.com/digits
OpenCV Intel N/A OpenCV is a library for computer vision. https://opencv.org
Python Python Software Foundation N/A Python is a programming language. https://www.python.org
PyTorch Facebook AI Research N/A PyTorch is a machine learning framework. https://pytorch.org
Ubuntu OS Canonical N/A Ubuntu 14.04 is the OS used by the authors and offers compatibility with all of the software frameworks and tools above. https://ubuntu.com

References

  1. Mezgec, S., Eftimov, T., Bucher, T., Koroušić Seljak, B. Mixed Deep Learning and Natural Language Processing Method for Fake-Food Image Recognition and Standardization to Help Automated Dietary Assessment. Public Health Nutrition. 22 (7), 1193-1202 (2019).
  2. Mezgec, S., Koroušić Seljak, B. NutriNet: A Deep Learning Food and Drink Image Recognition System for Dietary Assessment. Nutrients. 9 (7), 657 (2017).
  3. Chen, M., et al. PFID: Pittsburgh Fast-Food Image Dataset. Proceedings of the ICIP 2009. , 289-292 (2009).
  4. Joutou, T., Yanai, K. A Food Image Recognition System with Multiple Kernel Learning. Proceedings of the ICIP 2009. , 285-288 (2009).
  5. Yang, S., Chen, M., Pomerlau, D., Sukthankar, R. Food Recognition using Statistics of Pairwise Local Features. Proceedings of the CVPR 2010. , 2249-2256 (2010).
  6. Anthimopoulos, M. M., Gianola, L., Scarnato, L., Diem, P., Mougiakakou, S. G. A Food Recognition System for Diabetic Patients Based on an Optimized Bag-of-Features Model. IEEE Journal of Biomedical and Health Informatics. 18 (4), 1261-1271 (2014).
  7. LeCun, Y., Bengio, Y., Hinton, G. Deep Learning. Nature. 521, 436-444 (2015).
  8. Deng, L., Yu, D. Deep Learning: Methods and Applications. Foundations and Trends in Signal Processing. 7 (3-4), 197 (2014).
  9. Hubel, D. H., Wiesel, T. N. Receptive Fields, Binocular Interaction and Functional Architecture in the Cat’s Visual Cortex. The Journal of Physiology. 160 (1), 106-154 (1962).
  10. Singla, A., Yuan, L., Ebrahimi, T. Food/Non-Food Image Classification and Food Categorization using Pre-Trained GoogLeNet Model. Proceedings of the MADiMa’16. , 3-11 (2016).
  11. Yanai, K., Kawano, Y. Food Image Recognition using Deep Convolutional Network with Pre-Training and Fine-Tuning. Proceedings of the ICMEW 2015. , 1-6 (2015).
  12. Liu, C., et al. DeepFood: Deep Learning-Based Food Image Recognition for Computer-Aided Dietary Assessment. Proceedings of the ICOST 2016. , 37-48 (2016).
  13. De Sousa Ribeiro, F., et al. An End-to-End Deep Neural Architecture for Optical Character Verification and Recognition in Retail Food Packaging. Proceedings of the ICIP 2018. , 2376-2380 (2018).
  14. Krizhevsky, A., Sutskever, I., Hinton, G. ImageNet Classification with Deep Convolutional Neural Networks. Proceedings of the NIPS’12. , 1097-1105 (2012).
  15. Long, J., Shelhamer, E., Darrell, T. Fully Convolutional Networks for Semantic Segmentation. Proceedings of the CVPR 2015. , 3431-3440 (2015).
  16. He, K., Zhang, X., Ren, S., Sun, J. Deep Residual Learning for Image Recognition. Proceedings of the CVPR 2016. , 770-778 (2016).
  17. Bucher, T., vander Horst, K., Siegrist, M. Fruit for Dessert. How People Compose Healthier Meals. Appetite. 60 (1), 74-80 (2013).
  18. Food Recognition Challenge. AICrowd Available from: https://www.aicrowd.com/challenges/food-recognition-challenge (2020)
  19. Chen, K., et al. Hybrid Task Cascade for Instance Segmentation. Proceedings of the CVPR 2019. , 4974-4983 (2019).
  20. Kawano, Y., Yanai, K. Food Image Recognition with Deep Convolutional Features. Proceedings of the UbiComp 2014. , 589-593 (2014).
  21. Matsuda, Y., Hoashi, H., Yanai, K. Recognition of Multiple-Food Images by Detecting Candidate Regions. Proceedings of the ICME 2012. , 25-30 (2012).
  22. Christodoulidis, S., Anthimopoulos, M. M., Mougiakakou, S. G. Food Recognition for Dietary Assessment using Deep Convolutional Neural Networks. Proceedings of the ICIAP 2015. , 458-465 (2015).
  23. Tanno, R., Okamoto, K., Yanai, K. DeepFoodCam: A DCNN-Based Real-Time Mobile Food Recognition System. Proceedings of the MADiMa’16. , 89-89 (2016).
  24. Liu, C., et al. A New Deep Learning-Based Food Recognition System for Dietary Assessment on An Edge Computing Service Infrastructure. IEEE Transactions on Services Computing. 11 (2), 249-261 (2017).
  25. Martinel, N., Foresti, G. L., Micheloni, C. Wide-Slice Residual Networks for Food Recognition. Proceedings of the IEEE WACV 2018. , 567-576 (2018).
  26. Bossard, L., Guillaumin, M., Van Gool, L. Food-101-Mining Discriminative Components with Random Forests. Proceedings of the ECCV’14. , 446-461 (2014).
  27. Zhou, L., Zhang, C., Liu, F., Qiu, Z., He, Y. Application of Deep Learning in Food: A Review. Comprehensive Reviews in Food Science and Food Safety. 18, 1793-1811 (2019).
  28. Zhao, H., Yap, K. -. H., Kot, A. C., Duan, L. JDNet: A Joint-Learning Distilled Network for Mobile Visual Food Recognition. IEEE Journal of Selected Topics in Signal Processing. 14 (4), 665-675 (2020).
  29. Kawano, Y., Yanai, K. Automatic Expansion of a Food Image Dataset Leveraging Existing Categories with Domain Adaptation. Proceedings of the ECCV’14. , 3-17 (2014).
  30. Hafiz, R., Haque, M. R., Rakshit, A., Uddin, M. S. Image-Based Soft Drink Type Classification and Dietary Assessment System using Deep Convolutional Neural Network with Transfer Learning. Journal of King Saud University – Computer and Information Sciences. , (2020).
  31. Shimoda, W., Yanai, K. Weakly-Supervised Plate and Food Region Segmentation. Proceedings of the ICME 2020. , 1-6 (2020).
  32. Ciocca, G., Micali, G., Napoletano, P. State Recognition of Food Images using Deep Features. IEEE Access. 8, 32003-32017 (2020).
  33. Knez, S., Šajn, L. Food Object Recognition using a Mobile Device: Evaluation of Currently Implemented Systems. Trends in Food Science & Technology. 99, 460-471 (2020).
  34. Furtado, P., Caldeira, M., Martins, P. Human Visual System vs Convolution Neural Networks in Food Recognition Task: An Empirical Comparison. Computer Vision and Image Understanding. 191, 102878 (2020).
  35. Chen, M. -. Y., et al. Automatic Chinese Food Identification and Quantity Estimation. SA’12 Technical Briefs. , 1-4 (2012).
  36. Chen, J., Ngo, C. -. W. Deep-Based Ingredient Recognition for Cooking Recipe Retrieval. Proceedings of the MM’16. , 32-41 (2016).
  37. Ciocca, G., Napoletano, P., Schettini, R. Food Recognition: A New Dataset, Experiments, and Results. IEEE Journal of Biomedical and Health Informatics. 21 (3), 588-598 (2017).
  38. Salvador, A., et al. Learning Cross-Modal Embeddings for Cooking Recipes and Food Images. Proceedings of the IEEE CVPR 2017. , 3020-3028 (2017).
  39. Ciocca, G., Napoletano, P., Schettini, R. CNN-Based Features for Retrieval and Classification of Food Images. Computer Vision and Image Understanding. 176-177, 70-77 (2018).
  40. Cai, Q., Li, J., Li, H., Weng, Y. BTBUFood-60: Dataset for Object Detection in Food Field. Proceedings of the IEEE BigComp 2019. , 1-4 (2019).
  41. Min, W., et al. ISIA Food-500: A Dataset for Large-Scale Food Recognition via Stacked Global-Local Attention Network. Proceedings of the MM’20. , 393-401 (2020).
  42. . Python Available from: https://www.python.org (2020)
  43. Google Custom Search API. Google Available from: https://developers.google.com/resources/api-libraries/documentation/customsearch/v1/python/latest/customsearch_v1.cse.html (2020)
  44. . CLoDSA Available from: https://github.com/joheras/CLoDSA (2020)
  45. NVIDIA DIGITS. NVIDIA Available from: https://developer.nvidia.com/digits (2020)
  46. . JavaScript Segment Annotator Available from: https://github.com/kyamagu/js-segment-annotator (2020)
  47. . Fully Convolutional Networks for Semantic Segmentation Available from: https://github.com/shelhamer/fcn.berkeleyvision.org (2020)
  48. . MMDetection Available from: https://github.com/open-mmlab/mmdetection (2020)
  49. Szegedy, C., et al. Going Deeper with Convolutions. Proceedings of the CVPR 2015. , 1-9 (2015).
  50. Bottou, L. Large-Scale Machine Learning with Stochastic Gradient Descent. Proceedings of the COMPSTAT’2010. , 177-186 (2010).
  51. Nesterov, Y. A Method of Solving a Convex Programming Problem with Convergence Rate O(1/k2). Doklady Akademii Nauk SSSR. 27, 372-376 (1983).
  52. Duchi, J., Hazan, E., Singer, Y. Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. Journal of Machine Learning Research. 12, 2121-2159 (2011).
  53. Kingma, D. P., Ba, J. Adam: A Method for Stochastic Optimization. arXiv Preprint. , (2017).

Play Video

Cite This Article
Mezgec, S., Koroušić Seljak, B. Deep Neural Networks for Image-Based Dietary Assessment. J. Vis. Exp. (169), e61906, doi:10.3791/61906 (2021).

View Video