13 marca 2021
Celem pracy przedstawionej w tym artykule jest opracowanie technologii automatycznego rozpoznawania produktów spożywczych i napojów na podstawie zdjęć wykonanych przez urządzenia mobilne. Technologia ta składa się z dwóch różnych podejść - pierwsze z nich wykonuje rozpoznawanie obrazów żywności, a drugie segmentację obrazów żywności.
Ze względu na problemy i koszty związane z ręcznym podejściem do oceny dietetycznej, potrzebne są zautomatyzowane rozwiązania, które ułatwią i przyspieszą pracę oraz podniosą jej jakość. Obecnie zautomatyzowane rozwiązania są w stanie rejestrować spożycie diety przez daną osobę w znacznie prostszy sposób, na przykład poprzez zrobienie zdjęcia aparatem w smartfonie. W tym artykule skupimy się na takich obrazowych podejściach do oceny diety przy użyciu głębokich sieci neuronowych, które reprezentują stan wiedzy w tej dziedzinie.
W szczególności przedstawimy trzy rozwiązania, jedno do rozpoznawania obrazów żywności, drugie do segmentacji obrazu replik żywności lub fałszywej żywności oraz jedno do segmentacji obrazu prawdziwej żywności. Zbierz listę różnych produktów spożywczych i napojów, które będą danymi wyjściowymi modelu rozpoznawania obrazów żywności. Zapisz listę potraw i napojów w pliku tekstowym, takim jak TXT lub CSV.
Należy pamiętać, że plik tekstowy używany przez autorów tego artykułu można znaleźć w plikach uzupełniających w sekcji artykuły spożywcze kropka TXT i zawiera listę 520 słoweńskich artykułów spożywczych. Napisz lub pobierz skrypt w języku Python, który korzysta z interfejsu API wyszukiwania niestandardowego Google do pobierania obrazów każdego produktu spożywczego z listy i zapisywania ich w osobnym folderze dla każdego produktu spożywczego. Zwróć uwagę, że skrypt Pythona używany przez autorów tego artykułu można znaleźć w plikach uzupełniających w sekcji pobierz obrazy kropka pi.
Jeśli ten skrypt jest używany, zmienna klucza programisty ósmy wiersz klucza programisty w kodzie skryptu języka Python i niestandardowa zmienna identyfikatora wyszukiwarki CX wiersz 28 w kodzie skryptu języka Python muszą zostać zastąpione wartościami specyficznymi dla używanego konta Google. Uruchom skrypt języka Python z kroku 1.1.3. Utwórz nową wersję każdego obrazu z zestawu danych obrazu żywności, obracając go o 90 stopni, korzystając z biblioteki CLoDSA.
Zwróć uwagę, że skrypt Pythona zawierający wszystkie polecenia CLoDSA używane przez autorów tego artykułu można znaleźć w pliku dołączonym do plików uzupełniających w sekcji NutriNet podkreślenie augmentacji kropki pi. Utwórz nową wersję każdego obrazu z zestawu danych obrazu żywności, obracając go o 180 stopni, korzystając z biblioteki CLoDSA. Utwórz nową wersję każdego obrazu z zestawu danych obrazu żywności, obracając go o 270 stopni, korzystając z biblioteki CLoDSA.
Utwórz nową wersję każdego obrazu z zestawu danych obrazu żywności, odwracając go w poziomie, korzystając z biblioteki CLoDSA. Utwórz nową wersję każdego obrazu z zestawu danych obrazu żywności, dodając do niego losowy kolorowy szum, korzystając z biblioteki CLoDSA. Utwórz nową wersję każdego obrazu z zestawu danych obrazu żywności, powiększając go o 25% za pomocą biblioteki CLoDSA.
Zapisz obrazy z kroków od 1.3.1 do 1.3.6 wraz z oryginalnymi obrazami w nowym zestawie danych obrazów żywności. W sumie siedem wariantów na jedno zdjęcie żywności. Zaimportuj zestaw danych obrazu żywności z kroku 1.3.7 do środowiska cyfr NVIDI, dzieląc zestaw danych na podzbiory trenowania, walidacji i testowania.
Skopiuj i wklej tekst definicji architektury NutriNet do cyfr NVIDIA. Należy pamiętać, że definicję architektury NutriNet można znaleźć w plikach uzupełniających w sekcji NutriNet dot proto TXT. Opcjonalnie zdefiniuj hiperparametry trenowania w cyfrach NVIDIA lub użyj wartości domyślnych.
Hiperparametry użyte przez autorów tego artykułu można znaleźć w pliku zawartym w plikach uzupełniających pod NutriNet underscore hyper-parameters dot proto TXT. Uruchom szkolenie modelu NutriNet. Po zakończeniu trenowania wykonaj najlepszą iterację modelu NutriNet.
Model ten jest następnie używany do testowania wydajności tego podejścia. Należy pamiętać, że istnieje wiele sposobów określania najlepiej działającej iteracji modelu. Więcej informacji można znaleźć w tekstach artykułów.
Uzyskaj zestaw danych z fałszywymi obrazami żywności. Zwróć uwagę, że autorzy tego artykułu otrzymali zdjęcia fałszywej żywności, które zostały zebrane w środowisku laboratoryjnym. Ręcznie dodawaj adnotacje do każdego obrazu jedzenia na poziomie pikseli.
Każdy piksel na obrazie musi zawierać informacje o klasie żywności, do której należy. Pamiętaj, że istnieje wiele narzędzi, aby to osiągnąć. Autorzy tego artykułu korzystali z adnotatora segmentów JavaScript.
Wynikiem tego kroku jest jeden obraz adnotacji dla każdego obrazu z zestawu danych obrazu żywności, gdzie każdy piksel reprezentuje jedną z klas żywności. Wykonaj te same czynności, co w sekcji 1.3, ale tylko na obrazach z podzbioru treningowego zestawu danych obrazów żywności. Należy pamiętać, że z wyjątkiem kroku 1.3.5 wszystkie kroki rozszerzania danych muszą być również wykonywane na odpowiednich obrazach adnotacji.
Wykonać te same czynności, co w sekcji 1.4, z wyjątkiem kroku 1.4.2. Zamiast tego kroku wykonaj kroki 2.3.2 i 2.3.3. Należy pamiętać, że hiperparametry treningowe używane przez autorów tego artykułu można znaleźć w pliku zawartym w plikach uzupełniających pod FCN-8S podkreślenie hiperparametrów kropka proto TXT.
Skopiuj tekst definicji architektury FCN-8S i wklej go do cyfr NVIDIA. Wprowadź wstępnie wytrenowane wagi modelu FCN-8S w cyfrach NVIDIA. Należy pamiętać, że te wagi modelu zostały wstępnie wytrenowane na zestawie danych klas obiektów wizualnych Pascala i można je znaleźć w Internecie.
Pobierz zestaw danych obrazów żywności ze strony internetowej Food Recognition Challenge. Wykonaj kroki od 1.3.1 do 1.3.4. Zauważ, że skrypt Pythona zawierający wszystkie polecenia CLoDSA używane przez autorów tego artykułu można znaleźć w pliku zawartym w plikach uzupełniających pod FRC podkreślenie augmentacji kropka pi.
Utwórz nową wersję każdego obrazu z zestawu danych obrazu żywności, dodając do niego rozmycie gaussowskie, korzystając z biblioteki CLoDSA. Utwórz nową wersję każdego obrazu z zestawu danych obrazu żywności, wyostrzając go przy użyciu biblioteki CLoDSA. Utwórz nową wersję każdego obrazu z zestawu danych obrazu żywności, stosując do niego korekcję gamma, korzystając z biblioteki CLoDSA.
Zapisz obrazy z kroków od 3.2.1 do 3.2.4 wraz z oryginalnymi obrazami w nowym zestawie danych obrazów żywności. W sumie osiem wariantów na jedno zdjęcie żywności. Zapisz obrazy z kroków od 3.2.2 do 3.2.4 wraz z oryginalnymi obrazami w nowym zestawie danych obrazów żywności.
W sumie cztery warianty na jedno zdjęcie żywności. Zmodyfikuj istniejącą definicję architektury HTC ResNet 101 z biblioteki MM Detection tak, aby akceptowała zestawy danych obrazów żywności z kroków 3.1.1, 3.2.5 i 3.2.6. Opcjonalnie zmodyfikuj definicję architektury HTC ResNet 101 z kroku 3.3.1, aby zdefiniować hiperparametry trenowania lub użyć wartości domyślnych.
Należy zauważyć, że zmodyfikowaną definicję architektury HTC ResNet 101 można znaleźć w plikach uzupełniających w obszarze HTC underscore ResNet 101 dot pi. Uruchom trenowanie modelu HTC ResNet 101 na zestawach danych obrazów żywności z kroku 3.1.1, korzystając z biblioteki MM Detection. Po zakończeniu trenowania z kroku 3.3.3 wybierz najlepszą iterację modelu HTC ResNet 101 i dostosuj ją, uruchamiając kolejną fazę trenowania na zestawie danych obrazu żywności z kroku 3.2.5.
Należy pamiętać, że istnieje wiele sposobów określania najlepiej działającej iteracji modelu. Więcej informacji można znaleźć w tekstach artykułów. Ma to również znaczenie dla kolejnych kroków.
Po zakończeniu trenowania z kroku 3.3.4 wybierz najlepszą iterację modelu HTC ResNet 101 i dostosuj ją, uruchamiając kolejną fazę trenowania na zestawie danych obrazu żywności z kroku 3.2.6. Po zakończeniu trenowania z kroku 3.3.5 wybierz najlepszą iterację modelu HTC ResNet 101 i dostosuj ją, ponownie uruchamiając kolejną fazę trenowania na zestawie danych obrazu żywności z kroku 3.2.5. Po zakończeniu trenowania z kroku 3.3.6 przejdź do najbardziej wydajnej iteracji modelu HTC ResNet 101.
Model ten jest następnie używany do testowania wydajności tego podejścia. Należy zauważyć, że kroki od 3.3.3 do 3.3.7 przyniosły najlepsze wyniki dla celów zdefiniowanych przez autorów tego artykułu. Eksperymentowanie jest potrzebne dla każdego zestawu danych, aby znaleźć optymalną sekwencję kroków trenowania i rozszerzania danych.
Po przetestowaniu modelu trendów, NutriNet osiągnął dokładność klasyfikacji na poziomie 86,72% w zestawie danych rozpoznawania, która była o około 2% wyższa niż AlexNet i nieco wyższa niż GoogLeNet, które były popularnymi architekturami głębokich sieci neuronowych w tamtych czasach. Aby zmierzyć dokładność modelu segmentacji obrazu fałszywego jedzenia FCN-8S, użyto miary dokładności pikseli. Dokładność wytrenowanego modelu FCN-8S wyniosła 92,18%Rozwiązanie oparte na ResNet do segmentacji obrazów żywności zostało ocenione przy użyciu miary precyzji zdefiniowanej w wyzwaniu Food Recognition Challenge.
Korzystając z tej miary, model pociągu osiągnął średnią precyzję na poziomie 59,2%, co zajęło drugie miejsce w konkursie Food Recognition Challenge. W ostatnich latach głębokie sieci neuronowe były wielokrotnie weryfikowane jako odpowiednie rozwiązanie do rozpoznawania obrazów żywności. Nasza praca przedstawiona w tym artykule służy dalszemu udowodnieniu tego.
Podejście do rozpoznawania obrazów żywności z jednym wyjściem jest proste i może być używane do prostych zastosowań. Podczas gdy podejście do segmentacji obrazów żywności wymaga więcej pracy w przygotowaniu obrazów z adnotacjami, ale ma znacznie większe zastosowanie w przypadku obrazów ze świata rzeczywistego. W przyszłości naszym celem będzie dalsza ocena opracowanych procedur na obrazach ze świata rzeczywistego.
Pierwszym krokiem w kierunku walidacji w warunkach rzeczywistych był konkurs Food Recognition Challenge, który obejmował zestaw danych z rzeczywistych obrazów żywności. Konieczne są jednak dalsze prace, aby zweryfikować to podejście na zdjęciach żywności z całego świata i we współpracy z dietetykami.
Niniejszy artykuł przedstawia technologię zautomatyzowanego rozpoznawania produktów spożywczych i napojów na podstawie obrazów z urządzeń mobilnych. Skupia się on na głębokich sieciach neuronowych stosowanych w ocenie stanu odżywienia poprzez dwa główne podejścia: rozpoznawanie obrazów żywności oraz segmentację obrazów żywności.
Zautomatyzowana ocena diety oparta na obrazach z wykorzystaniem głębokich sieci neuronowych rozwiązuje problemy ze skalowalnością i powtarzalnością ręcznego śledzenia spożycia, umożliwiając wysokoprzepustowe, ilościowe fenotypowanie na podstawie obrazów z rzeczywistych warunków. Możliwości te wspierają translacyjne badania nad żywieniem, opracowywanie cyfrowych biomarkerów oraz badania interwencyjne oparte na danych w ramach procesów biofarmaceutycznych. Integracja odpornych modeli rozpoznawania i segmentacji żywności zwiększa pewność prognostyczną danych o ekspozycji dietetycznej, dostarczając istotnych informacji zarówno w badaniach odkrywczych, jak i przedklinicznych.
Ocena diety oparta na obrazach z wykorzystaniem głębokich sieci neuronowych znajduje zastosowanie od wczesnego etapu odkryć po badania translacyjne, wspierając cyfrowe fenotypowanie, modelowanie zależności ekspozycja-odpowiedź oraz dopasowanie biomarkerów.