Summary

Diepe neurale netwerken voor op afbeeldingen gebaseerde dieetbeoordeling

Published: March 13, 2021
doi:

Summary

Het doel van het werk dat in dit artikel wordt gepresenteerd, is het ontwikkelen van technologie voor geautomatiseerde herkenning van voedsel- en drankartikelen uit afbeeldingen die door mobiele apparaten zijn gemaakt. De technologie bestaat uit twee verschillende benaderingen – de eerste voert voedselbeeldherkenning uit terwijl de tweede voedselbeeldsegmentatie uitvoert.

Abstract

Vanwege de problemen en kosten die gepaard gaan met handmatige dieetbeoordelingsbenaderingen, zijn geautomatiseerde oplossingen nodig om het werk te vergemakkelijken en te versnellen en de kwaliteit ervan te verhogen. Tegenwoordig zijn geautomatiseerde oplossingen in staat om de voedingsinname van een persoon op een veel eenvoudigere manier vast te leggen, bijvoorbeeld door een foto te maken met een smartphonecamera. In dit artikel zullen we ons richten op dergelijke op afbeeldingen gebaseerde benaderingen van dieetbeoordeling. Voor het voedselbeeldherkenningsprobleem hebben diepe neurale netwerken de afgelopen jaren de state of the art bereikt en presenteren we ons werk op dit gebied. In het bijzonder beschrijven we eerst de methode voor beeldherkenning van eten en drinken met behulp van een diepe neurale netwerkarchitectuur, NutriNet genaamd. Deze methode is, zoals het meeste onderzoek gedaan in de begindagen van deep learning-gebaseerde voedselbeeldherkenning, beperkt tot één uitvoer per afbeelding en daarom ongeschikt voor afbeeldingen met meerdere voedsel- of drankproducten. Daarom zijn benaderingen die segmentatie van voedselimago’s uitvoeren aanzienlijk robuuster, omdat ze in staat zijn om een willekeurig aantal voedsel- of drankproducten in het beeld te identificeren. We presenteren daarom ook twee methoden voor segmentatie van voedselimago’ s – de ene is gebaseerd op volledig convolutionele netwerken (FCN’s) en de andere op diepe restnetwerken (ResNet).

Introduction

Dieetbeoordeling is een cruciale stap in het bepalen van bruikbare gebieden van het dieet van een individu. Het uitvoeren van dieetbeoordelingen met behulp van traditioneel handmatige benaderingen gaat echter gepaard met aanzienlijke kosten. Deze benaderingen zijn ook gevoelig voor fouten, omdat ze vaak vertrouwen op zelfrapportage door het individu. Geautomatiseerde dieetbeoordeling pakt deze problemen aan door een eenvoudigere manier te bieden om voedselinname te kwantificeren en te kwalificeren. Een dergelijke aanpak kan ook een aantal van de fouten in handmatige benaderingen verlichten, zoals gemiste maaltijden, onvermogen om het voedselvolume nauwkeurig te beoordelen, enz. Daarom zijn er duidelijke voordelen aan het automatiseren van voedingsbeoordeling door oplossingen te ontwikkelen die verschillende voedingsmiddelen en dranken identificeren en voedselinname kwantificeren1. Deze oplossingen kunnen ook worden gebruikt om een schatting van de voedingswaarden van voedsel- en drankproducten (voortaan ‘voedingsmiddelen’) mogelijk te maken. Bijgevolg is geautomatiseerde dieetbeoordeling nuttig voor meerdere toepassingen – van strikt medisch gebruik, zoals het toestaan van diëtisten om gemakkelijker en nauwkeuriger de diëten van hun patiënten te volgen en te analyseren, tot het gebruik in welzijnsapps gericht op de algemene bevolking.

Het automatisch herkennen van voedingsmiddelen uit afbeeldingen is een uitdagend computervisieprobleem. Dit komt doordat voedingsmiddelen meestal vervormbare objecten zijn en vanwege het feit dat een grote hoeveelheid visuele informatie van het voedselitem verloren kan gaan tijdens de bereiding. Bovendien kunnen verschillende voedingsmiddelen erg op elkaar lijken en kan hetzelfde voedsel op meerdere afbeeldingen aanzienlijk verschillen2. Bovendien hangt de herkenningsnauwkeurigheid af van veel meer factoren, zoals beeldkwaliteit, of het voedselartikel wordt belemmerd door een ander item, afstand van waaruit het beeld is genomen, enz. Het herkennen van drankartikelen brengt zijn eigen uitdagingen met zich mee, met als belangrijkste de beperkte hoeveelheid visuele informatie die beschikbaar is in een afbeelding. Deze informatie kan de drankkleur, de kleur en de structuur van de drankcontainer zijn, en, onder optimale beeldvoorwaarden, de drankdichtheid2.

Om voedselproducten uit afbeeldingen met succes te herkennen, is het noodzakelijk om functies van elke eet- en drinkles te leren. Dit werd traditioneel gedaan met behulp van handmatig gedefinieerde functie-extractors3,4,5,6 dieherkenning uitvoeren op basis van specifieke itemfuncties zoals kleur, textuur, grootte, enz., of een combinatie van deze functies. Voorbeelden van deze functie-extractors zijn meerdere kernel learning4,pairwise lokale functies5 en de bag-of-features model6. Vanwege de complexiteit van voedselbeelden bereikten deze benaderingen meestal een lage classificatienauwkeurigheid – tussen 10% en 40%3,4,5. De reden hiervoor is dat de handmatige aanpak niet robuust genoeg is om voldoende nauwkeurig te zijn. Omdat een voedingsartikel qua uiterlijk aanzienlijk kan variëren, is het niet haalbaar om al deze verschillen handmatig te omvatten. Een hogere classificatienauwkeurigheid kan worden bereikt met handmatig gedefinieerde functie-extractors wanneer het aantal voedselklassen wordt verminderdmet 5, of verschillende afbeeldingskenmerken worden gecombineerd6, wat aangeeft dat er behoefte is aan complexere oplossingen voor dit probleem.

