Waiting
Login processing...

Trial ends in Request Full Access Tell Your Colleague About Jove
Click here for the English version

Engineering

Deep Neural Networks für imagebasierte Ernährungsbewertung

Published: March 13, 2021 doi: 10.3791/61906

Summary

Ziel der in diesem Artikel vorgestellten Arbeit ist es, Technologien zur automatisierten Erkennung von Lebensmitteln und Getränken aus Bildern mobiler Geräte zu entwickeln. Die Technologie besteht aus zwei verschiedenen Ansätzen - der erste führt die Lebensmittelbilderkennung durch, während der zweite die Segmentierung von Lebensmittelbildern durchführt.

Abstract

Aufgrund der Probleme und Kosten, die mit manuellen Ernährungsbewertungsansätzen verbunden sind, sind automatisierte Lösungen erforderlich, um die Arbeit zu erleichtern und zu beschleunigen und ihre Qualität zu erhöhen. Heute sind automatisierte Lösungen in der Lage, die Nahrungsaufnahme einer Person auf eine viel einfachere Weise aufzuzeichnen, z. B. indem sie ein Bild mit einer Smartphone-Kamera aufnehmen. In diesem Artikel werden wir uns auf solche bildbasierten Ansätze zur Ernährungsbewertung konzentrieren. Für das Problem der Lebensmittelbilderkennung haben tiefe neuronale Netze in den letzten Jahren den Stand der Technik erreicht, und wir stellen unsere Arbeit in diesem Bereich vor. Insbesondere beschreiben wir zunächst die Methode zur Erkennung von Lebensmitteln und Getränken mit Hilfe einer tiefen neuronalen Netzwerkarchitektur namens NutriNet. Diese Methode ist, wie die meisten Forschungen in den frühen Tagen der Deep Learning-basierten Lebensmittelbilderkennung, auf eine Ausgabe pro Bild beschränkt und daher für Bilder mit mehreren Lebensmitteln oder Getränken ungeeignet. Aus diesem Grund sind Ansätze, die die Segmentierung von Lebensmittelbildern durchführen, wesentlich robuster, da sie in der Lage sind, eine beliebige Anzahl von Lebensmitteln oder Getränken im Bild zu identifizieren. Wir stellen daher auch zwei Methoden zur Segmentierung von Lebensmitteln vor - eine basiert auf vollständig konvolutionalen Netzwerken (FCNs) und die andere auf tiefen Restnetzwerken (ResNet).

Introduction

Die Ernährungsbewertung ist ein entscheidender Schritt bei der Bestimmung umsetzbarer Bereiche der individuellen Ernährung. Die Durchführung einer Ernährungsbewertung mit traditionell manuellen Ansätzen ist jedoch mit erheblichen Kosten verbunden. Diese Ansätze sind auch fehleranfällig, da sie oft auf selbstgemeldeten Personen beruhen. Die automatisierte Ernährungsbewertung behebt diese Probleme, indem sie eine einfachere Möglichkeit bietet, die Nahrungsaufnahme zu quantifizieren und zu qualifizieren. Ein solcher Ansatz kann auch einige der Fehler lindern, die in manuellen Ansätzen auftreten, wie verpasste Mahlzeiten, Unfähigkeit, das Lebensmittelvolumen genau zu beurteilen usw. Daher bietet die Automatisierung der Ernährungsbewertung klare Vorteile, indem Lösungen entwickelt werden, die verschiedene Lebensmittel und Getränke identifizieren und die Nahrungsaufnahme quantifizieren1. Diese Lösungen können auch verwendet werden, um eine Schätzung der Nährwerte von Lebensmitteln und Getränken (daher "Lebensmittel") zu ermöglichen. Folglich ist eine automatisierte Ernährungsbewertung für mehrere Anwendungen nützlich - von rein medizinischen Anwendungen, wie z. B. von Diätassistenten, die die Ernährung ihrer Patienten leichter und genauer verfolgen und analysieren können, bis hin zur Nutzung innerhalb von Wohlfühl-Apps, die auf die allgemeine Bevölkerung ausgerichtet sind.

Das automatische Erkennen von Lebensmitteln aus Bildern ist ein schwieriges Computer-Vision-Problem. Dies ist darauf zurückzuführen, dass Lebensmittel in der Regel verformbare Objekte sind, und aufgrund der Tatsache, dass eine große Menge der visuellen Informationen des Lebensmittels während seiner Zubereitung verloren gehen kann. Darüber hinaus können verschiedene Lebensmittel sehr ähnlich zueinander zu sein scheinen, und die gleiche Nahrung kann auf mehreren Bildern erheblich unterschiedlich erscheinen2. Darüber hinaus hängt die Erkennungsgenauigkeit von vielen weiteren Faktoren ab, wie z. B. der Bildqualität, davon, ob das Lebensmittel durch ein anderes Element behindert wird, Entfernung, von der das Bild aufgenommen wurde, usw. Das Erkennen von Getränken stellt seine eigenen Herausforderungen dar, wobei die hauptbegrenzte Menge an visuellen Informationen, die in einem Bild verfügbar ist, die wichtigste ist. Diese Information kann die Getränkefarbe, GetränkebehälterFarbe und -struktur und, unter optimalen Bildbedingungen, die Getränkedichte2sein.

Um Lebensmittel aus Bildern erfolgreich zu erkennen, ist es notwendig, die Funktionen jeder Lebensmittel- und Getränkeklasse zu erlernen. Dies wurde traditionell mit manuell definierten Feature-Extraktoren3,4,5,6, die Erkennung basierend auf bestimmten Element-Features wie Farbe, Textur, Größe, etc. oder eine Kombination dieser Features durchführen. Beispiele für diese Feature-Extraktoren sind mehrere Kernel-Lernen4, paarweise lokale Funktionen5 und die Tasche-of-Features-Modell6. Aufgrund der Komplexität der Lebensmittelbilder erreichten diese Ansätze meist eine geringe Klassifizierungsgenauigkeit - zwischen 10% und 40%3,4,5. Der Grund dafür ist, dass der manuelle Ansatz nicht robust genug ist, um ausreichend genau zu sein. Da ein Lebensmittel im Aussehen erheblich variieren kann, ist es nicht möglich, all diese Abweichungen manuell zu umfassen. Eine höhere Klassifizierungsgenauigkeit kann mit manuell definierten Feature-Extraktoren erreicht werden, wenn entweder die Anzahl der Lebensmittelklassen5reduziert wird oder verschiedene Bildmerkmale kombiniert werden6, was darauf hinweist, dass es einen Bedarf an komplexeren Lösungen für dieses Problem gibt.

Aus diesem Grund hat sich Deep Learning als so effektiv für das Problem der Lebensmittelbilderkennung erwiesen. Deep Learning, oder tiefe neuronale Netzwerke, wurde von biologischen Gehirnen inspiriert und ermöglicht es Rechenmodellen, die aus mehreren Verarbeitungsschichten bestehen, Automatisch Features durch Training auf einer Reihe von Eingabebildern zu erlernen7,8. Aus diesem Grund hat Deep Learning den Stand der Technik in einer Vielzahl von Forschungsbereichen wesentlich verbessert7, mit Computer-Vision, und in der Folge Lebensmittel-Bild-Erkennung, einer von ihnen2.

