Artykuł metodologiczny

Głębokie sieci neuronowe do oceny diety w oparciu o obraz

11.2K wyświetleń

DOI:

10.3791/61906

13 marca 2021

W tym artykule

Podsumowanie

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.

Streszczenie

Ze względu na problemy i koszty związane z ręcznym podejściem do oceny diety, 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 dietetycznej. W przypadku problemu rozpoznawania obrazów żywności głębokie sieci neuronowe osiągnęły w ostatnich latach stan wiedzy, a my prezentujemy nasze prace w tej dziedzinie. W szczególności najpierw opiszemy metodę rozpoznawania obrazów żywności i napojów przy użyciu architektury głębokiej sieci neuronowej o nazwie NutriNet. Ta metoda, podobnie jak większość badań przeprowadzonych we wczesnych dniach rozpoznawania obrazów żywności opartych na głębokim uczeniu, jest ograniczona do jednego wyjścia na obraz, a zatem nie nadaje się do obrazów z wieloma artykułami spożywczymi lub napojami. Dlatego podejścia, które przeprowadzają segmentację obrazu żywności, są znacznie bardziej niezawodne, ponieważ są w stanie zidentyfikować dowolną liczbę produktów spożywczych lub napojów na obrazie. W związku z tym prezentujemy również dwie metody segmentacji obrazów żywności - jedna opiera się na sieciach w pełni konwolucyjnych (FCN), a druga na głębokich sieciach resztkowych (ResNet).

Wprowadzenie

Ocena diety jest kluczowym krokiem w określaniu obszarów diety danej osoby, które można podjąć. Jednak przeprowadzanie oceny diety przy użyciu tradycyjnie ręcznych metod wiąże się ze znacznymi kosztami. Podejścia te są również podatne na błędy, ponieważ często opierają się na samodzielnym zgłaszaniu przez jednostkę. Zautomatyzowana ocena diety rozwiązuje te problemy, zapewniając prostszy sposób ilościowego określania i kwalifikowania spożycia żywności. Takie podejście może również złagodzić niektóre błędy występujące w podejściach ręcznych, takie jak pominięte posiłki, niemożność dokładnej oceny objętości jedzenia itp. W związku z tym istnieją wyraźne korzyści z automatyzacji oceny diety poprzez opracowanie rozwiązań, które identyfikują różne produkty spożywcze i napoje oraz określają ilościowo spożycie żywności1. Rozwiązania te mogą być również wykorzystywane do umożliwienia oszacowania wartości odżywczej artykułów spożywczych i napojów (zwanych dalej "artykułami spożywczymi"). W związku z tym zautomatyzowana ocena diety jest przydatna w wielu zastosowaniach - od zastosowań stricte medycznych, takich jak umożliwienie dietetykom łatwiejszego i dokładniejszego śledzenia i analizowania diety pacjentów, po wykorzystanie w aplikacjach poprawiających samopoczucie przeznaczonych dla ogółu populacji.

Automatyczne rozpoznawanie produktów spożywczych na obrazach jest trudnym problemem widzenia komputerowego. Wynika to z faktu, że żywność jest zazwyczaj obiektami odkształcalnymi, a także z faktu, że duża ilość informacji wizualnych produktu spożywczego może zostać utracona podczas jego przygotowywania. Dodatkowo, różne produkty spożywcze mogą wydawać się bardzo podobne do siebie, a to samo jedzenie może wydawać się znacznie różne na wielu obrazach2. Co więcej, dokładność rozpoznawania zależy od wielu innych czynników, takich jak jakość obrazu, to, czy produkt spożywczy jest zasłonięty przez inny przedmiot, odległość, z której zostało zrobione zdjęcie itp. Rozpoznawanie napojów wiąże się z wieloma wyzwaniami, z których głównym jest ograniczona ilość informacji wizualnych dostępnych na obrazie. Mogą to być kolor napoju, kolor i struktura pojemnika na napój oraz, w optymalnych warunkach obrazu, gęstość napoju2.

Aby skutecznie rozpoznać produkty spożywcze na obrazach, konieczne jest poznanie cech każdej klasy żywności i napojów. Tradycyjnie odbywało się to za pomocą ręcznie zdefiniowanych ekstraktorów cech3,4,5,6, które wykonują rozpoznawanie na podstawie określonych cech elementu, takich jak kolor, tekstura, rozmiar itp., lub kombinacji tych cech. Przykładami takich ekstraktorów cech są: wiele funkcji uczenia się4, pairwise local features5 oraz model bag-of-features6. Ze względu na złożoność obrazów żywności, podejścia te w większości osiągały niską dokładność klasyfikacji - od 10% do 40%3,4,5. Powodem tego jest to, że podejście ręczne nie jest wystarczająco solidne, aby było wystarczająco dokładne. Ponieważ produkt spożywczy może znacznie różnić się wyglądem, nie jest możliwe ręczne uwzględnienie wszystkich tych różnic. Większą dokładność klasyfikacji można osiągnąć za pomocą ręcznie zdefiniowanych ekstraktorów cech, gdy liczba klas żywności jest zmniejszona5, lub różne cechy obrazu są łączone6, co wskazuje, że istnieje potrzeba bardziej złożonych rozwiązań tego problemu.

Dlatego głębokie uczenie okazało się tak skuteczne w przypadku problemu rozpoznawania obrazów żywności. Głębokie uczenie, czyli głębokie sieci neuronowe, zostało zainspirowane biologicznymi mózgami i umożliwia modelom obliczeniowym złożonym z wielu warstw przetwarzania automatyczne uczenie się funkcji poprzez trenowanie na zestawie obrazów wejściowych7,8. Z tego powodu głębokie uczenie znacznie poprawiło stan wiedzy w różnych dziedzinach badawczych7, a jedną z nich jest widzenie komputerowe, a następnie rozpoznawanie obrazów żywności2.