Daarom bleek deep learning zo effectief te zijn voor het voedselimagoherkenningsprobleem. Deep learning, of diepe neurale netwerken, is geïnspireerd door biologische hersenen en stelt computationele modellen bestaande uit meerdere verwerkingslagen in staat om automatisch functies te leren door training op een set invoerafbeeldingen7,8. Hierdoor heeft deep learning de stand van de techniek op verschillende onderzoeksgebieden7aanzienlijk verbeterd, met computervisie en vervolgens voedselbeeldherkenning, als een van hen2.

Met name diepe convolutionele neurale netwerken (DCNN’s) zijn het meest populair voor voedselbeeldherkenning – deze netwerken zijn geïnspireerd op het visuele systeem van dieren, waar individuele neuronen proberen inzicht te krijgen in de visuele input door te reageren op overlappende gebieden in het visuele veld9. Een convolutioneel neuraal netwerk neemt het invoerbeeld en voert een reeks bewerkingen uit in elk van de netwerklagen, waarvan de meest voorkomende convolutionele, volledig verbonden en poolinglagen zijn. Convolutionele lagen bevatten leerbare filters die reageren op bepaalde functies in de invoergegevens, terwijl volledig verbonden lagen uitvoergegevens uit andere lagen samenstellen om er kennis op een hoger niveau van te verkrijgen. Het doel van het groeperen van lagen is om de invoergegevens te down-samplen2. Er zijn twee benaderingen voor het gebruik van deep learning-modellen die populair bleken: het nemen van een bestaande deep neurale netwerkdefinitie10,11, in dit artikel een deep learning-architectuur genoemd, of het definiëren van een nieuwe deep learning-architectuur12,13, en het trainen van een van deze op een voedselimagegegevensset. Er zijn sterke en zwakke punten aan beide benaderingen – bij het gebruik van een bestaande deep learning-architectuur kan een architectuur worden gekozen en verfijnd voor het gewenste probleem, waardoor tijd wordt bespaard en ervoor wordt gezorgd dat een gevalideerde architectuur is gekozen. Het definiëren van een nieuwe deep learning-architectuur is daarentegen tijdintensiever, maar maakt de ontwikkeling van architecturen mogelijk die specifiek zijn gemaakt om rekening te houden met de specifieke kenmerken van een probleem en dus theoretisch beter presteren voor dat probleem.

In dit artikel presenteren we beide benaderingen. Voor het probleem van voedselimagoherkenning ontwikkelden we een nieuwe DCNN-architectuur genaamd NutriNet2, een wijziging van de bekende AlexNet-architectuur14. Er zijn twee belangrijke verschillen ten opzichte van AlexNet: NutriNet accepteert afbeeldingen van 512×512 pixels als invoer (in tegenstelling tot afbeeldingen van 256×256 pixels voor AlexNet) en NutriNet heeft een extra convolutionele laag aan het begin van het neurale netwerk. Deze twee wijzigingen zijn ingevoerd om zoveel mogelijk informatie uit de afbeeldingen van de herkenningsgegevensset te extraheren. Het hebben van afbeeldingen met een hogere resolutie betekende dat er meer informatie op afbeeldingen aanwezig was en het hebben van meer convolutionele lagen betekende dat extra kennis uit de afbeeldingen kon worden gehaald. Vergeleken met de ongeveer 60 miljoen parameters van AlexNet bevat NutriNet minder parameters: ongeveer 33 miljoen. Dit komt door het verschil in dimensionaliteit bij de eerste volledig verbonden laag veroorzaakt door de extra convolutionele laag2. Figuur 1 bevat een diagram van de NutriNet-architectuur. De voedselafbeeldingen die werden gebruikt om het NutriNet-model te trainen, werden verzameld van internet – de procedure wordt beschreven in de protocoltekst.

Voor het probleem van voedselimagesegmentatie gebruikten we twee verschillende bestaande architecturen: volledig convolutienetwerken (FCN’s)15 en diepe restnetwerken (ResNet)16, die beide de state of the art vertegenwoordigden voor beeldsegmentatie toen we ze gebruikten om hun respectieve oplossingen voor voedselimagosegmentatie te ontwikkelen. Er zijn meerdere FCN varianten die werden geïntroduceerd door Long et al.: FCN-32s, FCN-16s en FCN-8s15. FCN-32s voert een pixelkaart uit op basis van de voorspellingen van de laatste laag van de FCN, terwijl de FCN-16s-variant deze voorspellingen combineert met die van een eerdere laag. FCN-8s overweegt de voorspellingen van nog een andere laag en is daarom in staat om voorspellingen te doen bij de fijnste korrel, daarom is het geschikt voor voedselbeeldherkenning. De FCN-8’s die we gebruikten, werden vooraf getraind op de PASCAL Visual Object Classes (PASCAL VOC) dataset17 en getraind en getest op afbeeldingen van voedselreplica’s (voortaan ‘nepvoedsel’)18 vanwege hun visuele gelijkenis met echt voedsel en vanwege een gebrek aan geannoteerde afbeeldingen van echt voedsel op pixelniveau. Nepvoedsel wordt gebruikt in verschillende gedragsstudies en er worden afbeeldingen gemaakt voor alle gerechten van alle deelnemers aan de studie. Omdat de voedselinhoud van deze afbeeldingen bekend is, maakt het de afbeeldingsgegevensset nuttig voor deep learning-modeltraining. Verwerkingsstappen voor gegevenssets worden beschreven in de protocoltekst.

De op ResNet gebaseerde oplossing is ontwikkeld in het kader van de Food Recognition Challenge (FRC)19. Het maakt gebruik van de Hybrid Task Cascade (HTC)20-methode met een ResNet-10116-backbone. Dit is een state-of-the-art aanpak voor het probleem met beeldsegmentatie dat verschillende functie-extractors of backbones kan gebruiken. We hebben ook andere backbone-netwerken overwogen, met name andere ResNet-varianten zoals ResNet-5016,maar ResNet-101 was het meest geschikt vanwege de diepte en het vermogen om invoerafbeeldingen op een complexe manier weer te geven. De dataset die werd gebruikt voor het trainen van het HTC ResNet-101-model was de FRC-dataset met toegevoegde augmented images. Deze uitbreidingen worden gepresenteerd in de protocoltekst.