Insbesondere tiefkonvolutionale neuronale Netzwerke (DCNNs) sind am beliebtesten für die Erkennung von Lebensmittelbildern - diese Netzwerke sind vom visuellen System der Tiere inspiriert, wo einzelne Neuronen versuchen, ein Verständnis des visuellen Inputs zu erlangen, indem sie auf überlappende Bereiche im Gesichtsfeld reagieren9. Ein konvolutionales neuronales Netzwerk nimmt das Eingabebild auf und führt eine Reihe von Operationen in jeder der Netzwerkschichten durch, von denen die häufigsten faltige, voll verbundene und poolierende Schichten sind. Konvolutionale Layer enthalten lernbare Filter, die auf bestimmte Features in den Eingabedaten reagieren, während voll verbundene Layer Ausgabedaten aus anderen Layern zusammenstellen, um mehr Wissen daraus zu gewinnen. Das Ziel des Poolens von Layern besteht darin, die Eingabedaten2herunterzusampeln. Es gibt zwei Ansätze für die Verwendung von Deep Learning-Modellen, die sich als beliebt erwiesen haben: eine vorhandene Tiefe-Neuralnetzwerk-Definition10,11, die in diesem Artikel als Deep Learning-Architektur bezeichnet wird, oder die Definition einer neuen Deep Learning-Architektur12,13, und das Training einer dieser Daten in einem Food-Image-Dataset. Beide Ansätze haben Stärken und Schwächen - bei verwendung einer vorhandenen Deep Learning-Architektur kann eine Architektur ausgewählt und auf das gewünschte Problem abgestimmt werden, wodurch Zeit gespart und sichergestellt wird, dass eine validierte Architektur ausgewählt wurde. Die Definition einer neuen Deep-Learning-Architektur hingegen ist zeitaufwändiger, ermöglicht aber die Entwicklung von Architekturen, die speziell gemacht werden, um die Besonderheiten eines Problems zu berücksichtigen und somit theoretisch besser für dieses Problem zu arbeiten.

In diesem Artikel stellen wir beide Ansätze vor. Für das Problem der Lebensmittelbilderkennung haben wir eine neuartige DCNN-Architektur namens NutriNet2entwickelt, die eine Modifikation der bekannten AlexNet-Architektur14darstellt. Im Vergleich zu AlexNet gibt es zwei Hauptunterschiede: NutriNet akzeptiert 512x512-Pixel-Bilder als Eingabe (im Gegensatz zu 256x256-Pixel-Bildern für AlexNet), und NutriNet hat eine zusätzliche faltige Schicht am Anfang des neuronalen Netzwerks. Diese beiden Änderungen wurden eingeführt, um so viele Informationen wie möglich aus den Bildern des Erkennungsdatensatzes zu extrahieren. Mit bildern mit höherer Auflösung gab es mehr Informationen über Bilder und mehr faltige Schichten bedeutete, dass zusätzliches Wissen aus den Bildern extrahiert werden konnte. Im Vergleich zu den rund 60 Millionen Parametern von AlexNet enthält NutriNet weniger Parameter: rund 33 Millionen. Dies liegt an dem Unterschied in der Dimensionalität an der ersten voll verbundenen Schicht, der durch die zusätzliche Faltschicht2verursacht wird. Abbildung 1 enthält ein Diagramm der NutriNet-Architektur. Die Lebensmittelbilder, die zum Trainieren des NutriNet-Modells verwendet wurden, wurden aus dem Internet gesammelt - das Verfahren wird im Protokolltext beschrieben.

Für das Problem der Lebensmittelbildsegmentierung haben wir zwei verschiedene bestehende Architekturen verwendet: voll konvolutionale Netzwerke (FCNs)15 und Deep Residual Networks (ResNet)16, die beide den Stand der Technik für die Bildsegmentierung darstellten, als wir sie zur Entwicklung ihrer jeweiligen Lösungen zur Segmentierung von Lebensmittelbildern nutzten. Es gibt mehrere FCN-Varianten, die von Long et al. eingeführt wurden: FCN-32s, FCN-16s und FCN-8s15. FCN-32s gibt eine Pixelkarte basierend auf den Vorhersagen des endgültigen Layers des FCN aus, während die FCN-16s-Variante diese Vorhersagen mit denen eines früheren Layers kombiniert. FCN-8s berücksichtigt eine weitere Schicht Vorhersagen und ist daher in der Lage, Vorhersagen in feinstem Korn zu machen, weshalb es für die Erkennung von Lebensmittelbildern geeignet ist. Die FCN-8s, die wir verwendet haben, wurden im PASCAL Visual Object Classes (PASCAL VOC)-Datensatz17 vortrainiert und auf Bildern von Lebensmittelreplikaten (daher "Fake Food")18 trainiert und getestet, da sie optisch mit echtem Essen und aufgrund des Fehlens von kommentierten Bildern von echtem Essen auf Pixelebene gleichgestellt wurden. Gefälschte Lebensmittel werden in verschiedenen Verhaltensstudien verwendet und Bilder werden für alle Gerichte von allen Studienteilnehmern aufgenommen. Da der Lebensmittelinhalt dieser Bilder bekannt ist, macht es das Bild-Dataset nützlich für Deep Learning-Modellschulungen. Die Verarbeitungsschritte für Datasets werden im Protokolltext beschrieben.

Die ResNet-basierte Lösung wurde im Rahmen der Food Recognition Challenge (FRC)19entwickelt. Es verwendet die Hybrid Task Cascade (HTC)20 Methode mit einem ResNet-10116 Backbone. Dies ist ein state-of-the-art-Ansatz für das Problem der Bildsegmentierung, der verschiedene Feature-Extraktoren oder Backbones verwenden kann. Wir betrachteten auch andere Backbone-Netzwerke, insbesondere andere ResNet-Varianten wie ResNet-5016, aber ResNet-101 war aufgrund seiner Tiefe und Fähigkeit, Eingabebilder auf komplexe Weise darzustellen, am besten geeignet. Das Dataset, das zum Trainieren des HTC ResNet-101-Modells verwendet wurde, war das FRC-Dataset mit zusätzlichen erweiterten Bildern. Diese Erweiterungen werden im Protokolltext dargestellt.

Dieser Artikel ist als Ressource für Machine Learning-Experten gedacht, die nach Informationen suchen, welche Deep Learning-Architekturen und Datenerweiterungsschritte für die Probleme der Lebensmittelbilderkennung und -segmentierung gut funktionieren, sowie für Ernährungsforscher, die unseren Ansatz zur Automatisierung der Lebensmittelbilderkennung für die Ernährungsbewertung nutzen möchten. In den folgenden Absätzen werden Deep Learning-Lösungen und Datensätze aus dem Lebensmittelbilderkennungsfeld vorgestellt. Im Protokolltext beschreiben wir, wie jeder der drei Ansätze verwendet wurde, um tiefe neuronale Netzwerkmodelle zu trainieren, die für die automatisierte Ernährungsbewertung verwendet werden können. Darüber hinaus enthält jeder Protokollabschnitt eine Beschreibung, wie die für Schulungen und Tests verwendeten Food-Image-Datasets erfasst und verarbeitet wurden.