W szczególności, głębokie konwolucyjne sieci neuronowe (DCNN) są najbardziej popularne do rozpoznawania obrazów żywności - te sieci są inspirowane systemem wzrokowym zwierząt, gdzie poszczególne neurony próbują zrozumieć bodźce wizualne, reagując na nakładające się na siebie regiony w polu widzenia9. Konwolucyjna sieć neuronowa pobiera obraz wejściowy i wykonuje szereg operacji w każdej z warstw sieci, z których najczęstszymi są warstwy konwolucyjne, w pełni połączone i pulujące. Warstwy konwolucyjne zawierają filtry, których można się nauczyć, które reagują na określone cechy danych wejściowych, podczas gdy w pełni połączone warstwy tworzą dane wyjściowe z innych warstw, aby uzyskać z nich wiedzę wyższego poziomu. Celem łączenia warstw jest próbkowanie danych wejściowych w dół2. Istnieją dwa podejścia do korzystania z modeli głębokiego uczenia, które okazały się popularne: wykorzystanie istniejącej definicji głębokiej sieci neuronowej 10,11, określanej w tym artykule jako architektura głębokiego uczenia, lub zdefiniowanie nowej architektury głębokiego uczenia12,13i trenując jeden z nich na zestawie danych obrazu żywności. Oba podejścia mają mocne i słabe strony - w przypadku korzystania z istniejącej architektury głębokiego uczenia można wybrać architekturę, która dobrze sprawdziła się w przypadku innych problemów, i dostosować ją do pożądanego problemu, oszczędzając w ten sposób czas i zapewniając, że wybrano zweryfikowaną architekturę. Z drugiej strony definiowanie nowej architektury głębokiego uczenia jest bardziej czasochłonne, ale pozwala na opracowanie architektur, które są specjalnie zaprojektowane tak, aby uwzględniały specyfikę problemu, a tym samym teoretycznie działały lepiej dla tego problemu.

W tym artykule prezentujemy oba podejścia. Na potrzeby problemu rozpoznawania obrazów żywności opracowaliśmy nowatorską architekturę DCNN o nazwie NutriNet2, która jest modyfikacją dobrze znanej architektury AlexNet14. Istnieją dwie główne różnice w porównaniu z AlexNet: NutriNet akceptuje obrazy o wymiarach 512x512 pikseli jako dane wejściowe (w przeciwieństwie do obrazów o rozdzielczości 256x256 pikseli w przypadku AlexNet), a NutriNet ma dodatkową warstwę konwolucyjną na początku sieci neuronowej. Te dwie zmiany zostały wprowadzone w celu wyodrębnienia jak największej ilości informacji z obrazów zestawu danych rozpoznawania. Posiadanie obrazów o wyższej rozdzielczości oznaczało, że na obrazach jest więcej informacji, a posiadanie większej liczby warstw konwolucyjnych oznaczało, że można było wydobyć z obrazów dodatkową wiedzę. W porównaniu do około 60 milionów parametrów AlexNet, NutriNet zawiera mniej parametrów: około 33 miliony. Wynika to z różnicy wymiarowości w pierwszej w pełni połączonej warstwie, spowodowanej przez dodatkową warstwę konwolucyjną2. Rysunek 1 zawiera diagram architektury NutriNet. Zdjęcia żywności, które zostały wykorzystane do wytrenowania modelu NutriNet, zostały pobrane z Internetu - procedura jest opisana w tekście protokołu.

Do problemu segmentacji obrazów żywności użyliśmy dwóch różnych istniejących architektur: w pełni konwolucyjnych sieci (FCNs)15 i głębokich sieci szczątkowych (ResNet)16, które reprezentowały stan techniki w zakresie segmentacji obrazów, gdy używaliśmy ich do opracowania odpowiednich rozwiązań segmentacji obrazów żywności. Istnieje wiele wariantów FCN, które zostały wprowadzone przez Long i wsp.: FCN-32s, FCN-16s i FCN-8s15. FCN-32s generuje mapę pikseli na podstawie przewidywań ostatniej warstwy FCN, podczas gdy wariant FCN-16s łączy te przewidywania z przewidywaniami wcześniejszej warstwy. FCN-8s uwzględnia przewidywania kolejnej warstwy i dlatego jest w stanie przewidywać najdrobniejsze ziarno, dlatego nadaje się do rozpoznawania obrazów żywności. FCN-8, których używaliśmy, zostały wstępnie wytrenowane na zestawie danych PASCAL Visual Object Classes (PASCAL VOC) 17 oraz przeszkolone i przetestowane na obrazach replik żywności (odtąd 'fake food')18 ze względu na ich wizualne podobieństwo do prawdziwego jedzenia i z powodu braku obrazów z adnotacjami prawdziwego jedzenia na poziomie pikseli. Fałszywe jedzenie jest wykorzystywane w różnych badaniach behawioralnych, a zdjęcia są wykonywane dla wszystkich potraw od wszystkich uczestników badania. Ponieważ zawartość tych obrazów jest znana, sprawia to, że zestaw danych obrazu jest przydatny do trenowania modelu uczenia głębokiego. Kroki przetwarzania zestawu danych są opisane w tekście protokołu.

Rozwiązanie oparte na ResNet zostało opracowane w ramach Food Recognition Challenge (FRC)19. Używa metody Hybrid Task Cascade (HTC)20 z siecią szkieletową ResNet-10116. Jest to najnowocześniejsze podejście do problemu segmentacji obrazu, które może wykorzystywać różne ekstraktory funkcji lub szkielety. Rozważaliśmy również inne sieci szkieletowe, w szczególności inne warianty ResNet, takie jak ResNet-5016, ale ResNet-101 był najbardziej odpowiedni ze względu na jego głębię i zdolność do reprezentowania obrazów wejściowych w wystarczająco złożony sposób. Zestaw danych używany do trenowania modelu HTC ResNet-101 był zestawem danych FRC z dodanymi obrazami rozszerzonymi. Rozszerzenia te zostały przedstawione w tekście protokołu.

Ten artykuł jest przeznaczony jako źródło informacji dla ekspertów od uczenia maszynowego szukających informacji o tym, które architektury głębokiego uczenia i kroki rozszerzania danych sprawdzają się dobrze w przypadku problemów z rozpoznawaniem i segmentacją obrazów żywności, a także dla badaczy żywienia, którzy chcą wykorzystać nasze podejście do automatyzacji rozpoznawania obrazów żywności do wykorzystania w ocenie diety. W poniższych akapitach przedstawiono rozwiązania głębokiego uczenia oraz zestawy danych z dziedziny rozpoznawania obrazów żywności. W tekście protokołu szczegółowo opisujemy, w jaki sposób każde z trzech podejść zostało wykorzystane do trenowania modeli głębokich sieci neuronowych, które można wykorzystać do automatycznej oceny diety. Ponadto każda sekcja protokołu zawiera opis tego, w jaki sposób zestawy danych obrazów żywności wykorzystane do szkolenia i testowania zostały pozyskane i przetworzone.