Dit artikel is bedoeld als een bron voor machine learning-experts die op zoek zijn naar informatie over welke deep learning-architecturen en stappen voor gegevensvergroting goed presteren voor de problemen van voedselbeeldherkenning en segmentatie, evenals voor voedingsonderzoekers die onze aanpak willen gebruiken om voedselbeeldherkenning te automatiseren voor gebruik bij dieetbeoordeling. In de onderstaande paragrafen worden deep learning-oplossingen en datasets uit het veld voedselimageherkenning gepresenteerd. In de protocoltekst beschrijven we hoe elk van de drie benaderingen werd gebruikt om diepe neurale netwerkmodellen te trainen die kunnen worden gebruikt voor geautomatiseerde dieetbeoordeling. Bovendien bevat elke protocolsectie een beschrijving van hoe de gegevenssets voor voedselafbeeldingen die worden gebruikt voor training en testen zijn verkregen en verwerkt.

DCNN’s behaalden over het algemeen aanzienlijk betere resultaten dan andere methoden voor herkenning en segmentatie van voedselimago’ s, daarom is het overgrote deel van het recente onderzoek in het veld gebaseerd op deze netwerken. Kawano et al. gebruikten DCNN’s als aanvulling op handmatige benaderingen21 en bereikten een classificatienauwkeurigheid van 72,26% op de UEC-FOOD100 dataset22. Christodoulidis et al. gebruikten ze uitsluitend om een hogere nauwkeurigheid van 84,90% te bereiken op een zelf verworven dataset23. Tanno et al. ontwikkelden DeepFoodCam – een smartphone-app voor voedselbeeldherkenning die DCNNs24 gebruikt. Liu et al. presenteerden een systeem dat een op Internet of Things gebaseerde dieetbeoordeling uitvoert met behulp van DCNNs25. Martinel et al. introduceerden een dcnn-gebaseerde aanpak die de details van voedselafbeeldingen26 benut en een nauwkeurigheid van 90,27% rapporteerde op de Food-101-dataset27. Zhou et al. hebben een overzicht geschreven van deep learning-oplossingen in het voedseldomein28.

Onlangs stelden Zhao et al. een netwerk voor dat specifiek is bedoeld voor voedselimagoherkenning in mobiele toepassingen29. Deze aanpak maakt gebruik van een kleiner ‘studenten’-netwerk dat leert van een groter ‘docentennetwerk’. Hiermee slaagden ze erin om een nauwkeurigheid van 84% te bereiken op de UEC-FOOD25630 en een nauwkeurigheid van 91,2% op de Food-101 dataset27. Hafiz et al. gebruikten DCNNs om een drank-only beeldherkenningsoplossing te ontwikkelen en rapporteerden een zeer hoge nauwkeurigheid van 98,51%31. Shimoda et al. beschreven een nieuwe methode voor het detecteren van plaatgebieden in voedselafbeeldingen zonder het gebruik van pixelgewijze annotatie32. Ciocca et al. introduceerden een nieuwe dataset met voedingsmiddelen uit 20 verschillende voedselklassen in 11 verschillende toestanden (vaste, gesneden, romige pasta, enz.) en presenteerden hun aanpak voor trainingsherkenningsmodellen die de voedseltoestand kunnen herkennen, naast de voedselklasse33. Knez et al. evalueerde oplossingen voor voedselbeeldherkenning voor mobiele apparaten34. Ten slotte hebben Furtado et al. een studie uitgevoerd naar hoe het menselijke visuele systeem zich verhoudt tot de prestaties van DCNN’s en ontdekten dat menselijke herkenning nog steeds beter presteert dan DCNN’s met een nauwkeurigheid van 80% versus 74,5%35. De auteurs merkten op dat met een klein aantal voedselklassen de DCNN’s goed presteren, maar op een dataset met honderden klassen is de nauwkeurigheid van menselijke herkenning hogerdan 35, wat de complexiteit van het probleem benadrukt.

Ondanks de state-of-the-art resultaten heeft deep learning een groot nadeel – het vereist een grote invoergegevensset om het model op te trainen. In het geval van voedselimagoherkenning is een grote voedselimagegegevensset vereist en deze gegevensset moet zoveel mogelijk verschillende scenario’s in de echte wereld omvatten. In de praktijk betekent dit dat voor elk individueel voedsel- of drankartikel een grote verzameling afbeeldingen nodig is en dat er zoveel mogelijk verschillende items in de dataset aanwezig moeten zijn. Als er niet genoeg afbeeldingen zijn voor een specifiek item in de gegevensset, is het onwaarschijnlijk dat dat item met succes wordt herkend. Aan de andere kant, als slechts een klein aantal items onder de dataset valt, zal de oplossing beperkt zijn in omvang en slechts in staat zijn om een handvol verschillende voedingsmiddelen en dranken te herkennen.

In het verleden zijn meerdere datasets beschikbaar gesteld. De Pittsburgh Fast-Food Image Dataset (PFID)3 werd geïntroduceerd om meer onderzoek op het gebied van voedselbeeldherkenning aan te moedigen. De University of Electro-Communications Food 100 (UEC-FOOD100)22 en University of Electro-Communications Food 256 (UEC-FOOD256)30 datasets bevatten Japanse gerechten, uitgebreid met enkele internationale gerechten in het geval van de UEC-FOOD256 dataset. De Food-101 dataset bevat populaire gerechten verkregen van een website27. De Food-5036 en Video Retrieval Group Food 172 (VireoFood-172)37 datasets zijn in China gevestigde collecties van voedselafbeeldingen. De dataset van de Universiteit van Milaan-Bicocca 2016 (UNIMIB2016) bestaat uit afbeeldingen van voedselbakken uit een Italiaanse kantine38. Recipe1M is een grootschalige dataset van kookrecepten en voedselafbeeldingen39. De Food-475 dataset40 verzamelt vier eerder gepubliceerde voedselbeeld datasets27,30,36,37 in één. De Beijing Technology and Business University Food 60 (BTBUFood-60) is een dataset van afbeeldingen bedoeld voor voedseldetectie41. Onlangs is de ISIA Food-500 dataset42 van diverse voedselafbeeldingen beschikbaar gesteld. In vergelijking met andere openbaar beschikbare gegevenssets voor voedselafbeeldingen bevat het een groot aantal afbeeldingen, verdeeld in 500 voedselklassen, en is het bedoeld om de ontwikkeling van multimediale voedselherkenningsoplossingen te bevorderen42.