DCNNs erzielten im Allgemeinen wesentlich bessere Ergebnisse als andere Methoden zur Erkennung und Segmentierung von Lebensmitteln, weshalb die überwiegende Mehrheit der jüngsten Forschungen auf diesem Gebiet auf diesen Netzwerken basiert. Kawano et al. verwendeten DCNNs zur Ergänzung manueller Ansätze21 und erreichten eine Klassifizierungsgenauigkeit von 72,26% auf den UEC-FOOD100 Datensatz22. Christodoulidis et al. verwendeten sie ausschließlich, um eine höhere Genauigkeit von 84,90% auf einem selbst erworbenen Datensatz zu erreichen23. Tanno et al. entwickelten DeepFoodCam - eine Smartphone-App zur Erkennung von Lebensmitteln, die DCNNs24verwendet. Liu et al. stellten ein System vor, das eine Internet of Things-basierte Ernährungsbewertung mit DCNNs25durchführt. Martinel et al. führten einen DCNN-basierten Ansatz ein, der die Besonderheiten von Lebensmittelbildern26 ausnutzt und eine Genauigkeit von 90,27% auf den Food-101-Datensatz27meldet. Zhou et al. verfassten eine Rezension von Deep Learning-Lösungen im Lebensmittelbereich28.

Vor kurzem schlugen Zhao et al. ein Netzwerk speziell für die Erkennung von Lebensmitteln in mobilen Anwendungen29vor. Dieser Ansatz verwendet ein kleineres "Schüler"-Netzwerk, das von einem größeren "Lehrer"-Netzwerk lernt. Damit erreichten sie eine Genauigkeit von 84 % auf dem UEC-FOOD25630 und eine Genauigkeit von 91,2 % auf dem Food-101-Datensatz27. Hafiz et al. verwendeten DCNNs, um eine reine Bilderkennungslösung für Getränke zu entwickeln und berichteten von einer sehr hohen Genauigkeit von 98,51%31. Shimoda et al. beschrieben eine neuartige Methode zur Erkennung von Plattenregionen in Lebensmittelbildern ohne die Verwendung von pixelweisenAnmerkungen 32. Ciocca et al. stellten einen neuen Datensatz mit Lebensmitteln aus 20 verschiedenen Lebensmittelklassen in 11 verschiedenen Zuständen (fest, in Scheiben geschnitten, cremige Paste usw.) vor und stellten ihren Ansatz für die Ausbildung von Anerkennungsmodellen vor, die in der Lage sind, den Lebensmittelzustand zu erkennen, zusätzlich zur Lebensmittelklasse33. Knez et al. evaluierten Lebensmittelbilderkennungslösungen für mobile Geräte34. Schließlich führten Furtado et al. eine Studie darüber durch, wie das menschliche visuelle System mit der Leistung von DCNNs verglichen wird, und fanden heraus, dass die menschliche Erkennung DCNNs immer noch mit einer Genauigkeit von 80% gegenüber 74,5%35übertrifft. Die Autoren stellten fest, dass bei einer kleinen Anzahl von Lebensmittelklassen die DCNNs gut abschneiden, aber bei einem Datensatz mit Hunderten von Klassen ist die Genauigkeit der menschlichen Erkennung höher35 ,was die Komplexität des Problems unterstreicht.

Trotz seiner hochmodernen Ergebnisse hat Deep Learning einen großen Nachteil - es erfordert einen großen Eingabedatensatz, um das Modell zu trainieren. Im Falle der Erkennung von Lebensmittelbildern ist ein großes Food-Image-Dataset erforderlich, und dieser Datensatz muss so viele verschiedene reale Szenarien wie möglich umfassen. In der Praxis bedeutet dies, dass für jedes einzelne Lebensmittel- oder Getränkeelement eine große Sammlung von Bildern erforderlich ist und so viele verschiedene Elemente wie möglich im Datensatz vorhanden sein müssen. Wenn nicht genügend Bilder für ein bestimmtes Element im Dataset vorhanden sind, wird dieses Element wahrscheinlich nicht erfolgreich erkannt. Wenn andererseits nur eine kleine Anzahl von Elementen durch den Datensatz abgedeckt wird, wird die Lösung in ihrer Reichweite begrenzt sein und nur eine Handvoll verschiedener Lebensmittel und Getränke erkennen können.

In der Vergangenheit wurden mehrere Datensätze zur Verfügung gestellt. Der Pittsburgh Fast-Food Image Dataset (PFID)3 wurde eingeführt, um mehr Forschung auf dem Gebiet der Lebensmittelbilderkennung zu fördern. Die Datendatensätze der University of Electro-Communications Food 100 (UEC-FOOD100)22 und der University of Electro-Communications Food 256 (UEC-FOOD256)30 enthalten japanische Gerichte, die im Falle des UEC-FOOD256-Datensatzes um einige internationale Gerichte erweitert wurden. Der Food-101-Datensatz enthält beliebte Gerichte, die von einer Website erworben wurden27. Die Datensätze Food-5036 und Video Retrieval Group Food 172 (VireoFood-172)37 sind chinesische Sammlungen von Lebensmittelbildern. Der Datensatz der Universität Mailand-Bicocca 2016 (UNIMIB2016) besteht aus Bildern von Lebensmittelschalen aus einer italienischen Kantine38. Recipe1M ist ein groß angelegter Datensatz von Kochrezepten und Lebensmittelbildern39. Der Food-475-Datensatz40 sammelt vier zuvor veröffentlichte Food-Image-Datasets27,30,36,37 in einem. Die Beijing Technology and Business University Food 60 (BTBUFood-60) ist ein Datensatz von Bildern, die für die Lebensmittelerkennung bestimmt sind41. Kürzlich wurde der ISIA Food-500 Datensatz42 der verschiedenen Lebensmittelbilder zur Verfügung gestellt. Im Vergleich zu anderen öffentlich zugänglichen Food-Image-Datensätzen enthält es eine große Anzahl von Bildern, die in 500 Lebensmittelklassen unterteilt sind, und soll die Entwicklung multimedialer Lebensmittelerkennungslösungen vorantreiben42.

Protocol