DCNN generalnie osiągnęły znacznie lepsze wyniki niż inne metody rozpoznawania i segmentacji obrazów żywności, dlatego zdecydowana większość ostatnich badań w tej dziedzinie opiera się na tych sieciach. Kawano i in. wykorzystali DCNN do uzupełnienia podejść ręcznych21 i osiągnęli dokładność klasyfikacji 72,26% w zbiorze danych UEC-FOOD10022. Christodoulidis i in. wykorzystali je wyłącznie w celu osiągnięcia wyższej dokładności 84,90% na samodzielnie pozyskanym zbiorze danych23. Tanno i in. opracowali DeepFoodCam - aplikację na smartfony do rozpoznawania obrazów żywności, która wykorzystuje DCNNs24. Liu i in. przedstawili system, który przeprowadza ocenę diety opartą na Internecie rzeczy przy użyciu DCNNs25. Martinel i in. wprowadzili podejście oparte na DCNN, które wykorzystuje specyfikę obrazów żywności26 i zgłosiło dokładność 90,27% w zestawie danych Food-10127. Zhou i in. są autorami przeglądu rozwiązań głębokiego uczenia w dziedzinie żywności28.

Niedawno, Zhao et al. zaproponowali sieć specjalnie do rozpoznawania obrazów żywności w aplikacjach mobilnych29. To podejście wykorzystuje mniejszą sieć "uczniów", która uczy się od większej sieci "nauczycieli". Dzięki niemu udało im się osiągnąć dokładność 84% w UEC-FOOD25630 i dokładność 91,2% w zestawie danych Food-10127. Hafiz i in. wykorzystali DCNN do opracowania rozwiązania do rozpoznawania obrazów tylko dla napojów i odnotowali bardzo wysoką dokładność 98,51%31. Shimoda i in. opisali nowatorską metodę wykrywania obszarów płytki na obrazach żywności bez użycia adnotacji pikselowej32. Ciocca i in. przedstawili nowy zestaw danych zawierający produkty spożywcze z 20 różnych klas żywności w 11 różnych stanach (pasta w postaci stałej, w plastrach, kremowa pasta itp.) i przedstawili swoje podejście do trenowania modeli rozpoznawania, które są w stanie rozpoznać stan żywności, oprócz klasy żywności33. Knez i in. ocenili rozwiązania do rozpoznawania obrazów żywności dla urządzeń mobilnych34. Wreszcie, Furtado i in. przeprowadzili badanie na temat tego, jak ludzki układ wzrokowy wypada w porównaniu z wydajnością DCNN i stwierdzili, że ludzkie rozpoznawanie nadal przewyższa DCNN z dokładnością 80% w porównaniu z 74,5%35. Autorzy zauważyli, że przy niewielkiej liczbie klas żywności DCNN działają dobrze, ale w zestawie danych z setkami klas dokładność rozpoznawania przez człowieka jest wyższa35, co podkreśla złożoność problemu.

Pomimo najnowszych wyników, głębokie uczenie ma główną wadę - wymaga dużego zestawu danych wejściowych do trenowania modelu. W przypadku rozpoznawania obrazów żywności wymagany jest duży zestaw danych obrazów żywności, który musi obejmować jak najwięcej różnych scenariuszy świata rzeczywistego. W praktyce oznacza to, że dla każdego pojedynczego produktu spożywczego lub napoju wymagana jest duża kolekcja obrazów, a w zestawie danych musi znajdować się jak najwięcej różnych elementów. Jeśli nie ma wystarczającej liczby obrazów dla określonego elementu w zestawie danych, jest mało prawdopodobne, że ten element zostanie pomyślnie rozpoznany. Z drugiej strony, jeśli zestaw danych obejmuje tylko niewielką liczbę elementów, rozwiązanie będzie miało ograniczony zakres i będzie w stanie rozpoznać tylko kilka różnych produktów spożywczych i napojów.

Wiele zestawów danych zostało udostępnionych w przeszłości. Zestaw danych Pittsburgh Fast-Food Image Dataset (PFID)3 został wprowadzony, aby zachęcić do dalszych badań w dziedzinie rozpoznawania obrazów żywności. Zestawy danych University of Electro-Communications Food 100 (UEC-FOOD100)22 i University of Electro-Communications Food 256 (UEC-FOOD256)30 zawierają dania japońskie, rozszerzone o niektóre dania międzynarodowe w przypadku zestawu danych UEC-FOOD256. Zestaw danych Food-101 zawiera popularne dania pozyskane z witryny website27. Zestawy danych Food-5036 i Video Retrieval Group Food 172 (VireoFood-172)37 są chińskimi kolekcjami obrazów żywności. Zestaw danych Uniwersytetu w Mediolanie-Bicocca 2016 (UNIMIB2016) składa się z obrazów tacek z jedzeniem z włoskiej stołówki38. Recipe1M to duży zbiór danych z przepisami kulinarnymi i obrazami żywności39. Zestaw danych Food-47540 zbiera cztery wcześniej opublikowane zestawy danych obrazów żywności27,30,36,37 w jeden. Beijing Technology and Business University Food 60 (BTBUFood-60) to zestaw danych obrazów przeznaczonych do wykrywania żywności41. Niedawno udostępniono zestaw danych ISIA Food-50042 różnych obrazów żywności. W porównaniu z innymi publicznie dostępnymi zestawami danych obrazów żywności, zawiera dużą liczbę obrazów, podzielonych na 500 klas żywności, i ma na celu przyspieszenie rozwoju multimedialnych rozwiązań do rozpoznawania żywności42.

Protokół

