Aufgrund der Probleme und Kosten im Zusammenhang mit manuellen Ernährungsbewertungsansätzen 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 mit tiefen neuronalen Netzwerken konzentrieren, die den Stand der Technik auf diesem Gebiet darstellen.
Insbesondere werden wir drei Lösungen vorstellen, eine für die Erkennung von Lebensmitteln, eine für die Bildsegmentierung von Lebensmittelreplikaten oder gefälschte Lebensmittel und eine für die Bildsegmentierung von echten Lebensmitteln. Sammeln Sie eine Liste verschiedener Lebensmittel und Getränke, die die Ergebnisse des Lebensmittelbilderkennungsmodells sein werden. Speichern Sie die Lebensmittel- und Getränkeliste in einer Textdatei, z. B. TXT oder CSV.
Beachten Sie, dass die Textdatei von den Autoren dieses Artikels verwendet finden Sie in den ergänzenden Dateien unter Lebensmittel Punkt TXT und enthält eine Liste von 520 slowenischen Lebensmitteln. Schreiben oder laden Sie ein Python-Skript herunter, das die benutzerdefinierte Google-Such-API verwendet, um Bilder von jedem Lebensmittelelement aus der Liste herunterzuladen und sie in einem separaten Ordner für jedes Lebensmittelelement zu speichern. Beachten Sie, dass das Python-Skript, das von den Autoren dieses Artikels verwendet wird, in den ergänzenden Dateien unter Download-Images dot pi zu finden ist.
Wenn dieses Skript verwendet wird, müssen die Entwicklerschlüsselzeile 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. Führen Sie das Python-Skript aus Schritt 1.1.3 aus. Erstellen Sie eine neue Version jedes Bildes aus dem Lebensmittelbild-Datensatz, indem Sie es mithilfe der CLoDSA-Bibliothek um 90 Grad drehen.
Beachten Sie, dass das Python-Skript, das alle CLoDSA-Befehle enthält, die von den Autoren dieses Artikels verwendet werden, in einer Datei gefunden werden kann, die in den zusätzlichen Dateien unter NutriNet-Unterstrich-Augmentation dot pi enthalten ist. Erstellen Sie eine neue Version jedes Bildes aus dem Lebensmittelbild-Datensatz, indem Sie es mithilfe der CLoDSA-Bibliothek um 180 Grad drehen. Erstellen Sie eine neue Version jedes Bildes aus dem Lebensmittelbild-Datensatz, indem Sie es mithilfe der CLoDSA-Bibliothek um 270 Grad drehen.
Erstellen Sie eine neue Version jedes Bildes aus dem Lebensmittelbild-Datensatz, indem Sie es horizontal mithilfe der CLoDSA-Bibliothek umdrehen. Erstellen Sie eine neue Version jedes Bildes aus dem Lebensmittelbild-Datensatz, indem Sie zufälliges Farbrauschen hinzufügen, indem Sie die CLoDSA-Bibliothek verwenden. Erstellen Sie eine neue Version jedes Bildes aus dem Lebensmittelbild-Datensatz, indem Sie mithilfe der CLoDSA-Bibliothek um 25 % hineinzoomen.
Speichern Sie Bilder aus den Schritten 1.3.1 bis 1.3.6 zusammen mit den Originalbildern in einem neuen Lebensmittelbild-Datensatz. Insgesamt sieben Varianten pro Lebensmittelbild. Importieren Sie den Lebensmittelbilddatensatz aus Schritt 1.3.7 in die NVIDI-Ziffernumgebung, indem Sie den Datensatz in Schulungs-, Validierungs- und Testteilmengen unterteilen.
Kopieren und fügen Sie den Definitionstext der NutriNet-Architektur in NVIDIA-Ziffern ein. Beachten Sie, dass die NutriNet-Architekturdefinition in den ergänzenden Dateien unter NutriNet dot proto TXT zu finden ist. Definieren Sie optional Trainingshyperparameter in NVIDIA-Ziffern oder verwenden Sie die Standardwerte.
Die Hyperparameter von den Autoren dieses Artikels verwendet werden, kann in einer Datei in den ergänzenden Dateien unter NutriNet unterunterstreichen Hyperparameter dot proto TXT gefunden werden. Führen Sie das Training des NutriNet-Modells durch. Nachdem das Training abgeschlossen ist, nehmen Sie die am besten ausgeführte NutriNet-Modelliteration.
Dieses Modell wird dann zum Testen der Leistung dieses Ansatzes verwendet. Beachten Sie, dass es mehrere Möglichkeiten gibt, die modellbeste Modelliteration zu bestimmen. Weitere Informationen finden Sie in den Artikeltexten.
Erhalten Sie einen Datensatz von gefälschten Lebensmittel-Bilder. Beachten Sie, dass die Autoren dieses Artikels Bilder von gefälschten Lebensmitteln erhalten haben, die in einer Laborumgebung gesammelt wurden. Kommentieren Sie jedes Lebensmittelbild manuell auf Pixelebene.
Jedes Pixel im Bild muss Informationen darüber enthalten, zu welcher Lebensmittelklasse es gehört. Beachten Sie, dass es viele Tools gibt, um dies zu erreichen. Die Autoren dieses Artikels verwendeten JavaScript-Segmentannotator.
Das Ergebnis dieses Schritts ist ein Anmerkungsbild für jedes Bild aus dem Lebensmittelbild-Datensatz, wobei jedes Pixel eine der Lebensmittelklassen darstellt. Führen Sie die gleichen Schritte wie in Abschnitt 1.3 aus, jedoch nur für Bilder aus der Trainingsteilmenge des Lebensmittelbilddatensatzes. Beachten Sie, dass mit Ausnahme von Schritt 1.3.5 alle Datenerweiterungsschritte auch für entsprechende Anmerkungsbilder ausgeführt werden müssen.
Führen Sie die gleichen Schritte wie in Abschnitt 1.4 mit Ausnahme von Schritt 1.4.2 aus. Führen Sie anstelle dieses Schritts die Schritte 2.3.2 und 2.3.3 aus. Beachten Sie, dass die Trainings-Hyperparameter, die von den Autoren dieses Artikels verwendet werden, in der Datei gefunden werden können, die in den zusätzlichen Dateien unter FCN-8S unter fcN-8S-Unterstrich hyper-Parameter dot proto TXT enthalten ist.
Kopieren sie den Definitionstext der FCN-8S-Architektur und fügen Sie ihn in NVIDIA-Ziffern ein. Geben Sie die vortrainierten FCN-8S-Modellgewichtungen in NVIDIA-Ziffern ein. Beachten Sie, dass diese Modellgewichtungen für den Datensatz der visuellen Pascal-Objektklassen vortrainiert wurden und im Internet zu finden sind.
Laden Sie den Lebensmittelbilddatensatz von der Food Recognition Challenge-Website herunter. Führen Sie die Schritte 1.3.1 bis 1.3.4 aus. Beachten Sie, dass das Python-Skript, das alle CLoDSA-Befehle enthält, die von den Autoren dieses Artikels verwendet werden, in der Datei gefunden werden kann, die in den zusätzlichen Dateien unter FRC-Unterstrich-Augmentation dot pi enthalten ist.
Erstellen Sie eine neue Version jedes Bildes aus dem Lebensmittelbild-Datensatz, indem Sie mit der CLoDSA-Bibliothek gausssche Unschärfe hinzufügen. Erstellen Sie eine neue Version jedes Bildes aus dem Lebensmittelbild-Datensatz, indem Sie es mithilfe der CLoDSA-Bibliothek schärfen. Erstellen Sie eine neue Version jedes Bildes aus dem Lebensmittelbilddatensatz, indem Sie mithilfe der CLoDSA-Bibliothek eine Gammakorrektur darauf anwenden.
Speichern Sie Bilder aus den Schritten 3.2.1 bis 3.2.4 zusammen mit den Originalbildern in einem neuen Lebensmittelbild-Datensatz. Insgesamt acht Varianten pro Lebensmittelbild. Speichern Sie Bilder aus den Schritten 3.2.2 bis 3.2.4 zusammen mit den Originalbildern in einem neuen Lebensmittelbild-Datensatz.
Insgesamt vier Varianten pro Lebensmittelbild. Ändern Sie die vorhandene HTC ResNet 101-Architekturdefinition aus der MM-Erkennungsbibliothek so, dass sie die Food-Image-Datensätze aus den Schritten 3.1.1, 3.2.5 und 3.2.6 akzeptiert. Ändern Sie optional die HTC ResNet 101-Architekturdefinition aus Schritt 3.3.1, um Trainingshyperparameter zu definieren oder die Standardwerte zu verwenden.
Beachten Sie, dass die modifizierte HTC ResNet 101 Architekturdefinition in den zusätzlichen Dateien unter HTC Unterstrich ResNet 101 dot pi gefunden werden kann. Führen Sie das Training des HTC ResNet 101-Modells auf den Food-Image-Datensätzen von Schritt 3.1.1 mithilfe der MM-Erkennungsbibliothek aus. 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-Datensatz von Schritt 3.2.5 ausführen.
Beachten Sie, dass es mehrere Möglichkeiten gibt, die modellbeste Modelliteration zu bestimmen. Weitere Informationen finden Sie in den Artikeltexten. Dies ist auch für die nächsten Schritte relevant.
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-Datensatz von Schritt 3.2.6 ausführen. 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-Datensatz aus Schritt 3.2.5 erneut ausführen. 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. Beachten Sie, dass die Schritte 3.3.3 bis 3.3.7 die besten Ergebnisse für die von den Autoren dieses Artikels definierten Zwecke lieferten. Für jeden Datensatz ist ein Experimentieren erforderlich, um die optimale Abfolge von Trainings- und Datenerweiterungsschritten zu finden.
Nach dem Testen des Trendmodells erreichte NutriNet eine Klassifizierungsgenauigkeit von 86,72% auf dem Erkennungsdatensatz, was etwa 2% höher als AlexNet und etwas höher als GoogLeNet war, die populäre Deep Neural Network Architekturen der Zeit waren. Um die Genauigkeit des FCN-8S Fake Food Bildsegmentierungsmodells zu messen, wurde die Pixelgenauigkeitsmessung verwendet. Die Genauigkeit des trainierten FCN-8S-Modells betrug 92,18%Die ResNet-basierte Lösung für die Segmentierung von Lebensmitteln wurde anhand der in der Food Recognition Challenge definierten Präzisionskennzahl bewertet.
Mit dieser Maßnahme erreichte das Zugmodell eine durchschnittliche Genauigkeit von 59,2%, die bei der Food Recognition Challenge den zweiten Platz belegte. In den letzten Jahren wurden tiefe neuronale Netzwerke mehrfach als geeignete Lösung zur Erkennung von Lebensmittelbildern validiert. Unsere in diesem Artikel vorgestellte Arbeit dient dazu, dies weiter zu beweisen.
Der Single Output Food Image Recognition Ansatz ist einfach und kann für einfache Anwendungen verwendet werden. Während der Ansatz der Segmentierung von Lebensmitteln mehr Arbeit bei der Erstellung von anmerkungen, aber es ist viel mehr anwendbar auf reale Welt Bilder. In Zukunft wird es unser Ziel sein, die entwickelten Verfahren auf realen Bildern weiter zu evaluieren.
Der erste Schritt zur realen Validierung wurde von der Food Recognition Challenge bereitgestellt, die einen Datensatz mit realen Food-Bildern enthielt. Aber es muss noch weiter daran gearbeitet werden, diesen Ansatz auf Lebensmittelbildern aus der ganzen Welt und in Zusammenarbeit mit Ernährungsärzten zu validieren.