1. Lebensmittelbilderkennung mit NutriNet

  1. Abrufen des Food Image-Datasets
    1. Sammeln Sie eine Liste verschiedener Lebensmittel und Getränke, die die Ergebnisse des Lebensmittelbilderkennungsmodells sein werden. Bevorzugt wird eine abwechslungsreiche Liste beliebter Speisen und Getränke, die die Ausbildung eines robusten Lebensmittelbilderkennungsmodells ermöglichen.
    2. Speichern Sie die Lebensmittel- und Getränkeliste in einer Textdatei (z. B. 'txt' oder 'csv').
      HINWEIS: Die textdatei, die von den Autoren dieses Artikels verwendet wird, kann in den ergänzenden Dateien ('food_items.txt') gefunden werden und enthält eine Liste von 520 slowenischen Lebensmitteln.
    3. Schreiben oder laden Sie ein Python43-Skript herunter, das die Google Custom Search API44 verwendet, um Bilder von jedem Lebensmittelelement aus der Liste herunterzuladen und sie in einem separaten Ordner für jedes Lebensmittelelement zu speichern.
      HINWEIS: Das Python-Skript, das von den Autoren dieses Artikels verwendet wird, kann in den ergänzenden Dateien ('download_images.py') gefunden werden. Wenn dieses Skript verwendet wird, müssen der Entwicklerschlüssel (Variable 'developerKey', Zeile 8 im Python-Skriptcode) und die benutzerdefinierte Suchmaschinen-ID (Variable 'cx', Zeile 28 im Python-Skriptcode) durch Werte ersetzt werden, die für das verwendete Google-Konto spezifisch sind.
    4. Führen Sie das Python-Skript aus Schritt 1.1.3 aus (z. B. mit dem Befehl 'python download_images.py').
  2. (Optional) Reinigen des Lebensmittelbild-Datasets
    1. Trainieren Sie ein Lebensmittelbilderkennungsmodell auf die gleiche Weise wie in Abschnitt 1.4, außer verwenden Sie nur zwei Ausgänge (Lebensmittel, Non-Food) im Gegensatz zur Ausgabeliste aus Schritt 1.1.1.
      HINWEIS: Die Autoren dieses Artikels verwendeten Bilder, die von Rezept-Websites und dem ImageNet-Dataset45 kombiniert wurden, um das Modell der Lebensmittelbilderkennung zu trainieren. Da der Fokus hier auf der Erkennung von Lebensmittelbildern liegt und dies ein optionaler Schritt zum Reinigen des Erkennungsdatensatzes ist, werden weitere Details weggelassen. Stattdessen finden Sie weitere Details zu diesem Ansatz in Mezgec et al.2.
    2. Führen Sie das Erkennungsmodell aus Schritt 1.2.1 im Food Image-Dataset aus, das das Ergebnis von Schritt 1.1.4 ist.
    3. Löschen Sie jedes Bild, das vom Erkennungsmodell aus Schritt 1.2.1 als Non-Food markiert wurde.
    4. Überprüfen Sie das Food Image-Dataset manuell auf andere fehlerhafte oder minderwertige Bilder und auf Bildduplikate.
    5. Löschen Sie Bilder, die in Schritt 1.2.4 gefunden wurden.
  3. Erweiterung des Food-Image-Datasets
    1. Erstellen Sie eine neue Version jedes Bildes aus dem Food-Image-Dataset, indem Sie es mit der CLoDSA-Bibliothek46 um 90° drehen (Zeilen 19 bis 21 im enthaltenen Python-Skript).
      HINWEIS: Das Python-Skript, das alle CLoDSA-Befehle enthält, die von den Autoren dieses Artikels verwendet werden, befindet sich in einer Datei, die in den ergänzenden Dateien enthalten ist ('nutrinet_augmentation.py'). Wenn dieses Skript verwendet wird, müssen der Eingabepfad (Variable 'INPUT_PATH', Zeile 8 im Python-Skriptcode) und der Ausgabepfad (Variable 'OUTPUT_PATH', Zeile 11 im Python-Skriptcode) durch Pfade zu den gewünschten Ordnern ersetzt werden.
    2. Erstellen Sie eine neue Version jedes Bildes aus dem Food-Image-Dataset, indem Sie es mit der CLoDSA-Bibliothek um 180° drehen (Zeilen 19 bis 21 im enthaltenen Python-Skript).
    3. Erstellen Sie eine neue Version jedes Bildes aus dem Food-Image-Dataset, indem Sie es mit der CLoDSA-Bibliothek um 270° drehen (Zeilen 19 bis 21 im enthaltenen Python-Skript).
    4. Erstellen Sie eine neue Version jedes Bildes aus dem Food-Image-Dataset, indem Sie es horizontal mithilfe der CLoDSA-Bibliothek (Zeilen 23 und 24 im enthaltenen Python-Skript) umdrehen.
    5. Erstellen Sie eine neue Version jedes Bildes aus dem Food-Image-Dataset, indem Sie ihm mithilfe der CLoDSA-Bibliothek zufälliges Farbrauschen hinzufügen (Zeilen 26 und 27 im enthaltenen Python-Skript).
    6. Erstellen Sie eine neue Version jedes Bildes aus dem Food-Image-Dataset, indem Sie mit der CLoDSA-Bibliothek um 25 % darauf zoomen (Zeilen 29 und 30 im enthaltenen Python-Skript).
    7. Speichern Sie Bilder aus den Schritten 1.3.1-1.3.6 zusammen mit den Originalbildern (Zeilen 16 und 17 im enthaltenen Python-Skript) in einem neuen Food-Image-Dataset (insgesamt 7 Varianten pro Lebensmittelbild). Dies geschieht durch Ausführen des Befehls in Zeile 32 des mitgelieferten Python-Skripts.
  4. Durchführen der Erkennung von Lebensmittelbildern
    1. Importieren Sie das Food Image-Dataset aus Schritt 1.3.7 in die NVIDIA DIGITS-Umgebung47, um das Dataset in Schulungs-, Validierungs- und Test-Teilmengen in der NVIDIA DIGITS-Benutzeroberfläche zu unterteilen.
    2. Kopieren und fügen Sie den Definitionstext der NutriNet-Architektur2 als benutzerdefiniertes Netzwerk in NVIDIA DIGITS ein.
      HINWEIS: Der NutriNet-Architekturdefinitionstext kann in den ergänzenden Dateien ('nutrinet.prototxt') gefunden werden.
    3. (Optional) Definieren Sie Trainingshyperparameter in der NVIDIA DIGITS-Benutzeroberfläche.
      HINWEIS: Hyperparameter sind Parameter, die verwendet werden, um den Trainingsprozess vor dessen Start zu definieren. Die hyperparameter von den Autoren dieses Artikels verwendet werden, kann in einer Datei in den ergänzenden Dateien enthalten gefunden werden ('nutrinet_hyperparameters.prototxt'). Während für jedes Dataset Experimente erforderlich sind, um die optimalen Hyperparameter zu finden, enthält die Datei eine Hyperparameterkonfiguration, die in die NVIDIA DIGITS-Benutzeroberfläche kopiert werden kann. Darüber hinaus füllt NVIDIA DIGITS die Hyperparameter mit Standardwerten aus, die als Basislinie verwendet werden können. Dieser Schritt ist daher fakultativ.
    4. Führen Sie das Training des NutriNet-Modells durch.
    5. Nehmen Sie nach Abschluss der Schulung die leistungsstärkste NutriNet-Modelliteration. Dieses Modell wird dann zum Testen der Leistung dieses Ansatzes verwendet.
      HINWEIS: Es gibt mehrere Möglichkeiten, die leistungsstärkste Modelliteration zu bestimmen. Eine einfache Möglichkeit, dies zu tun, ist wie folgt. NVIDIA DIGITS gibt ein Diagramm mit Genauigkeitsmessungen für jede Trainingsepoche aus. Überprüfen Sie, welche Epoche den niedrigsten Verlustwert für die Validierungsteilmenge des Food-Image-Datasets erreicht hat – diese Modelliteration kann als leistungsfähigst angesehen werden. Ein optionaler Schritt bei der Bestimmung der leistungsstärksten Modelliteration besteht darin, zu beobachten, wie sich der Verlustwert für die Trainingsteilmenge von Epoche zu Epoche ändert und ob er kontinuierlich zu sinken beginnt, während der Verlustwert für die Validierungsteilmenge gleich bleibt oder kontinuierlich ansteigt, nehmen Sie die Epoche vor diesem Wertverlust des Trainings, da dies signalisieren kann, wenn das Modell begann, die Trainingsbilder überzurüsten.