1. Rozpoznawanie obrazów żywności za pomocą NutriNet

  1. Uzyskiwanie zestawu danych obrazu żywności
    1. Zbierz listę różnych produktów spożywczych i napojów, które będą danymi wyjściowymi modelu rozpoznawania obrazów żywności. Preferowana jest zróżnicowana lista popularnych potraw i napojów, ponieważ pozwoli to na wytrenowanie solidnego modelu rozpoznawania obrazów żywności.
    2. Zapisz listę potraw i napojów w pliku tekstowym (np. "txt" lub "csv").
      UWAGA: Plik tekstowy wykorzystany przez autorów tego artykułu znajduje się w plikach uzupełniających ("food_items.txt") i zawiera listę 520 słoweńskich artykułów spożywczych
    3. .
    4. Napisz lub pobierz skrypt Python43, który korzysta z interfejsu API Google Custom Search44 do pobierania obrazów każdego produktu spożywczego z listy i zapisywania ich w osobnym folderze dla każdego produktu spożywczego.
      UWAGA: Skrypt Pythona używany przez autorów tego artykułu można znaleźć w plikach uzupełniających ("download_images.py"). Jeśli ten skrypt jest używany, klucz programisty (zmienna "developerKey", wiersz 8 w kodzie skryptu Pythona) i identyfikator niestandardowej wyszukiwarki (zmienna "cx", wiersz 28 w kodzie skryptu Pythona) muszą zostać zastąpione wartościami specyficznymi dla używanego konta Google.
    5. Uruchom skrypt Pythona z kroku 1.1.3 (np. z poleceniem: 'python download_images.py').
  2. (Opcjonalnie) Czyszczenie zestawu danych obrazu żywności
    1. Wytrenuj model wykrywania obrazów żywności w taki sam sposób, jak w sekcji 1.4, z wyjątkiem użycia tylko dwóch danych wyjściowych (żywność, żywność nieżywnościowa) w przeciwieństwie do listy danych wyjściowych z kroku 1.1.1.
      UWAGA: Autorzy tego artykułu wykorzystali obrazy połączone ze stron internetowych z przepisami i zestawem danych ImageNet45, aby wytrenować model wykrywania obrazów żywności. Ponieważ nacisk kładziony jest tutaj na rozpoznawanie obrazów żywności i jest to opcjonalny krok czyszczenia zestawu danych rozpoznawania, dalsze szczegóły są pomijane. Zamiast tego więcej szczegółów na temat tego podejścia można znaleźć w Mezgec et al.2.
    2. Uruchom model wykrywania z kroku 1.2.1 na zestawie danych obrazu żywności, który jest wynikiem kroku 1.1.4.
    3. Usuń wszystkie obrazy, które zostały oznaczone jako niespożywcze przez model wykrywania z kroku 1.2.1.
    4. Ręcznie sprawdź, czy zestaw danych obrazów żywności nie zawiera innych błędnych obrazów lub obrazów o niskiej jakości oraz duplikatów obrazów.
    5. Usuń obrazy znalezione w kroku 1.2.4.
  3. Rozszerzanie zestawu danych obrazów żywności
    1. Utwórz nową wersję każdego obrazu z zestawu danych obrazów żywności, obracając go o 90° za pomocą biblioteki CLoDSA46 (wiersze od 19 do 21 w dołączonym skrypcie Pythona).
      UWAGA: Skrypt Pythona zawierający wszystkie komendy CLoDSA używane przez autorów tego artykułu można znaleźć w pliku dołączonym do plików uzupełniających ("nutrinet_augmentation.py"). Jeśli ten skrypt jest używany, ścieżka wejściowa (zmienna "INPUT_PATH", wiersz 8 w kodzie skryptu Pythona) i ścieżka wyjściowa (zmienna "OUTPUT_PATH", linia 11 w kodzie skryptu Pythona) muszą zostać zastąpione ścieżkami do żądanych folderów.
    2. Utwórz nową wersję każdego obrazu z zestawu danych obrazów żywności, obracając go o 180° za pomocą biblioteki CLoDSA (wiersze od 19 do 21 w dołączonym skrypcie Pythona).
    3. Utwórz nową wersję każdego obrazu ze zbioru danych obrazów żywności, obracając go o 270° za pomocą biblioteki CLoDSA (wiersze od 19 do 21 w dołączonym skrypcie Pythona).
    4. Utwórz nową wersję każdego obrazu z zestawu danych obrazów żywności, odwracając go w poziomie za pomocą biblioteki CLoDSA (wiersze 23 i 24 w dołączonym skrypcie języka Python).
    5. Utwórz nową wersję każdego obrazu z zestawu danych obrazu żywności, dodając do niego losowy kolorowy szum za pomocą biblioteki CLoDSA (wiersze 26 i 27 w dołączonym skrypcie języka Python).
    6. Utwórz nową wersję każdego obrazu z zestawu danych obrazów żywności, powiększając go o 25% za pomocą biblioteki CLoDSA (wiersze 29 i 30 w dołączonym skrypcie Pythona).
    7. Zapisz obrazy z kroków 1.3.1-1.3.6 wraz z oryginalnymi obrazami (wiersze 16 i 17 w dołączonym skrypcie Pythona) w nowym zestawie danych obrazów żywności (w sumie 7 wariantów na obraz żywności). Odbywa się to poprzez wykonanie polecenia w wierszu 32 dołączonego skryptu Pythona.
  4. Rozpoznawanie obrazów żywności
    1. Zaimportuj zestaw danych obrazów żywności z kroku 1.3.7 do środowiska NVIDIA DIGITS 47, dzieląc zestaw danych na podzbiory treningowe, walidacyjne i testowe w interfejsie użytkownika NVIDIA DIGITS.
    2. Skopiuj i wklej tekst definicji architektury NutriNet2 do NVIDIA DIGITS jako sieć niestandardowa.
      UWAGA: Tekst definicji architektury NutriNet można znaleźć w plikach uzupełniających ('nutrinet.prototxt').
    3. (Opcjonalnie) Zdefiniuj hiperparametry trenowania w interfejsie użytkownika NVIDIA DIGITS.
      UWAGA: Hiperparametry to parametry, które są używane do definiowania procesu trenowania przed jego rozpoczęciem. Hiperparametry używane przez autorów tego artykułu można znaleźć w pliku zawartym w plikach uzupełniających ("nutrinet_hyperparameters.prototxt"). Chociaż dla każdego zestawu danych potrzebne jest eksperymentowanie w celu znalezienia optymalnych hiperparametrów, plik zawiera konfigurację hiperparametrów, którą można skopiować do interfejsu użytkownika NVIDIA DIGITS. Ponadto NVIDIA DIGITS wypełnia hiperparametry wartościami domyślnymi, które mogą być używane jako punkt odniesienia. Ten krok jest zatem opcjonalny.
    4. Uruchom szkolenie modelu NutriNet.
    5. Po zakończeniu trenowania wykonaj najlepiej działającą iterację modelu NutriNet. Model ten jest następnie używany do testowania wydajności tego podejścia.
      UWAGA: Istnieje wiele sposobów określenia najbardziej wydajnej iteracji modelu. Prosty sposób na to jest następujący. NVIDIA DIGITS generuje wykres miar dokładności dla każdej epoki treningowej. Sprawdź, która epoka osiągnęła najniższą wartość straty dla podzbioru walidacji zestawu danych obrazu żywności — tę iterację modelu można uznać za najbardziej wydajną. Opcjonalnym krokiem w określaniu najlepiej działającej iteracji modelu jest obserwacja, jak wartość straty dla podzbioru uczenia zmienia się z epoki na epokę, a jeśli zaczyna spadać w sposób ciągły, podczas gdy wartość straty dla podzbioru walidacji pozostaje taka sama lub rośnie w sposób ciągły, weź epokę przed tym spadkiem wartości straty uczenia, ponieważ może to sygnalizować, kiedy model zaczął nadmierne dopasowanie na obrazach treningowych.