Protocol

1. Voedselbeeldherkenning met NutriNet Het verkrijgen van de voedselbeeldgegevensset Verzamel een lijst met verschillende voedingsmiddelen en dranken die de outputs van het voedselbeeldherkenningsmodel zullen zijn. Een gevarieerde lijst van populaire voedingsmiddelen en dranken heeft de voorkeur, omdat dat de training van een robuust model voor voedselbeeldherkenning mogelijk maakt. Sla de lijst met eten en drinken op in een tekstbestand (bijv. ‘txt’ of ‘csv’).OPMERKING: Het tekstbestand dat door de auteurs van dit artikel wordt gebruikt, is te vinden in de aanvullende bestanden (‘food_items.txt’) en bevat een lijst met 520 Sloveense etenswaren. Schrijf of download een Python43-script dat de Google Custom Search API44 gebruikt om afbeeldingen van elk voedselitem uit de lijst te downloaden en op te slaan in een aparte map voor elk voedselitem.OPMERKING: Het Python-script dat door de auteurs van dit artikel wordt gebruikt, is te vinden in de aanvullende bestanden (‘download_images.py’). Als dit script wordt gebruikt, moeten de Developer Key (variabele ‘developerKey’, regel 8 in de Python-scriptcode) en Custom Search Engine ID (variabele ‘cx’, regel 28 in de Python-scriptcode) worden vervangen door waarden die specifiek zijn voor het Google-account dat wordt gebruikt. Voer het Python-script uit vanaf stap 1.1.3 (bijvoorbeeld met de opdracht: ‘python download_images.py’). (Optioneel) De gegevensset van de voedselafbeelding opschonen Train een model voor de detectie van voedselafbeeldingen op dezelfde manier als in punt 1.4, behalve gebruik slechts twee uitgangen (levensmiddelen, non-food) in tegenstelling tot de lijst met uitgangen uit stap 1.1.1.OPMERKING: De auteurs van dit artikel gebruikten afbeeldingen gecombineerd van receptenwebsites en de ImageNet-dataset45 om het voedselbeelddetectiemodel te trainen. Aangezien de focus hier ligt op herkenning van voedselafbeeldingen en dit een optionele stap is voor het opschonen van de herkenningsgegevensset, worden verdere details weggelaten. In plaats daarvan zijn meer details over deze aanpak te vinden in Mezgec et al.2. Voer het detectiemodel uit vanaf stap 1.2.1 op de gegevensset met voedselafbeeldingen die het resultaat is van stap 1.1.4. Verwijder elke afbeelding die door het detectiemodel als non-food is getagd uit stap 1.2.1. Controleer de gegevensset van voedselafbeeldingen handmatig op andere onjuiste afbeeldingen of afbeeldingen van lage kwaliteit en op afbeeldingsduplicaties. Verwijder afbeeldingen in stap 1.2.4. De gegevensset voor voedselafbeeldingen vergroten Maak een nieuwe versie van elke afbeelding uit de voedselafbeeldingsgegevensset door deze 90° te roteren met behulp van de CLoDSA-bibliotheek46 (regels 19 tot en met 21 in het meegeleverde Python-script).OPMERKING: Het Python-script met alle CLoDSA-opdrachten die door de auteurs van dit artikel worden gebruikt, is te vinden in een bestand dat is opgenomen in de aanvullende bestanden (‘nutrinet_augmentation.py’). Als dit script wordt gebruikt, moeten het invoerpad (variabele ‘INPUT_PATH’, regel 8 in de Python-scriptcode) en uitvoerpad (variabele ‘OUTPUT_PATH’, regel 11 in de Python-scriptcode) worden vervangen door paden naar de gewenste mappen. Maak een nieuwe versie van elke afbeelding uit de gegevensset van de voedselafbeelding door deze 180° te roteren met behulp van de CLoDSA-bibliotheek (regels 19 tot en met 21 in het meegeleverde Python-script). Maak een nieuwe versie van elke afbeelding uit de gegevensset van de voedselafbeelding door deze 270° te roteren met behulp van de CLoDSA-bibliotheek (regels 19 tot en met 21 in het meegeleverde Python-script). Maak een nieuwe versie van elke afbeelding uit de gegevensset voedselafbeelding door deze horizontaal om te draaien met behulp van de CLoDSA-bibliotheek (regels 23 en 24 in het meegeleverde Python-script). Maak een nieuwe versie van elke afbeelding uit de gegevensset voedselafbeelding door er willekeurige kleurruis aan toe te voegen met behulp van de CLoDSA-bibliotheek (regels 26 en 27 in het meegeleverde Python-script). Maak een nieuwe versie van elke afbeelding uit de voedselafbeeldingsgegevensset door er met 25% op in te zoomen met behulp van de CLoDSA-bibliotheek (regels 29 en 30 in het meegeleverde Python-script). Sla afbeeldingen uit stap 1.3.1-1.3.6, samen met de originele afbeeldingen (lijnen 16 en 17 in het meegeleverde Python-script), op in een nieuwe gegevensset voor voedselafbeeldingen (in totaal 7 varianten per voedselafbeelding). Dit wordt gedaan door de opdracht uit te voeren in regel 32 van het meegeleverde Python-script. Het uitvoeren van voedselbeeldherkenning Importeer de voedselimagegegevensset van stap 1.3.7 in de NVIDIA DIGITS-omgeving47en verdeel de gegevensset in trainings-, validatie- en testsubsets in de NVIDIA DIGITS-gebruikersinterface. Kopieer en plak de definitietekst van de NutriNet-architectuur2 in NVIDIA DIGITS als een aangepast netwerk.OPMERKING: De NutriNet architectuurdefinitietekst is te vinden in de aanvullende bestanden (‘nutrinet.prototxt’). (Optioneel) Definieer trainingshyperparameters in de NVIDIA DIGITS-gebruikersinterface.OPMERKING: Hyperparameters zijn parameters die worden gebruikt om het trainingsproces vóór de start te definiëren. De hyperparameters die door de auteurs van dit artikel worden gebruikt, zijn te vinden in een bestand dat is opgenomen in de aanvullende bestanden (‘nutrinet_hyperparameters.prototxt’). Hoewel experimenten nodig zijn voor elke dataset om de optimale hyperparameters te vinden, bevat het bestand een hyperparameterconfiguratie die kan worden gekopieerd naar de NVIDIA DIGITS-gebruikersinterface. Bovendien vult NVIDIA DIGITS de hyperparameters met standaardwaarden die als basislijn kunnen worden gebruikt. Deze stap is daarom optioneel. Voer de training van het NutriNet-model uit. Nadat de training is voltooid, neemt u de best presterende NutriNet-model iteratie. Dit model wordt vervolgens gebruikt voor het testen van de prestaties van deze aanpak.OPMERKING: Er zijn meerdere manieren om de best presterende model iteratie te bepalen. Een eenvoudige manier om dit te doen is als volgt. NVIDIA DIGITS voert voor elk trainingstijdvak een grafiek met nauwkeurigheidsmetingen uit. Controleer welk tijdvak de laagste verlieswaarde heeft bereikt voor de validatiesubset van de voedselafbeeldingsgegevensset – die model iteratie kan worden beschouwd als het best presterende. Een optionele stap bij het bepalen van de best presterende model iteratie is om te observeren hoe de verlieswaarde voor de trainingssubset verandert van tijdvak naar tijdvak en als deze continu begint te dalen terwijl de verlieswaarde voor de validatiesubset hetzelfde blijft of continu stijgt, neem dan het tijdvak voorafgaand aan deze daling van de trainingsverlieswaarde, omdat dat kan aangeven wanneer het model op de trainingsafbeeldingen begon te overfitten. 2. Segmentatie van voedselafbeeldingen met FCN’s Het verkrijgen van de fake-food afbeelding dataset Verkrijg een dataset met nep-voedselafbeeldingen. Fake-food afbeeldingen worden verzameld door onderzoekers die gedragsstudies uitvoeren met behulp van voedselreplica’s.OPMERKING: De auteurs van dit artikel ontvingen afbeeldingen van nepvoedsel dat werd verzameld in een laboratoriumomgeving18. Maak handmatig aantekeningen bij elke voedselafbeelding op pixelniveau – elke pixel in de afbeelding moet informatie bevatten over tot welke voedselklasse deze behoort. Het resultaat van deze stap is één annotatieafbeelding voor elke afbeelding uit de voedselafbeeldingsgegevensset, waarbij elke pixel een van de voedselklassen vertegenwoordigt.OPMERKING: Er zijn veel tools om dit te bereiken – de auteurs van dit artikel gebruikten JavaScript Segment Annotator48. Uitbreiding van de dataset voor nep-voedselafbeeldingen Voer dezelfde stappen uit als in sectie 1.3, maar alleen op afbeeldingen uit de trainingssubset van de gegevensset met voedselafbeeldingen.OPMERKING: Met uitzondering van stap 1.3.5 moeten alle stappen voor gegevensvergroting ook op overeenkomstige annotatieafbeeldingen worden uitgevoerd. Als het script uit sectie 1.3 wordt gebruikt, moeten het invoerpad (variabele ‘INPUT_PATH’, regel 8 in de Python43-scriptcode) en het uitvoerpad (variabele ‘OUTPUT_PATH’, regel 11 in de Python-scriptcode) worden vervangen door paden naar de gewenste mappen. Stel daarnaast het probleem (variabele ‘PROBLEM’, regel 6 in de Python-scriptcode) in op ‘instance_segmentation’ en de annotatiemodus (variabele ‘ANNOTATION_MODE’, regel 7 in de Python-scriptcode) en uitvoermodus (variabele ‘OUTPUT_MODE’, regel 10 in de Python-scriptcode) op ‘coco’. Het uitvoeren van fake-food beeldsegmentatie Voer dezelfde stappen uit als in punt 1.4, met uitzondering van stap 1.4.2. Voer in plaats van die stap de stappen 2.3.2 en 2.3.3 uit.OPMERKING: Hyperparameters zijn parameters die worden gebruikt om het trainingsproces vóór de start te definiëren. De trainingshyperparameters die door de auteurs van dit artikel worden gebruikt voor de optionele stap 1.4.3 zijn te vinden in een bestand dat is opgenomen in de aanvullende bestanden (‘fcn-8s_hyperparameters.prototxt’). Hoewel experimenten nodig zijn voor elke dataset om de optimale set hyperparameters te vinden, bevat het bestand een hyperparameterconfiguratie die kan worden gekopieerd naar de NVIDIA DIGITS 47-gebruikersinterface. Bovendien vult NVIDIA DIGITS de hyperparameters met standaardwaarden die als basislijn kunnen worden gebruikt. Kopieer en plak de definitietekst van de FCN-8s architectuur15 als een aangepast netwerk in de NVIDIA DIGITS-omgeving.OPMERKING: De FCN-8s architectuurdefinitietekst is openbaar beschikbaar op GitHub49. Voer het pad naar de vooraf getrainde FCN-8s-modelgewichten in de NVIDIA DIGITS-gebruikersinterface in.OPMERKING: Deze modelgewichten zijn vooraf getraind op de PASCAL VOC-gegevensset17 en zijn te vinden op Internet49. 3. Segmentatie van voedselafbeeldingen met HTC ResNet Het verkrijgen van de voedselbeeldgegevensset Download de voedselafbeeldingsgegevensset van de FRC-website19. De gegevensset voor voedselafbeeldingen vergroten Voer stap 1.3.1-1.3.4 uit.OPMERKING: Het Python43-script met alle CLoDSA46-opdrachten die door de auteurs van dit artikel worden gebruikt, is te vinden in een bestand dat is opgenomen in de aanvullende bestanden (‘frc_augmentation.py’). Als dit script wordt gebruikt, moeten het invoerpad (variabele ‘INPUT_PATH’, regel 8 in de Python-scriptcode) en uitvoerpad (variabele ‘OUTPUT_PATH’, regel 11 in de Python-scriptcode) worden vervangen door paden naar de gewenste mappen. Maak een nieuwe versie van elke afbeelding uit de gegevensset voedselafbeelding door er Gaussiaanse vervaging aan toe te voegen met behulp van de CLoDSA-bibliotheek (regels 26 en 27 in het meegeleverde Python-script). Maak een nieuwe versie van elke afbeelding uit de gegevensset voedselafbeelding door deze te verscherpen met behulp van de CLoDSA-bibliotheek (regels 29 en 30 in het meegeleverde Python-script). Maak een nieuwe versie van elke afbeelding uit de gegevensset van de voedselafbeelding door er gammacorrectie op toe te passen met behulp van de CLoDSA-bibliotheek (regels 32 en 33 in het meegeleverde Python-script). Sla afbeeldingen uit stap 3.2.1-3.2.4, samen met de originele afbeeldingen (lijnen 16 en 17 in het meegeleverde Python-script), op in een nieuwe gegevensset voor voedselafbeeldingen (in totaal 8 varianten per voedselafbeelding). Dit wordt gedaan door de opdracht uit te voeren in regel 35 van het meegeleverde Python-script. Sla afbeeldingen uit stap 3.2.2-3.2.4, samen met de originele afbeeldingen (lijnen 16 en 17 in het meegeleverde Python-script), op in een nieuwe voedselafbeeldingsgegevensset (in totaal 4 varianten per voedselafbeelding). Dit wordt gedaan door regels 19 tot en met 24 van het meegeleverde Python-script te verwijderen en de opdracht in regel 35 uit te voeren. Segmentatie van voedselafbeeldingen uitvoeren Wijzig de bestaande HTC20 ResNet-101 architectuur16-definitie uit de MMDetection-bibliotheek50 in secties ‘modelinstellingen’ en ‘gegevenssetinstellingen’ van het architectuurdefinitiebestand, zodat deze de voedselafbeeldingsgegevenssets uit stap 3.1.1, 3.2.5 en 3.2.6 accepteert. (Optioneel) Wijzig de HTC ResNet-101 architectuurdefinitie uit stap 3.3.1 om trainingshyperparameters te definiëren: batchgrootte in sectie ‘dataset-instellingen’, oplossertype en leersnelheid in sectie ‘optimizer’, leerbeleid in sectie ‘leerbeleid’ en aantal trainingstijdvakken in sectie ‘runtime-instellingen’ van het architectuurdefinitiebestand.OPMERKING: Het gewijzigde HTC ResNet-101 architectuurdefinitiebestand is te vinden in de aanvullende bestanden (‘htc_resnet-101.py’). Hyperparameters zijn parameters die worden gebruikt om het trainingsproces vóór de start te definiëren. Hoewel experimenten nodig zijn voor elke gegevensset om de optimale set hyperparameters te vinden, bevat het bestand al een hyperparameterconfiguratie die zonder wijziging kan worden gebruikt. Deze stap is daarom optioneel. Voer de training van het HTC ResNet-101-model uit op de voedselafbeeldingsgegevensset uit stap 3.1.1 met behulp van de MMDetection-bibliotheek (bijvoorbeeld met de opdracht: ‘python mmdetection/tools/train.py htc_resnet-101.py’). Nadat de training van stap 3.3.3 is voltooid, neemt u de best presterende HTC ResNet-101-model iteratie en verfijnt u deze door de volgende fase van de training uit te voeren op de voedselafbeeldingsgegevensset vanaf stap 3.2.5.OPMERKING: Er zijn meerdere manieren om de best presterende model iteratie te bepalen. Een eenvoudige manier om dit te doen is als volgt. De MMDetection-bibliotheek voert nauwkeurigheidswaarden uit voor elk trainingstijdvak in de opdrachtregelinterface. Controleer welk tijdvak de laagste verlieswaarde heeft bereikt voor de validatiesubset van de voedselafbeeldingsgegevensset – die model iteratie kan worden beschouwd als het best presterende. Een optionele stap bij het bepalen van de best presterende model iteratie is om te observeren hoe de verlieswaarde voor de trainingssubset verandert van tijdvak naar tijdvak en als deze continu begint te dalen terwijl de verlieswaarde voor de validatiesubset hetzelfde blijft of continu stijgt, neem dan het tijdvak voorafgaand aan deze daling van de trainingsverlieswaarde, omdat dat kan aangeven wanneer het model op de trainingsafbeeldingen begon te overfitten. Nadat de training van stap 3.3.4 is voltooid, neemt u de best presterende HTC ResNet-101-model iteratie en verfijnt u deze door de volgende fase van de training uit te voeren op de voedselafbeeldingsgegevensset vanaf stap 3.2.6.OPMERKING: Zie opmerking voor stap 3.3.4. Nadat de training van stap 3.3.5 is voltooid, neemt u de best presterende HTC ResNet-101-model iteratie en verfijnt u deze door opnieuw de volgende fase van de training uit te voeren op de voedselafbeeldingsgegevensset vanaf stap 3.2.5.OPMERKING: Zie opmerking voor stap 3.3.4. Nadat de training van stap 3.3.6 is voltooid, neemt u de best presterende HTC ResNet-101-model iteratie. Dit model wordt vervolgens gebruikt voor het testen van de prestaties van deze aanpak.OPMERKING: Zie opmerking voor stap 3.3.4. Stappen 3.3.3-3.3.7 leverden de beste resultaten op voor de doeleinden die door de auteurs van dit artikel zijn gedefinieerd. Experimenten zijn nodig voor elke gegevensset om de optimale volgorde van trainings- en gegevensvergrotingsstappen te vinden.