2. Lebensmittelbildsegmentierung mit FCNs

  1. Abrufen des Fake-Food-Bild-Datasets
    1. Erhalten Sie einen Datensatz mit Fake-Food-Bildern. Fake-Food-Bilder werden von Forschern gesammelt, die Verhaltensstudien mit Lebensmittelreplikaten durchführen.
      HINWEIS: Die Autoren dieses Artikels erhielten Bilder von gefälschten Lebensmitteln, die in einer Laborumgebung gesammelt wurden18.
    2. Kommentieren Sie jedes Lebensmittelbild manuell auf Pixelebene - jedes Pixel im Bild muss Informationen darüber enthalten, zu welcher Lebensmittelklasse es gehört. Das Ergebnis dieses Schritts ist ein Anmerkungsbild für jedes Bild aus dem Food-Image-Dataset, wobei jedes Pixel eine der Lebensmittelklassen darstellt.
      HINWEIS: Es gibt viele Tools, um dies zu erreichen - die Autoren dieses Artikels verwendet JavaScript Segment Annotator48.
  2. Erweiterung des Fake-Food-Bild-Datasets
    1. Führen Sie die gleichen Schritte wie in Abschnitt 1.3 aus, jedoch nur für Bilder aus der Trainingsteilmenge des Food Image-Datasets.
      HINWEIS: Mit Ausnahme von Schritt 1.3.5 müssen alle Datenerweiterungsschritte auch für entsprechende Anmerkungsbilder ausgeführt werden. Wenn das Skript aus Abschnitt 1.3 verwendet wird, müssen der Eingabepfad (Variable 'INPUT_PATH', Zeile 8 im Python 43-Skriptcode) und der Ausgabepfad (Variable 'OUTPUT_PATH', Zeile 11 im Python-Skriptcode) durch Pfade zu den gewünschten Ordnern ersetzt werden. Außerdem setzen Sie das Problem (Variable 'PROBLEM', Zeile 6 im Python-Skriptcode) auf 'instance_segmentation' und den Anmerkungsmodus (Variable 'ANNOTATION_MODE', Zeile 7 im Python-Skriptcode) und den Ausgabemodus (Variable 'OUTPUT_MODE', Zeile 10 im Python-Skriptcode) auf 'coco'.
  3. Durchführen von Fake-Food-Bildsegmentierung
    1. Führen Sie die gleichen Schritte wie in Abschnitt 1.4 aus, mit Ausnahme von Schritt 1.4.2. Führen Sie anstelle dieses Schritts die Schritte 2.3.2 und 2.3.3 aus.
      HINWEIS: Hyperparameter sind Parameter, die verwendet werden, um den Trainingsprozess vor dessen Start zu definieren. Die Trainingshyperparameter, die von den Autoren dieses Artikels für den optionalen Schritt 1.4.3 verwendet werden, finden Sie in einer Datei, die in den zusatzdateien enthalten ist ('fcn-8s_hyperparameters.prototxt'). Während für jedes Dataset Experimente erforderlich sind, um den optimalen Satz von Hyperparametern zu finden, enthält die Datei eine Hyperparameterkonfiguration, die in die NVIDIA DIGITS47-Benutzeroberfläche kopiert werden kann. Darüber hinaus füllt NVIDIA DIGITS die Hyperparameter mit Standardwerten aus, die als Basislinie verwendet werden können.
    2. Kopieren und fügen Sie den Definitionstext der FCN-8s-Architektur15 als benutzerdefiniertes Netzwerk in die NVIDIA DIGITS-Umgebung ein.
      HINWEIS: Der FCN-8s-Architekturdefinitionstext ist auf GitHub49öffentlich verfügbar.
    3. Geben Sie den Pfad zu den vortrainierten FCN-8s-Modellgewichtungen in die NVIDIA DIGITS-Benutzeroberfläche ein.
      HINWEIS: Diese Modellgewichtungen wurden im PASCAL VOC-Dataset17 vortrainiert und sind im Internet49zu finden.