2. Segmentacja obrazów żywności za pomocą FCN

  1. Uzyskiwanie zestawu danych obrazu fałszywego jedzenia
    1. Uzyskaj zestaw danych obrazów fałszywego jedzenia. Obrazy fałszywego jedzenia są zbierane przez naukowców przeprowadzających badania behawioralne przy użyciu replik żywności.
      UWAGA: Autorzy tego artykułu otrzymali zdjęcia fałszywej żywności, które zostały zebrane w środowisku laboratoryjnym18.
    2. Ręcznie dodawaj adnotacje do każdego obrazu żywności na poziomie piksela — każdy piksel na obrazie musi zawierać informacje o tym, do jakiej klasy żywności należy. 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.
      UWAGA: Jest wiele narzędzi, aby to osiągnąć - autorzy tego artykułu wykorzystali JavaScript Segment Annotator48.
  2. Rozszerzanie zestawu danych obrazów podróbek żywności
    1. Wykonaj te same czynności, co w sekcji 1.3, ale tylko na obrazach z podzbioru treningowego zestawu danych obrazów żywności.
      UWAGA: Z wyjątkiem kroku 1.3.5 wszystkie kroki rozszerzania danych muszą być również wykonywane na odpowiednich obrazach adnotacji. Jeśli używany jest skrypt z sekcji 1.3, Ścieżka wejściowa (zmienna 'INPUT_PATH', wiersz 8 w kodzie skryptu Python43) i Ścieżka wyjściowa (zmienna 'OUTPUT_PATH', linia 11 w kodzie skryptu Pythona) muszą zostać zastąpione ścieżkami do żądanych folderów. Ponadto ustaw Problem (zmienna "PROBLEM", wiersz 6 w kodzie skryptu Pythona) na "instance_segmentation", a tryb adnotacji (zmienna "ANNOTATION_MODE", wiersz 7 w kodzie skryptu Pythona) i tryb wyjściowy (zmienna "OUTPUT_MODE", wiersz 10 w kodzie skryptu Pythona) na "coco".
  3. Przeprowadzanie segmentacji obrazu podróbek żywności
    1. Wykonaj 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.
      UWAGA: Hiperparametry to parametry, które są używane do definiowania procesu trenowania przed jego rozpoczęciem. Hiperparametry trenowania używane przez autorów tego artykułu dla opcjonalnego kroku 1.4.3 można znaleźć w pliku zawartym w plikach uzupełniających ("fcn-8s_hyperparameters.prototxt"). Chociaż dla każdego zestawu danych potrzebne jest eksperymentowanie w celu znalezienia optymalnego zestawu hiperparametrów, plik zawiera konfigurację hiperparametrów, którą można skopiować do interfejsu użytkownika NVIDIA DIGITS47. Ponadto NVIDIA DIGITS wypełnia hiperparametry wartościami domyślnymi, które mogą być używane jako punkt odniesienia.
    2. Skopiuj i wklej tekst definicji architektury FCN-8s15 do środowiska NVIDIA DIGITS jako sieć niestandardowa.
      UWAGA: Tekst definicji architektury FCN-8s jest publicznie dostępny na GitHub49.
    3. Wprowadź ścieżkę do wstępnie wytrenowanych wzorców masy modelu FCN-8s w interfejsie użytkownika NVIDIA DIGITS.
      UWAGA: Te wzorce masy modelu zostały wstępnie wytrenowane na zestawie danych PASCAL VOC 17 i można je znaleźć na stronie Internet49.