Representative Results

NutriNet werd getest tegen drie populaire deep learning-architecturen uit die tijd: AlexNet14, GoogLeNet51 en ResNet16. Er zijn ook meerdere trainingsparameters getest voor alle architecturen om de optimale waarden te definiëren2. Onder deze is de keuze van het oplossertype, dat bepaalt hoe de verliesfunctie wordt geminimaliseerd. Deze functie is de primaire kwaliteitsmaat voor het trainen van neurale netwerken, omdat deze beter geschikt is voor optimalisatie tijdens de training dan classificatienauwkeurigheid. We hebben drie oplossers getest: Stochastic Gradient Descent (SGD)52, Nesterov’s Accelerated Gradient (NAG)53 en het Adaptive Gradient algorithm (AdaGrad)54. De tweede parameter is batchgrootte, waarmee het aantal afbeeldingen wordt gedefinieerd dat tegelijkertijd wordt verwerkt. De diepte van de deep learning-architectuur bepaalde de waarde van deze parameter, omdat diepere architecturen meer ruimte in het GPU-geheugen vereisen – het gevolg van deze aanpak was dat het geheugen volledig was gevuld met afbeeldingen voor alle architecturen, ongeacht de diepte. De derde parameter is de leersnelheid, die de snelheid definieert waarmee de neurale netwerkparameters tijdens de training worden gewijzigd. Deze parameter is eensgezind ingesteld met de batchgrootte, omdat het aantal gelijktijdig verwerkte afbeeldingen de convergentiesnelheid bepaalt. AlexNet-modellen werden getraind met behulp van een batchgrootte van 256 afbeeldingen en een basisleersnelheid van 0,02; NutriNet gebruikte een batchgrootte van 128 afbeeldingen en een snelheid van 0,01; GoogLeNet 64 afbeeldingen en een snelheid van 0.005; en ResNet 16-afbeeldingen en een snelheid van 0,00125. Voor alle architecturen werden drie andere parameters vastgesteld: leersnelheidsbeleid (step-down), stapgrootte (30%) en gamma (0,1). Deze parameters beschrijven samen hoe de leersnelheid in elk tijdvak verandert. Het idee achter deze aanpak is dat het leertempo geleidelijk wordt verlaagd om het model te verfijnen naarmate het dichter bij de optimale verlieswaarde komt. Ten slotte werd het aantal opleidingstijdvakken ook vastgesteld op 150 voor alle deep learning-architecturen2. Het beste resultaat van alle geteste parameters die NutriNet behaalde, was een classificatienauwkeurigheid van 86,72% op de herkenningsgegevensset, die ongeveer 2% hoger was dan het beste resultaat voor AlexNet en iets hoger dan het beste resultaat van GoogLeNet. De best presterende architectuur in het algemeen was ResNet (met ongeveer 1%), maar de trainingstijd voor ResNet is aanzienlijk hoger in vergelijking met NutriNet (met een factor van ongeveer vijf), wat belangrijk is als modellen voortdurend opnieuw worden getraind om de nauwkeurigheid en het aantal herkenbare voedingsmiddelen te verbeteren. NutriNet, AlexNet en GoogLeNet behaalden hun beste resultaten met behulp van de AdaGrad-oplosser, terwijl het beste model van ResNet de NAG-oplosser gebruikte. NutriNet werd ook getest op de openbaar beschikbare UNIMIB2016 food image dataset38. Deze dataset bevat 3.616 afbeeldingen van 73 verschillende food items. NutriNet behaalde een herkenningsnauwkeurigheid van 86,39% op deze dataset en presteerde iets beter dan het baseline-herkenningsresultaat van de auteurs van de dataset, namelijk 85,80%. Bovendien werd NutriNet getest op een kleine dataset van 200 real-world afbeeldingen van 115 verschillende etens- en drinkwaren, waar NutriNet een top-5 nauwkeurigheid van 55% bereikte. Om het FCN-8s fake-food beeldsegmentatiemodel te trainen, gebruikten we Adam55 als oplossertype, omdat we ontdekten dat het optimaal presteerde voor deze taak. Het basisleerpercentage was zeer laag ingesteld – tot 0,0001. De reden voor het lage getal is het feit dat slechts één afbeelding tegelijk kon worden verwerkt, wat een gevolg is van het classificatieproces op pixelniveau. De GPU-geheugenvereisten voor deze aanpak zijn aanzienlijk groter dan classificatie op afbeeldingsniveau. Het leertempo moest dus laag worden ingesteld, zodat de parameters niet te snel werden gewijzigd en naar minder optimale waarden werden geconvergeerd. Het aantal trainingstijdvakken werd ingesteld op 100, terwijl het leersnelheidsbeleid, de stapgrootte en gamma werden ingesteld op respectievelijk 34% en 0,1, omdat deze parameters de meest nauwkeurige modellen produceerden. Nauwkeurigheidsmetingen van het FCN-8s-model werden uitgevoerd met behulp van de pixelnauwkeurigheidsmaat15, die analoog is aan de classificatienauwkeurigheid van traditionele deep learning-netwerken, met als belangrijkste verschil dat de nauwkeurigheid wordt berekend op pixelniveau in plaats van op afbeeldingsniveau: waarbij PA de pixelnauwkeurigheidsmaat is, is nij het aantal pixels uit klasse waarvan ik voorspelde dat het tot klasse j en ti = Σj nij zou behoren, het totale aantal pixels uit klasse in de grond-waarheidslabels1. Met andere woorden, de pixelnauwkeurigheidsmaat wordt berekend door correct voorspelde pixels te delen door het totale aantal pixels. De uiteindelijke nauwkeurigheid van het getrainde FCN-8s model was 92,18%. Figuur 2 toont drie voorbeeldafbeeldingen uit de dataset voor nep-voedselafbeeldingen (één van elk van de subsets voor training, validatie en testen), samen met de bijbehorende grondwaarheids- en modelvoorspellingslabels. De parameters voor het trainen van het HTC20 ResNet-101-model voor segmentatie van voedselafbeeldingen werden als volgt ingesteld: het gebruikte solvertype was SGD omdat het beter presteerde dan andere oplossertypen. De basisleersnelheid is ingesteld op 0,00125 en de batchgrootte op 2 afbeeldingen. Het aantal trainingstijdvakken werd ingesteld op 40 per trainingsfase en er werden meerdere trainingsfasen uitgevoerd – eerst op de originele FRC-dataset zonder augmented images, vervolgens op de 8x-augmented en 4x-augmented FRC dataset meerdere keren op een afwisselende manier, waarbij telkens het best presterende model werd genomen en verfijnd in de volgende trainingsfase. Meer informatie over de trainingsfasen is te vinden in paragraaf 3.3 van de protocoltekst. Ten slotte werd het afbouwleerbeleid gebruikt, met vaste tijdperken voor wanneer het leertempo daalde (tijdvakken 28 en 35 voor de eerste opleidingsfase). Een belangrijk ding om op te merken is dat hoewel deze reeks trainingsfasen de beste resultaten heeft opgeleverd in onze tests in het bereik van de FRC, het gebruik van een andere dataset mogelijk een andere reeks vereist om optimale resultaten te produceren. Deze op ResNet gebaseerde oplossing voor segmentatie van voedselimage werd geëvalueerd met behulp van de volgende precisiemaat19: waar P precisie is, is TP het aantal echte positieve voorspellingen door het segmentatiemodel voor voedselafbeeldingen, FP is het aantal fout-positieve voorspellingen en IoU is Intersection over Union, dat wordt berekend met deze vergelijking: waarbij Area of Overlap het aantal voorspellingen van het model vertegenwoordigt dat overlapt met de grondwaarheid, en Area of Union het totale aantal voorspellingen van het model samen met de grondwaarheid vertegenwoordigt, zowel op pixelniveau als voor elke individuele voedselklasse. Recall wordt gebruikt als secundaire meting en wordt op dezelfde manier berekend met behulp van de volgende formule19: waarbij R wordt teruggeroepen en FN het aantal valse negatieve voorspellingen is door het segmentatiemodel voor voedselafbeeldingen. De precisie- en terugroepmaatregelen worden vervolgens gemiddeld over alle klassen in de grondwaarheid. Met behulp van deze maatregelen bereikte ons model een gemiddelde precisie van 59,2% en een gemiddelde terugroepactie van 82,1%, die tweede werd in de tweede ronde van de Food Recognition Challenge19. Dit resultaat lag 4,2% achter op de eerste plaats en 5,3% op de derde plaats in termen van de gemiddelde precisiemeting. Tabel 1 bevat de uitslagen van de top-4 deelnemers aan de wedstrijd. Figuur 1: Diagram van de NutriNet deep neural network architecture. Dit cijfer is gepubliceerd in Mezgec et al.2. Klik hier om een grotere versie van deze figuur te bekijken. Figuur 2: Afbeeldingen uit de fake-food image dataset. Originele afbeeldingen (links), handmatig gelabelde ground-truth labels (midden) en voorspellingen uit het FCN-8s model (rechts). Dit cijfer is gepubliceerd in Mezgec et al.1. Klik hier om een grotere versie van deze figuur te bekijken. Teamnaam Plaatsing Gemiddelde precisie Gemiddelde terugroepactie rssfete 1 63.4% 88.6% simon_mezgec 2 59.2% 82.1% arimboux 3 53.9% 73.5% latentvec 4 48.7% 71.1% Tabel 1: Top-4 resultaten van de tweede ronde van de Food Recognition Challenge. Gemiddelde precisie wordt als primaire prestatiemaat en gemiddelde terugroepactie als secundaire meting genomen. De uitslagen zijn ontleend aan het officiële wedstrijdklassement19. Aanvullende bestanden. Klik hier om dit Bestand te downloaden.