3. Lebensmittelbild-Segmentierung mit HTC ResNet

  1. Abrufen des Food Image-Datasets
    1. Laden Sie das Food Image Dataset von der FRC-Website19herunter.
  2. Erweiterung des Food-Image-Datasets
    1. Führen Sie die Schritte 1.3.1-1.3.4 aus.
      HINWEIS: Das Skript Python43, das alle Von den Autoren dieses Artikels verwendeten CLoDSA46-Befehle enthält, befindet sich in einer Datei, die in den ergänzenden Dateien enthalten ist ('frc_augmentation.py'). Wenn dieses Skript verwendet wird, müssen der Eingabepfad (Variable 'INPUT_PATH', Zeile 8 im Python-Skriptcode) und der Ausgabepfad (Variable 'OUTPUT_PATH', Zeile 11 im Python-Skriptcode) durch Pfade zu den gewünschten Ordnern ersetzt werden.
    2. Erstellen Sie eine neue Version jedes Bildes aus dem Food-Image-Dataset, indem Sie Gaussian Unschärfe hinzufügen, indem Sie es mithilfe der CLoDSA-Bibliothek hinzufügen (Zeilen 26 und 27 im enthaltenen Python-Skript).
    3. Erstellen Sie eine neue Version jedes Bildes aus dem Food-Image-Dataset, indem Sie es mithilfe der CLoDSA-Bibliothek schärfen (Zeilen 29 und 30 im enthaltenen Python-Skript).
    4. Erstellen Sie eine neue Version jedes Bildes aus dem Food-Image-Dataset, indem Sie mithilfe der CLoDSA-Bibliothek eine Gammakorrektur anwenden (Zeilen 32 und 33 im enthaltenen Python-Skript).
    5. Speichern Sie Bilder aus den Schritten 3.2.1-3.2.4 zusammen mit den Originalbildern (Zeilen 16 und 17 im enthaltenen Python-Skript) in einem neuen Food-Image-Dataset (insgesamt 8 Varianten pro Lebensmittelbild). Dies geschieht durch Ausführen des Befehls in Zeile 35 des mitgelieferten Python-Skripts.
    6. Speichern Sie Bilder aus den Schritten 3.2.2-3.2.4 zusammen mit den Originalbildern (Zeilen 16 und 17 im enthaltenen Python-Skript) in einem neuen Food-Image-Dataset (insgesamt 4 Varianten pro Lebensmittelbild). Dies geschieht durch Löschen der Zeilen 19 bis 24 des mitgelieferten Python-Skripts und Ausführen des Befehls in Zeile 35.
  3. Durchführen der Segmentierung von Lebensmittelbildern
    1. Ändern Sie die vorhandene HTC20 ResNet-101-Architektur16-Definition aus der MMDetection-Bibliothek50 in den Abschnitten "Modelleinstellungen" und "Dataset-Einstellungen" der Architekturdefinitionsdatei so, dass sie die Food-Image-Datasets aus den Schritten 3.1.1, 3.2.5 und 3.2.6 akzeptiert.
    2. (Optional) Ändern Sie die HTC ResNet-101-Architekturdefinition aus Schritt 3.3.1, um Trainingshyperparameter zu definieren: Batchgröße im Abschnitt "Dataset-Einstellungen", Solver-Typ und Lernrate im Abschnitt "Optimierer", Lernpolitik im Abschnitt "Lernrichtlinie" und Anzahl der Trainingsepochen im Abschnitt "Laufzeiteinstellungen" der Architekturdefinitionsdatei.
      HINWEIS: Die geänderte HTC ResNet-101 Architektur-Definitionsdatei kann in den zusätzlichen Dateien ('htc_resnet-101.py') gefunden werden. Hyperparameter sind Parameter, die verwendet werden, um den Trainingsprozess vor dessen Start zu definieren. Während für jedes Dataset Experimente erforderlich sind, um den optimalen Satz von Hyperparametern zu finden, enthält die Datei bereits eine Hyperparameterkonfiguration, die ohne Änderungen verwendet werden kann. Dieser Schritt ist daher fakultativ.
    3. Führen Sie das Training des HTC ResNet-101-Modells auf dem Food Image-Dataset ab Schritt 3.1.1 mit der MMDetection-Bibliothek aus (z. B. mit dem Befehl :python mmdetection/tools/train.py htc_resnet-101.py').
    4. Nachdem das Training ab Schritt 3.3.3 abgeschlossen ist, nehmen Sie die leistungsstärkste HTC ResNet-101-Modelliteration und optimieren Sie sie, indem Sie die nächste Phase des Trainings auf dem Food Image-Dataset aus Schritt 3.2.5 ausführen.
      HINWEIS: Es gibt mehrere Möglichkeiten, die leistungsstärkste Modelliteration zu bestimmen. Eine einfache Möglichkeit, dies zu tun, ist wie folgt. Die MMDetection-Bibliothek gibt Werte von Genauigkeitsmessungen für jede Trainingsepoche in der Befehlszeilenschnittstelle aus. Überprüfen Sie, welche Epoche den niedrigsten Verlustwert für die Validierungsteilmenge des Food-Image-Datasets erreicht hat – diese Modelliteration kann als leistungsfähigst angesehen werden. Ein optionaler Schritt bei der Bestimmung der leistungsstärksten Modelliteration besteht darin, zu beobachten, wie sich der Verlustwert für die Trainingsteilmenge von Epoche zu Epoche ändert und ob er kontinuierlich zu sinken beginnt, während der Verlustwert für die Validierungsteilmenge gleich bleibt oder kontinuierlich ansteigt, nehmen Sie die Epoche vor diesem Wertverlust des Trainings, da dies signalisieren kann, wenn das Modell begann, die Trainingsbilder überzurüsten.
    5. Nachdem das Training ab Schritt 3.3.4 abgeschlossen ist, nehmen Sie die leistungsstärkste HTC ResNet-101-Modelliteration und optimieren Sie sie, indem Sie die nächste Phase des Trainings auf dem Food Image-Dataset aus Schritt 3.2.6 ausführen.
      HINWEIS: Siehe Anmerkung zu Schritt 3.3.4.
    6. Nachdem das Training ab Schritt 3.3.5 abgeschlossen ist, nehmen Sie die leistungsstärkste HTC ResNet-101-Modelliteration und optimieren Sie sie, indem Sie die nächste Phase des Trainings auf dem Food Image-Dataset ab Schritt 3.2.5 erneut ausführen.
      HINWEIS: Siehe Anmerkung zu Schritt 3.3.4.
    7. Nachdem das Training ab Schritt 3.3.6 abgeschlossen ist, nehmen Sie die leistungsstärkste HTC ResNet-101-Modelliteration. Dieses Modell wird dann zum Testen der Leistung dieses Ansatzes verwendet.
      HINWEIS: Siehe Anmerkung zu Schritt 3.3.4. Die Schritte 3.3.3-3.3.7 lieferten die besten Ergebnisse für die von den Autoren dieses Artikels definierten Zwecke. Für jedes Dataset ist ein Experimentieren erforderlich, um die optimale Abfolge von Trainings- und Datenerweiterungsschritten zu finden.

Representative Results

NutriNet wurde mit drei populären Deep Learning-Architekturen der damaligen Zeit getestet: AlexNet14, GoogLeNet51 und ResNet16. Außerdem wurden mehrere Trainingsparameter für alle Architekturen getestet, um die optimalen Werte2zu definieren. Dazu gehört die Wahl des Solver-Typs, der bestimmt, wie die Verlustfunktion minimiert wird. Diese Funktion ist die primäre Qualitätsmaßnahme für das Training neuronaler Netzwerke, da sie besser für die Optimierung während des Trainings geeignet ist als die Klassifizierungsgenauigkeit. Wir haben drei Solver getestet: Stochastic Gradient Descent (SGD)52, Nesterov es Accelerated Gradient (NAG)53 und den Adaptive Gradient algorithm (AdaGrad)54. Der zweite Parameter ist die Batchgröße, die die Anzahl der Bilder definiert, die gleichzeitig verarbeitet werden. Die Tiefe der Deep Learning-Architektur bestimmte den Wert dieses Parameters, da tiefere Architekturen mehr Platz im GPU-Speicher benötigen - die Folge dieses Ansatzes war, dass der Speicher vollständig mit Bildern für alle Architekturen gefüllt war, unabhängig von der Tiefe. Der dritte Parameter ist die Lernrate, die die Geschwindigkeit definiert, mit der die neuronalen Netzwerkparameter während des Trainings geändert werden. Dieser Parameter wurde im Einvermelden mit der Batchgröße festgelegt, da die Anzahl der gleichzeitig verarbeiteten Bilder die Konvergenzrate vorgibt. AlexNet-Modelle wurden mit einer Batchgröße von 256 Bildern und einer Basislernrate von 0,02 trainiert. NutriNet verwendete eine Batchgröße von 128 Bildern und eine Rate von 0,01; GoogLeNet 64 Bilder und eine Rate von 0.005; und ResNet 16 Bilder und eine Rate von 0.00125. Drei weitere Parameter wurden für alle Architekturen festgelegt: Lernrate-Policy (Step-down), Schrittgröße (30%) und Gamma (0,1). Diese Parameter beschreiben gemeinsam, wie sich die Lernrate in jeder Epoche verändert. Die Idee hinter diesem Ansatz ist, dass die Lernrate schrittweise gesenkt wird, um das Modell zu optimieren, je näher es dem optimalen Verlustwert kommt. Schließlich wurde auch die Anzahl der Ausbildungsepochen für alle Deep-Learning-Architekturen auf 150 festgelegt2.

Das beste Ergebnis unter allen getesteten Parametern, die NutriNet erreichte, war eine Klassifizierungsgenauigkeit von 86,72% auf dem Erkennungs-Dataset, das rund 2% über dem besten Ergebnis für AlexNet und etwas höher als googLeNets bestes Ergebnis war. Die insgesamt leistungsstärkste Architektur war ResNet (um ca. 1%), die Trainingszeit für ResNet ist jedoch wesentlich höher als bei NutriNet (um den Faktor fünf), was wichtig ist, wenn Modelle kontinuierlich umgeschult werden, um die Genauigkeit und die Anzahl der erkennbaren Lebensmittel zu verbessern. NutriNet, AlexNet und GoogLeNet erzielten ihre besten Ergebnisse mit dem AdaGrad-Solver, während Das beste Modell von ResNet den NAG-Solver verwendete. NutriNet wurde auch auf dem öffentlich zugänglichen UNIMIB2016 Food Image Datensatz38getestet. Dieser Datensatz enthält 3.616 Bilder von 73 verschiedenen Lebensmitteln. NutriNet erreichte eine Erkennungsgenauigkeit von 86,39 % in diesem Dataset und übertraf damit das Basiserkennungsergebnis der Autoren des Datensatzes, das 85,80 % betrug, leicht. Zusätzlich wurde NutriNet auf einem kleinen Datensatz von 200 realen Bildern von 115 verschiedenen Nahrungsmitteln und Getränken getestet, wobei NutriNet eine Spitzengenauigkeit von 55% erreichte.

Um das MODELL der FAKE-Food-Bildsegmentierung FCN-8s zu trainieren, haben wir Adam55 als Solver-Typ verwendet, da wir festgestellt haben, dass es für diese Aufgabe optimal abgespielt hat. Die Basislernrate wurde sehr niedrig eingestellt - auf 0,0001. Der Grund für die niedrige Zahl ist die Tatsache, dass jeweils nur ein Bild verarbeitet werden konnte, was eine Folge des Klassifizierungsprozesses auf Pixelebene ist. Die GPU-Speicheranforderungen für diesen Ansatz sind deutlich höher als die Klassifizierung auf Bildebene. Die Lernrate musste daher niedrig eingestellt werden, damit die Parameter nicht zu schnell verändert werden und zu weniger optimalen Werten konvergieren. Die Anzahl der Trainingsepochen wurde auf 100 festgelegt, während die Lernrate-Politik, die Schrittgröße und das Gamma auf Schritt-down eingestellt wurden, 34% bzw. 0,1, da diese Parameter die genauesten Modelle produzierten.

Genauigkeitsmessungen des FCN-8-Modells wurden mit dem Pixelgenauigkeitsmaß15durchgeführt, das der Klassifizierungsgenauigkeit herkömmlicher Deep Learning-Netzwerke entspricht, wobei der Hauptunterschied darin besteht, dass die Genauigkeit auf der Pixelebene und nicht auf der Bildebene berechnet wird:

Equation 1

wobei PA die Pixelgenauigkeitsmessung ist, nij die Anzahl der Pixel aus Klasse i, die der Klasse j vorhergesagt wurde, und ti = j nij ist die Gesamtzahl der Pixel aus der Klasse in den Bodenwahrheitsbeschriftungen1. Mit anderen Worten, die Pixelgenauigkeitsmessung wird berechnet, indem korrekt vorhergesagte Pixel durch die Gesamtzahl der Pixel dividiert werden. Die endliche Genauigkeit des trainierten FCN-8s Modells betrug 92,18%. Abbildung 2 zeigt drei Beispielbilder aus dem Fake-Food-Bild-Dataset (eines aus jeder der Trainings-, Validierungs- und Test-Teilmengen) sowie die entsprechenden Boden-Wahrheits- und Modellvorhersage-Etiketten.

Die Parameter zum Trainieren des HTC20 ResNet-101 Modells für die Segmentierung von Lebensmittelbildern wurden wie folgt festgelegt: Der verwendete Solvertyp war SGD, da er andere Solver-Typen übertraf. Die Basislernrate wurde auf 0,00125 und die Batchgröße auf 2 Bilder festgelegt. Die Anzahl der Trainingsepochen wurde auf 40 pro Trainingsphase festgelegt, und mehrere Trainingsphasen wurden durchgeführt - zuerst auf dem ursprünglichen FRC-Datensatz ohne Augmented Images, dann auf dem 8x-augmented und 4x-augmented FRC-Datensatz mehrmals abwechselnd, wobei jedes Mal das leistungsstärkste Modell und die Feinabstimmung in der nächsten Trainingsphase durchgeführt wurden. Weitere Einzelheiten zu den Ausbildungsphasen finden Sie in Abschnitt 3.3 des Protokolltextes. Schließlich wurde die Step-down-Lernpolitik verwendet, mit festen Epochen für den Zeitpunkt, zu dem die Lernrate sank (Epochen 28 und 35 für die erste Ausbildungsphase). Wichtig ist, dass diese Abfolge von Trainingsphasen zwar die besten Ergebnisse in unseren Tests im Rahmen des FRC lieferte, die Verwendung eines anderen Datasets jedoch möglicherweise eine andere Sequenz erfordert, um optimale Ergebnisse zu erzielen.

Diese ResNet-basierte Lösung für die Segmentierung von Lebensmitteln wurde mit folgendem Präzisionsmaß19bewertet:

Equation 2

wobei P Genauigkeit ist, TP die Anzahl der echten positiven Vorhersagen durch das Modell der Lebensmittelbildsegmentierung, FP ist die Anzahl falsch positiver Vorhersagen und IoU ist Schnittpunkt über Union, die mit dieser Gleichung berechnet wird:

Equation 3

wobei Area of Overlap die Anzahl der Vorhersagen nach dem Modell darstellt, die sich mit der Bodenwahrheit überlappen, und Area of Union die Gesamtzahl der Vorhersagen durch das Modell zusammen mit der Bodenwahrheit darstellt, sowohl auf Pixelebene als auch für jede einzelne Lebensmittelklasse. Der Rückruf wird als sekundäre Kennzahl verwendet und in ähnlicher Weise unter Verwendung der folgenden Formel19berechnet:

Equation 4

wobei R zurückgerufen wird und FN die Anzahl der falschen negativen Vorhersagen durch das Modell der Segmentierung des Lebensmittelbildes. Die Präzisions- und Rückrufmaßnahmen werden dann in der Bodenwahrheit über alle Klassen gemittelt. Mit diesen Maßnahmen erreichte unser Modell eine durchschnittliche Genauigkeit von 59,2 % und einen durchschnittlichen Rückruf von 82,1 %, der in der zweiten Runde der Food Recognition Challenge19den zweiten Platz belegte. Dieses Ergebnis lag 4,2 % hinter dem ersten Platz und 5,3 % über dem dritten Platz in Bezug auf die durchschnittliche Präzisionsmessung. Tabelle 1 enthält die Ergebnisse für die Besten-4-Teilnehmer des Wettbewerbs.

Figure 1
Abbildung 1:Diagramm der NutriNet Deep Neural Network Architektur. Diese Zahl wurde in Mezgec et al.2veröffentlicht. Bitte klicken Sie hier, um eine größere Version dieser Abbildung anzuzeigen.

Figure 2
Abbildung 2:Bilder aus dem Fake-Food-Bild-Dataset. Originalbilder (links), manuell beschriftete Boden-Wahrheits-Etiketten (Mitte) und Vorhersagen aus dem FCN-8s-Modell (rechts). Diese Zahl wurde in Mezgec et al.1veröffentlicht. Bitte klicken Sie hier, um eine größere Version dieser Abbildung anzuzeigen.

Teamname Platzierung Durchschnittliche Präzision Durchschnittlicher Rückruf
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%

Tabelle 1: Top-4-Ergebnisse aus der zweiten Runde der Food Recognition Challenge. Die durchschnittliche Genauigkeit wird als primäre Leistungsmessung und der durchschnittliche Rückruf als sekundäre Kennzahl hergenommen. Die Ergebnisse stammen aus der offiziellen Wettbewerbsrangliste19.

Ergänzende Dateien. Bitte klicken Sie hier, um diese Datei herunterzuladen.

Discussion

In den letzten Jahren wurden tiefe neuronale Netzwerke mehrfach als geeignete Lösung zur Erkennung von Lebensmittelbildern10,11,12,21,23,25,26,29,31,33validiert. Unsere in diesem Artikel vorgestellte Arbeit dient dazu, dies weiter zu beweisen1,2. Der Single-Output-Lebensmittelbilderkennungsansatz ist einfach und kann für einfache Anwendungen verwendet werden, bei denen Bilder mit nur einem Lebensmittel- oder Getränkeartikel erwartet werden2.

Der Ansatz der Lebensmittelbildsegmentierung scheint besonders geeignet, um Lebensmittelbilder im Allgemeinen zu erkennen, ohne Einschränkung der Anzahl der Lebensmittel1. Da es durch die Klassifizierung jedes einzelnen Pixels des Bildes funktioniert, ist es in der Lage, nicht nur eine beliebige Anzahl von Lebensmitteln im Bild zu erkennen, sondern auch anzugeben, wo sich ein Lebensmittelelement befindet und wie groß es ist. Letzteres kann dann zur Durchführung einer Lebensmittelgewichtsschätzung verwendet werden, insbesondere wenn sie entweder mit einem Referenzobjekt oder einer Kamera mit fester Entfernung verwendet wird.

Es wurde einige Arbeit in Bezug auf die Verfügbarkeit von Lebensmittel-Bild-Datensätze3,22,27,30,36,37,38,39,40,41,42, und wir hoffen, dass in der Zukunft mehr getan werden, vor allem, wenn es um die Aggregation von Lebensmittelbild-Datensätzeaus verschiedenen Regionen auf der ganzen Welt, die robustere Lösungen entwickeln würde. Derzeit hat die Genauigkeit der automatischen Lösungen zur Erkennung von Lebensmittelbildern die Genauigkeit auf menschlicher Ebene noch nicht erreicht35, und dies ist wahrscheinlich zu einem großen Teil auf die Verwendung von Food-Image-Datasets von unzureichender Größe und Qualität zurückzuführen.

In Zukunft wird es unser Ziel sein, die entwickelten Verfahren auf realen Bildern weiter zu evaluieren. Im Allgemeinen enthalten Datasets in diesem Feld häufig Bilder, die in kontrollierten Umgebungen aufgenommen wurden, oder Bilder, die manuell für die Erkennung optimiert wurden. Aus diesem Grund ist es wichtig, einen großen und vielfältigen realen Food Image-Datensatz zu sammeln, um all die verschiedenen Lebensmittel- und Getränkeartikel zu umfassen, die Einzelpersonen vielleicht erkennen möchten. Der erste Schritt dazu war die Food Recognition Challenge, die einen Datensatz mit realen Lebensmittelbildern19enthielt, aber es muss noch weitere Arbeit geleistet werden, um diesen Ansatz auf Lebensmittelbildern aus der ganzen Welt und in Zusammenarbeit mit Ernährungsberatern zu validieren.

Disclosures

Die Autoren haben nichts zu verraten.

Acknowledgments

Die Autoren danken Tamara Bucher von der University of Newcastle, Australien, für die Bereitstellung des Fake-Food-Bild-Datensatzes. Diese Arbeit wurde durch die Forschungs- und Innovationsprogramme Horizont 2020 der Europäischen Union unterstützt (Zuschussnummern 863059 - FNS-Cloud, 769661 - SAAM); slowenische Forschungsagentur (Zuschussnummer P2-0098). Die Europäische Union und die slowenische Forschungsagentur spielten bei der Konzeption, Analyse oder Verschreibung dieses Artikels keine Rolle.

Materials

Name Company Catalog Number Comments
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

DOWNLOAD MATERIALS LIST

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. PASCAL VOC Project. PASCAL Visual Object Classes. , Available from: http://host.robots.ox.ac.uk/pascal/VOC (2020).
  18. Bucher, T., vander Horst, K., Siegrist, M. Fruit for Dessert. How People Compose Healthier Meals. Appetite. 60 (1), 74-80 (2013).
  19. Food Recognition Challenge. AICrowd. , Available from: https://www.aicrowd.com/challenges/food-recognition-challenge (2020).
  20. Chen, K., et al. Hybrid Task Cascade for Instance Segmentation. Proceedings of the CVPR 2019. , 4974-4983 (2019).
  21. Kawano, Y., Yanai, K. Food Image Recognition with Deep Convolutional Features. Proceedings of the UbiComp 2014. , 589-593 (2014).
  22. Matsuda, Y., Hoashi, H., Yanai, K. Recognition of Multiple-Food Images by Detecting Candidate Regions. Proceedings of the ICME 2012. , 25-30 (2012).
  23. 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).
  24. Tanno, R., Okamoto, K., Yanai, K. DeepFoodCam: A DCNN-Based Real-Time Mobile Food Recognition System. Proceedings of the MADiMa'16. , 89-89 (2016).
  25. 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).
  26. Martinel, N., Foresti, G. L., Micheloni, C. Wide-Slice Residual Networks for Food Recognition. Proceedings of the IEEE WACV 2018. , 567-576 (2018).
  27. Bossard, L., Guillaumin, M., Van Gool, L. Food-101-Mining Discriminative Components with Random Forests. Proceedings of the ECCV'14. , 446-461 (2014).
  28. 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).
  29. 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).
  30. 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).
  31. 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).
  32. Shimoda, W., Yanai, K. Weakly-Supervised Plate and Food Region Segmentation. Proceedings of the ICME 2020. , 1-6 (2020).
  33. Ciocca, G., Micali, G., Napoletano, P. State Recognition of Food Images using Deep Features. IEEE Access. 8, 32003-32017 (2020).
  34. 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).
  35. 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).
  36. Chen, M. -Y., et al. Automatic Chinese Food Identification and Quantity Estimation. SA'12 Technical Briefs. , 1-4 (2012).
  37. Chen, J., Ngo, C. -W. Deep-Based Ingredient Recognition for Cooking Recipe Retrieval. Proceedings of the MM'16. , 32-41 (2016).
  38. 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).
  39. Salvador, A., et al. Learning Cross-Modal Embeddings for Cooking Recipes and Food Images. Proceedings of the IEEE CVPR 2017. , 3020-3028 (2017).
  40. 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).
  41. 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).
  42. 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).
  43. Python Software Foundation. Python. , Available from: https://www.python.org (2020).
  44. Google Custom Search API. Google. , Available from: https://developers.google.com/resources/api-libraries/documentation/customsearch/v1/python/latest/customsearch_v1.cse.html (2020).
  45. Stanford Vision Lab. ImageNet. , Available from: http://www.image-net.org (2020).
  46. Heras, J. CLoDSA. , Available from: https://github.com/joheras/CLoDSA (2020).
  47. NVIDIA DIGITS. NVIDIA. , Available from: https://developer.nvidia.com/digits (2020).
  48. Yamaguchi, K. JavaScript Segment Annotator. , Available from: https://github.com/kyamagu/js-segment-annotator (2020).
  49. Shelhamer, E. Fully Convolutional Networks for Semantic Segmentation. , Available from: https://github.com/shelhamer/fcn.berkeleyvision.org (2020).
  50. Multimedia Laboratory, CUHK. MMDetection. , Available from: https://github.com/open-mmlab/mmdetection (2020).
  51. Szegedy, C., et al. Going Deeper with Convolutions. Proceedings of the CVPR 2015. , 1-9 (2015).
  52. Bottou, L. Large-Scale Machine Learning with Stochastic Gradient Descent. Proceedings of the COMPSTAT'2010. , 177-186 (2010).
  53. Nesterov, Y. A Method of Solving a Convex Programming Problem with Convergence Rate O(1/k2). Doklady Akademii Nauk SSSR. 27, 372-376 (1983).
  54. Duchi, J., Hazan, E., Singer, Y. Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. Journal of Machine Learning Research. 12, 2121-2159 (2011).
  55. Kingma, D. P., Ba, J. Adam: A Method for Stochastic Optimization. arXiv Preprint. , (2017).

Tags

Engineering Ausgabe 169 Lebensmittelbilderkennung Lebensmittelbildsegmentierung tiefe neuronale Netzwerke Deep Learning konvolutionale neuronale Netzwerke Ernährungsbewertung
Deep Neural Networks für imagebasierte Ernährungsbewertung
Play Video
PDF DOI DOWNLOAD MATERIALS LIST

Cite this Article

Mezgec, S., KoroušićMore

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

Less
Copy Citation Download Citation Reprints and Permissions
View Video

Get cutting-edge science videos from JoVE sent straight to your inbox every month.

Waiting X
Simple Hit Counter