3. Segmentacja obrazów żywności za pomocą HTC ResNet

  1. Uzyskiwanie zestawu danych obrazu żywności
    1. Pobierz zestaw danych obrazów żywności ze strony internetowej FRC19.
  2. Rozszerzanie zestawu danych obrazów żywności
    1. Wykonaj kroki 1.3.1-1.3.4.
      UWAGA: Skrypt Python43 zawierający wszystkie komendy CLoDSA46 używane przez autorów tego artykułu można znaleźć w pliku dołączonym do plików uzupełniających ('frc_augmentation.py'). Jeśli ten skrypt jest używany, ścieżka wejściowa (zmienna "INPUT_PATH", wiersz 8 w kodzie skryptu Pythona) i ścieżka wyjściowa (zmienna "OUTPUT_PATH", linia 11 w kodzie skryptu Pythona) muszą zostać zastąpione ścieżkami do żądanych folderów.
    2. Utwórz nową wersję każdego obrazu z zestawu danych obrazu żywności, dodając do niego rozmycie gaussowskie za pomocą biblioteki CLoDSA (wiersze 26 i 27 w dołączonym skrypcie Pythona).
    3. Utwórz nową wersję każdego obrazu z zestawu danych obrazów żywności, wyostrzając go za pomocą biblioteki CLoDSA (wiersze 29 i 30 w dołączonym skrypcie Pythona).
    4. Utwórz nową wersję każdego obrazu z zestawu danych obrazów żywności, stosując do niego korekcję gamma za pomocą biblioteki CLoDSA (wiersze 32 i 33 w dołączonym skrypcie języka Python).
    5. Zapisz obrazy z kroków 3.2.1-3.2.4 wraz z oryginalnymi obrazami (wiersze 16 i 17 w dołączonym skrypcie Pythona) w nowym zestawie danych obrazów żywności (w sumie 8 wariantów na obraz żywności). Odbywa się to poprzez wykonanie polecenia w wierszu 35 dołączonego skryptu Pythona.
    6. Zapisz obrazy z kroków 3.2.2-3.2.4 wraz z oryginalnymi obrazami (wiersze 16 i 17 w dołączonym skrypcie Pythona) w nowym zestawie danych obrazów żywności (w sumie 4 warianty na obraz żywności). Odbywa się to poprzez usunięcie wierszy od 19 do 24 dołączonego skryptu Pythona i wykonanie polecenia w wierszu 35.
  3. Przeprowadzanie segmentacji obrazów żywności
    1. Zmodyfikuj istniejącą definicję HTC20 ResNet-101 architecture16 z biblioteki MMDetection50 w sekcjach "ustawienia modelu" i "ustawienia zestawu danych" pliku definicji architektury, tak aby akceptowała zestawy danych obrazów żywności z kroków 3.1.1, 3.2.5 i 3.2.6.
    2. (Opcjonalnie) Zmodyfikuj definicję architektury HTC ResNet-101 z kroku 3.3.1, aby zdefiniować hiperparametry trenowania: rozmiar partii w sekcji "Ustawienia zestawu danych", typ solvera i szybkość uczenia się w sekcji "Optymalizator", zasady uczenia się w sekcji "Polityka uczenia się" oraz liczba epok szkoleniowych w sekcji "Ustawienia środowiska uruchomieniowego" pliku definicji architektury.
      UWAGA: Zmodyfikowany plik definicji architektury HTC ResNet-101 można znaleźć w plikach uzupełniających ("htc_resnet-101.py"). Hiperparametry to parametry, które są używane do definiowania procesu trenowania przed jego rozpoczęciem. Chociaż eksperymentowanie jest potrzebne dla każdego zestawu danych, aby znaleźć optymalny zestaw hiperparametrów, plik zawiera już konfigurację hiperparametrów, której można używać bez modyfikacji. Ten krok jest zatem opcjonalny.
    3. Uruchom trenowanie modelu HTC ResNet-101 na zestawie danych obrazów żywności z kroku 3.1.1 przy użyciu biblioteki MMDetection (np. za pomocą polecenia: 'python mmdetection/tools/train.py htc_resnet-101.py').
    4. Po zakończeniu trenowania z kroku 3.3.3 przejdź do najlepiej działającej iteracji modelu HTC ResNet-101 i dostosuj ją, uruchamiając kolejną fazę trenowania na zestawie danych obrazu żywności z kroku 3.2.5.
      UWAGA: Istnieje wiele sposobów określenia najbardziej wydajnej iteracji modelu. Prosty sposób na to jest następujący. Biblioteka MMDetection wyprowadza wartości miar dokładności dla każdej epoki trenowania w interfejsie wiersza poleceń. Sprawdź, która epoka osiągnęła najniższą wartość straty dla podzbioru walidacji zestawu danych obrazu żywności — tę iterację modelu można uznać za najbardziej wydajną. Opcjonalnym krokiem w określaniu najlepiej działającej iteracji modelu jest obserwacja, jak wartość straty dla podzbioru uczenia zmienia się z epoki na epokę, a jeśli zaczyna spadać w sposób ciągły, podczas gdy wartość straty dla podzbioru walidacji pozostaje taka sama lub rośnie w sposób ciągły, weź epokę przed tym spadkiem wartości straty uczenia, ponieważ może to sygnalizować, kiedy model zaczął nadmierne dopasowanie na obrazach treningowych.
    5. 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.
      UWAGA: Patrz uwaga dotycząca kroku 3.3.4.
    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.
      UWAGA: Patrz uwaga dotycząca kroku 3.3.4.
    7. 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.
      UWAGA: Patrz uwaga dotycząca kroku 3.3.4. Kroki 3.3.3-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.

Wyniki

NutriNet został przetestowany pod kątem trzech popularnych wówczas architektur głębokiego uczenia: AlexNet14, GoogLeNet51 i ResNet16. Przetestowano również wiele parametrów treningowych dla wszystkich architektur w celu zdefiniowania optymalnych wartości2. Jednym z nich jest wybór typu solvera, który określa, w jaki sposób funkcja straty jest zminimalizowana. Ta funkcja jest podstawową miarą jakości do trenowania sieci neuronowych, ponieważ lepiej nadaje się do optymalizacji podczas trenowania niż do dokładności klasyfikacji. Przetestowaliśmy trzy solvery: Stochastic Gradient Descent (SGD)52, Nesterov's Accelerated Gradient (NAG)53 oraz algorytm Adaptive Gradient (AdaGrad)54. Drugim parametrem jest rozmiar wsadu, który określa liczbę obrazów, które są przetwarzane w tym samym czasie. O wartości tego parametru decydowała głębokość architektury deep learning, jako że głębsze architektury wymagają więcej miejsca w pamięci GPU - konsekwencją takiego podejścia było to, że pamięć była całkowicie wypełniona obrazami dla wszystkich architektur, niezależnie od głębokości. Trzecim parametrem jest szybkość uczenia się, która określa szybkość, z jaką zmieniają się parametry sieci neuronowej podczas treningu. Ten parametr został ustawiony zgodnie z wielkością partii, ponieważ liczba jednocześnie przetwarzanych obrazów dyktuje współczynnik zbieżności. Modele AlexNet zostały przeszkolone przy użyciu rozmiaru partii 256 obrazów i podstawowego współczynnika uczenia się wynoszącego 0,02; NutriNet wykorzystał wielkość partii 128 obrazów i szybkość 0,01; GoogLeNet 64 obrazy i szybkość 0,005; i ResNet 16 obrazów i szybkość 0,00125. Trzy inne parametry zostały ustalone dla wszystkich architektur: polityka szybkości uczenia się (step-down), rozmiar kroku (30%) i gamma (0,1). Parametry te łącznie opisują, jak zmienia się tempo uczenia się w każdej epoce. Ideą tego podejścia jest to, że współczynnik uczenia się jest stopniowo obniżany w celu precyzyjnego dostrojenia modelu w miarę zbliżania się do optymalnej wartości strat. Wreszcie, liczba epok szkoleniowych została również ustalona na 150 dla wszystkich architektur głębokiego uczenia2.

Najlepszym wynikiem spośród wszystkich testowanych parametrów, który osiągnął NutriNet, była dokładność klasyfikacji na poziomie 86,72% w zestawie danych rozpoznawania, która była o około 2% wyższa niż najlepszy wynik dla AlexNet i nieco wyższa niż najlepszy wynik GoogLeNet. Najlepiej działającą architekturą okazał się ResNet (o około 1%), jednak czas szkolenia dla ResNet jest znacznie dłuższy w porównaniu z NutriNet (około pięciokrotnie), co jest ważne, jeśli modele są stale trenowane w celu poprawy dokładności i liczby rozpoznawalnych artykułów spożywczych. NutriNet, AlexNet i GoogLeNet osiągnęły swoje najlepsze wyniki przy użyciu solvera AdaGrad, podczas gdy najlepszy model ResNet używał solvera NAG. NutriNet został również przetestowany na publicznie dostępnym zbiorze danych obrazów żywności UNIMIB201638. Ten zestaw danych zawiera 3 616 zdjęć 73 różnych produktów spożywczych. NutriNet osiągnął dokładność rozpoznawania na poziomie 86,39% w tym zbiorze danych, nieznacznie przewyższając wyjściowy wynik rozpoznawania autorów zbioru danych, który wyniósł 85,80%. Ponadto NutriNet został przetestowany na niewielkim zbiorze danych składającym się z 200 rzeczywistych obrazów 115 różnych produktów spożywczych i napojów, z których NutriNet osiągnął dokładność 55% w pierwszej piątce.