Discussion

In de afgelopen jaren zijn diepe neurale netwerken meerdere keren gevalideerd als een geschikte oplossing voor het herkennen van voedselbeelden10,11,12,21,23,25,26,29,31,33. Ons werk gepresenteerd in dit artikel dient om dit verder te bewijzen1,2. De benadering voor het herkennen van voedselafbeeldingen met één uitvoer is eenvoudig en kan worden gebruikt voor eenvoudige toepassingen waarbij afbeeldingen met slechts één voedsel- of drankartikel worden verwacht2.

De benadering van voedselimagosegmentatie lijkt bijzonder geschikt voor het herkennen van voedselafbeeldingen in het algemeen, zonder enige beperking van het aantal levensmiddelen1. Omdat het werkt door elke afzonderlijke pixel van de afbeelding te classificeren, kan het niet alleen een willekeurig aantal voedselitems in de afbeelding herkennen, maar ook opgeven waar een voedselitem zich bevindt en hoe groot het is. Dit laatste kan vervolgens worden gebruikt om voedselgewichtsschatting uit te voeren, vooral als het wordt gebruikt met een referentieobject of een camera met vaste afstand.

Er is wat werk verricht met betrekking tot de beschikbaarheid van voedselbeeldgegevenssets3,22,27,30,36,37,38,39,40,41,42, en we hopen dat er in de toekomst meer zal worden gedaan, vooral als het gaat om het aggregeren van voedselbeeldgegevenssets uit verschillende regio’s over de hele wereld, waardoor robuustere oplossingen kunnen worden ontwikkeld. Momenteel heeft de nauwkeurigheid van automatische oplossingen voor voedselbeeldherkenning de nauwkeurigheid op menselijk niveau nog niet bereikt35, en dit is waarschijnlijk voor een groot deel te wijten aan het gebruik van voedselbeeldgegevenssets van onvoldoende grootte en kwaliteit.