Aby wytrenować model segmentacji obrazów fake-food FCN-8s, użyliśmy Adam55 jako typu solvera, ponieważ stwierdziliśmy, że działa optymalnie dla tego zadania. Podstawowy współczynnik uczenia się został ustalony na bardzo niskim poziomie - na poziomie 0,0001. Powodem niskiej liczby jest fakt, że tylko jeden obraz może być przetwarzany na raz, co jest konsekwencją procesu klasyfikacji na poziomie pikseli. Wymagania dotyczące pamięci procesora GPU dla tego podejścia są znacznie większe niż klasyfikacja na poziomie obrazu. W związku z tym szybkość uczenia się musiała być ustawiona na niskim poziomie, aby parametry nie były zmieniane zbyt szybko i nie zbiegały się do mniej optymalnych wartości. Liczba epok treningowych została ustawiona na 100, podczas gdy polityka szybkości uczenia się, rozmiar kroku i gamma zostały ustawione na spadek odpowiednio 34% i 0,1, ponieważ te parametry dały najdokładniejsze modele.

Pomiary dokładności modelu FCN-8s zostały wykonane przy użyciu miary dokładności pikseli15, co jest analogiczne do dokładności klasyfikacji tradycyjnych sieci głębokiego uczenia, główna różnica polega na tym, że dokładność jest obliczana na poziomie pikseli, a nie na poziomie obrazu:

figure-results-1

gdzie PA jest miarą dokładności pikseli, nij jest liczbą pikseli z klasy, którą przewidywałem, że należą do klasy j, a ti = Σj nij jest całkowitą liczbą pikseli z klasy i in the ground-truth labels1. Innymi słowy, miara dokładności pikseli jest obliczana przez podzielenie prawidłowo przewidywanych pikseli przez całkowitą liczbę pikseli. Końcowa celność wytrenowanego modelu FCN-8s wyniosła 92,18%. Rysunek 2 pokazuje trzy przykładowe obrazy z zestawu danych o obrazach podróbek żywności (po jednym z każdego z podzbiorów treningu, walidacji i testowania), wraz z odpowiadającymi im etykietami prawdy podstawowej i przewidywania modelu.

Parametry do trenowania HTC20 modelu ResNet-101 do segmentacji obrazów żywności zostały ustawione w następujący sposób: użytym typem solvera był SGD, ponieważ przewyższał inne typy solverów. Podstawowa szybkość uczenia się została ustawiona na 0,00125, a rozmiar partii na 2 obrazy. Liczba epok trenowania została ustawiona na 40 na fazę trenowania i przeprowadzono wiele faz trenowania - najpierw na oryginalnym zestawie danych FRC bez rozszerzonych obrazów, a następnie na 8-krotnie rozszerzonym i 4-krotnie rozszerzonym zbiorze danych FRC wiele razy w naprzemienny sposób, za każdym razem biorąc model o najlepszej wydajności i dostrajając go w następnej fazie trenowania. Więcej szczegółów na temat faz szkolenia można znaleźć w sekcji 3.3 tekstu protokołu. Na koniec zastosowano politykę uczenia się stopniowego, z ustalonymi epokami, w których tempo uczenia się spadało (epoki 28 i 35 dla pierwszej fazy szkolenia). Ważną rzeczą, na którą należy zwrócić uwagę, jest to, że chociaż ta sekwencja faz trenowania przyniosła najlepsze wyniki w naszych testach w zakresie FRC, użycie innego zestawu danych może wymagać innej sekwencji w celu uzyskania optymalnych wyników.

To oparte na ResNet rozwiązanie do segmentacji obrazów żywności zostało ocenione przy użyciu następującej miary precyzji19:

figure-results-2

gdzie P to precyzja, TP to liczba prawdziwie pozytywnych przewidywań przez model segmentacji obrazu żywności, FP to liczba fałszywie pozytywnych przewidywań, a IoU to przecięcie przez sumę, które jest obliczane za pomocą tego równania:

figure-results-3

gdzie Obszar Nakładania się reprezentuje liczbę przewidywań przez model, które pokrywają się z prawdą podstawową, a Obszar Unii reprezentuje całkowitą liczbę przewidywań przez model wraz z prawdą podstawową, zarówno na poziomie pikseli, jak i dla każdej indywidualnej klasy żywności. Wycofanie jest używane jako miara drugorzędna i jest obliczane w podobny sposób, za pomocą następującej formuły19:

figure-results-4

gdzie R to przypomnienie, a FN to liczba fałszywie negatywnych prognoz przez model segmentacji obrazów żywności. Miary precyzji i kompletności są następnie uśredniane dla wszystkich klas w podstawowej prawdzie. Korzystając z tych pomiarów, nasz model osiągnął średnią precyzję na poziomie 59,2% i średnią liczbę zapamiętanych na poziomie 82,1%, co dało nam drugie miejsce w drugiej rundzie konkursu Food Recognition Challenge19. Wynik ten był o 4,2% niższy od pierwszego miejsca i o 5,3% lepszy od trzeciego pod względem średniej precyzji pomiaru. Tabela 1 zawiera wyniki dla 4 najlepszych uczestników konkursu.

figure-results-5
Rysunek 1: Diagram architektury głębokiej sieci neuronowej NutriNet. Rysunek ten został opublikowany w Mezgec et al.2. Kliknij tutaj, aby zobaczyć większą wersję tego rysunku.

figure-results-6
Rysunek 2: Obrazy z zestawu danych z fałszywym jedzeniem. Oryginalne obrazy (po lewej), ręcznie oznaczone etykiety prawdy podstawowej (w środku) i przewidywania z modelu FCN-8s (po prawej). Rysunek ten został opublikowany w Mezgec et al.1. Kliknij tutaj, aby zobaczyć większą wersję tego rysunku.

powiedział:
Nazwa zespołuUmieszczenieŚrednia precyzjaŚredni wskaźnik zapamiętania
Protokół rssfete163,4%88,6 %
simon_mezgeccyfra arabska59,2%82,1%
arimboux353,9%73,5%
utajony448,7%71,1%

Tabela 1: 4 najlepsze wyniki z drugiej rundy Food Recognition Challenge. Średnia precyzja jest traktowana jako podstawowa miara wydajności, a średnia kompletność jako miara drugorzędna. Wyniki pochodzą z oficjalnej tabeli liderów zawodów19.

Pliki uzupełniające. Kliknij tutaj, aby pobrać ten plik.

Dyskusja

W ostatnich latach głębokie sieci neuronowe były wielokrotnie weryfikowane jako odpowiednie rozwiązanie do rozpoznawania obrazów żywności 10,11,12,21,23,25,26,29,31,33. Nasza praca przedstawiona w tym artykule służy dalszemu udowodnieniu tego 1,2. Podejście do rozpoznawania obrazów żywności z jednym wyjściem jest proste i może być używane do prostych zastosowań, w których oczekiwane są obrazy zawierające tylko jeden produkt spożywczy lub napój2.

Podejście oparte na segmentacji obrazów żywności wydaje się szczególnie odpowiednie do rozpoznawania obrazów żywności w ogóle, bez żadnych ograniczeń co do liczby artykułów spożywczych1. Ponieważ działa poprzez klasyfikację każdego pojedynczego piksela obrazu, jest w stanie nie tylko rozpoznać dowolną liczbę artykułów spożywczych na obrazie, ale także określić, gdzie znajduje się produkt spożywczy, a także jak duży jest. Ten ostatni może być następnie wykorzystany do oszacowania masy żywności, zwłaszcza jeśli jest używany z obiektem referencyjnym lub kamerą o stałej odległości.

Wykonano pewne prace w zakresie dostępności zestawów danychobrazów żywności 3,22,27,30,36,37,38,39,40,41,42 i mamy nadzieję, że w przyszłości zostanie zrobionych więcej, szczególnie jeśli chodzi o agregację zestawów danych obrazów żywności z różnych regionów w całym kraju. świata, co umożliwiłoby opracowanie bardziej solidnych rozwiązań. Obecnie dokładność rozwiązań do automatycznego rozpoznawania obrazów żywności nie osiągnęła jeszcze dokładności na poziomie człowieka35 i jest to prawdopodobnie w dużej mierze spowodowane wykorzystaniem zestawów danych obrazów żywności o niewystarczającym rozmiarze i jakości.

W przyszłości naszym celem będzie dalsza ocena opracowanych procedur na obrazach ze świata rzeczywistego. Ogólnie rzecz biorąc, zestawy danych w tej dziedzinie często zawierają obrazy wykonane w kontrolowanych środowiskach lub obrazy, które zostały ręcznie zoptymalizowane pod kątem rozpoznawania. Dlatego ważne jest, aby zebrać duży i zróżnicowany zestaw danych obrazów żywności ze świata rzeczywistego, aby objąć wszystkie różne produkty spożywcze i napoje, które poszczególne osoby mogą chcieć rozpoznać. Pierwszym krokiem w tym kierunku było wyzwanie Food Recognition Challenge, w ramach którego wykorzystano zestaw danych z rzeczywistymi obrazami żywności19 , ale konieczne są dalsze prace w celu walidacji tego podejścia na obrazach żywności z całego świata i we współpracy z dietetykami.

Oświadczenia

Autorzy nie mają nic do ujawnienia.

Podziękowania

Autorzy chcieliby podziękować Tamarze Bucher z Uniwersytetu w Newcastle w Australii za dostarczenie zestawu danych z obrazami podróbek jedzenia. Prace te były wspierane przez programy Unii Europejskiej w zakresie badań naukowych i innowacji Horyzont 2020 (numery grantów 863059 - FNS-Cloud, 769661 - SAAM); oraz Słoweńska Agencja Badawcza (grant nr P2-0098). Unia Europejska i Słoweńska Agencja ds. Badań Naukowych nie odegrały żadnej roli w opracowaniu, analizie ani napisaniu tego artykułu.

Materiały

Lista materiałów użytych w tym artykule
NazwaFirmaNumer katalogowyKomentarze
HARDWARE
NVIDIA GPUNVIDIAN/AWymagany jest procesor graficzny NVIDIA, ponieważ niektóre z poniższych ram oprogramowania nie będą działać w inny sposób. https://www.nvidia.com
SOFTWARE
CaffeBerkeley AI ResearchN/ACaffe to platforma do głębokiego uczenia. https://caffe.berkeleyvision.org
CLoDSAJó Nathan HerasN/ACLoDSA to biblioteka do powiększania obrazów w języku Python. https://github.com/joheras/CLoDSA
Klient interfejsu API GoogleGoogle Nie dotyczyKlient interfejsu API Google to biblioteka klienta Pythona dla interfejsów API Google opartych na wykrywaniu. https://github.com/googleapis/google-api-python-client
Czytnik segmentów JavaScriptKota YamaguchiN/AJavaScript Segment Annotator to narzędzie do adnotacji obrazów JavaScript. https://github.com/kyamagu/js-segment-annotator
MMDetectionMultimedia Laboratory, CUHKN/AMMDetection to zestaw narzędzi do wykrywania obiektów oparty na PyTorch. https://github.com/open-mmlab/mmdetection
CYFRY NVIDIANVIDIAN/ANVIDIA DIGITS to opakowanie dla Caffe, które zapewnia graficzny interfejs internetowy. https://developer.nvidia.com/digits
OpenCVIntelN/AOpenCV to biblioteka do widzenia komputerowego. https://opencv.org
PythonPython Software FoundationN/APython to język programowania. https://www.python.org
PyTorchFacebook AI ResearchN/APyTorch to platforma uczenia maszynowego. https://pytorch.org
System operacyjny UbuntuCanonicalN/AUbuntu 14.04 to system operacyjny używany przez autorów i oferuje kompatybilność ze wszystkimi powyższymi platformami i narzędziami oprogramowania. https://ubuntu.com

Bibliografia

  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).

Przedruki i uprawnienia

Poproś o pozwolenie na ponowne wykorzystanie tekstu lub ilustracji tego artykułu JoVE

Poproś o pozwolenie

Tagi

Rozpoznawanie obraz w ywno cisegmentacja obrazuarchitektura NutriNetmodel FCN 8SHTC ResNet 101augmentacja danychdok adno pikselowamiara precyzjiFood Recognition Challenge

Powiązane artykuły