In de toekomst zal ons doel zijn om de ontwikkelde procedures voor echte beelden verder te evalueren. Over het algemeen bevatten gegevenssets in dit veld vaak afbeeldingen die zijn gemaakt in gecontroleerde omgevingen of afbeeldingen die handmatig zijn geoptimaliseerd voor herkenning. Daarom is het belangrijk om een grote en diverse dataset voor voedselafbeeldingen in de echte wereld te verzamelen om alle verschillende voedsel- en drankproducten te omvatten die individuen misschien willen herkennen. De eerste stap hiertoe werd gezet door de Food Recognition Challenge, die een dataset van echte voedselbeelden19bevatte, maar er moet verder worden gewerkt aan het valideren van deze aanpak op voedselbeelden van over de hele wereld en in samenwerking met diëtisten.

Disclosures

The authors have nothing to disclose.

Acknowledgements

De auteurs willen Tamara Bucher van de Universiteit van Newcastle, Australië, bedanken voor het verstrekken van de dataset met nep-voedselafbeeldingen. Dit werk werd ondersteund door de onderzoeks- en innovatieprogramma’s horizon 2020 van de Europese Unie (subsidienummers 863059 – FNS-Cloud, 769661 – SAAM); en het Sloveense onderzoeksbureau (subsidienummer P2-0098). De Europese Unie en het Sloveense Onderzoeksbureau hadden geen rol bij het ontwerp, de analyse of het schrijven van dit artikel.

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