Summary

Redes neurais profundas para avaliação dietética baseada em imagens

Published: March 13, 2021
doi:

Summary

O objetivo do trabalho apresentado neste artigo é desenvolver tecnologia para reconhecimento automatizado de itens de alimentos e bebidas a partir de imagens tiradas por dispositivos móveis. A tecnologia é composta por duas abordagens diferentes – a primeira realiza o reconhecimento de imagem alimentar, enquanto a segunda realiza a segmentação de imagens alimentares.

Abstract

Devido aos problemas e custos associados às abordagens manuais de avaliação alimentar, soluções automatizadas são necessárias para facilitar e acelerar o trabalho e aumentar sua qualidade. Hoje, soluções automatizadas são capazes de registrar a ingestão dietética de uma pessoa de uma forma muito mais simples, como tirar uma imagem com uma câmera de smartphone. Neste artigo, focaremos em tais abordagens baseadas em imagens para a avaliação alimentar. Para o problema do reconhecimento de imagens alimentares, redes neurais profundas alcançaram o estado da arte nos últimos anos, e apresentamos nosso trabalho neste campo. Em particular, descrevemos pela primeira vez o método de reconhecimento de imagem de alimentos e bebidas usando uma arquitetura de rede neural profunda, chamada NutriNet. Este método, como a maioria das pesquisas feitas nos primeiros dias de reconhecimento de imagem alimentar baseado em aprendizagem profunda, é limitado a uma saída por imagem e, portanto, inadequado para imagens com múltiplos itens de alimentos ou bebidas. É por isso que abordagens que realizam a segmentação de imagens alimentares são consideravelmente mais robustas, pois são capazes de identificar qualquer número de itens alimentares ou bebidas na imagem. Por isso, também apresentamos dois métodos para segmentação de imagens alimentares – um é baseado em redes totalmente convolucionais (FCNs) e outro em redes residuais profundas (ResNet).

Introduction

A avaliação alimentar é um passo crucial na determinação de áreas acionáveis da dieta de um indivíduo. No entanto, a realização de avaliação alimentar usando abordagens tradicionalmente manuais está associada a custos consideráveis. Essas abordagens também são propensas a erros, pois muitas vezes dependem de auto-relato por parte do indivíduo. A avaliação alimentar automatizada aborda essas questões, fornecendo uma maneira mais simples de quantificar e qualificar a ingestão de alimentos. Tal abordagem também pode aliviar alguns dos erros presentes em abordagens manuais, como refeições perdidas, incapacidade de avaliar com precisão o volume de alimentos, etc. Portanto, há benefícios claros para automatizar a avaliação alimentar, desenvolvendo soluções que identifiquem diferentes alimentos e bebidas e quantifiquem a ingestão alimentar1. Essas soluções também podem ser utilizadas para possibilitar uma estimativa dos valores nutricionais dos alimentos e bebidas (a partir de agora “alimentos”). Consequentemente, a avaliação alimentar automatizada é útil para múltiplas aplicações – desde usos estritamente médicos, como permitir que nutricionistas rastreiem e analisem com mais facilidade e precisão as dietas de seus pacientes, até o uso dentro de aplicativos de bem-estar voltados para a população em geral.

Reconhecer automaticamente itens alimentares de imagens é um problema desafiador de visão computacional. Isso se deve aos alimentos serem objetos tipicamente deformáveis, e devido ao fato de que uma grande quantidade de informações visuais do item alimentar pode ser perdida durante sua preparação. Além disso, diferentes alimentos podem parecer muito semelhantes uns aos outros, e a mesma comida pode parecer substancialmente diferente em múltiplas imagens2. Além disso, a precisão do reconhecimento depende de muitos outros fatores, como a qualidade da imagem, se o item alimentar está obstruído por outro item, distância da qual a imagem foi tirada, etc. Reconhecer itens de bebidas apresenta seu próprio conjunto de desafios, sendo o principal a quantidade limitada de informações visuais que está disponível em uma imagem. Essas informações podem ser a cor da bebida, a cor e a estrutura do recipiente de bebidas, e, em condições ideais de imagem, a densidade da bebida2.

Para reconhecer com sucesso os alimentos a partir de imagens, é necessário aprender características de cada aula de alimentos e bebidas. Isso foi tradicionalmente feito usando extratores de características definidos manualmente3,4,5,6 que realizam reconhecimento com base em características específicas de itens como cor, textura, tamanho, etc., ou uma combinação desses recursos. Exemplos desses extratores de características incluem vários aprendizados de kernel4, características locais em pares5 e o modelo de saco de recursos6. Devido à complexidade das imagens alimentares, essas abordagens alcançaram principalmente uma baixa precisão de classificação – entre 10% e 40%3,4,5. A razão para isso é que a abordagem manual não é robusta o suficiente para ser suficientemente precisa. Como um item alimentar pode variar significativamente na aparência, não é viável englobar todas essas variâncias manualmente. A maior precisão de classificação pode ser alcançada com extratores de características definidos manualmente quando o número de classes alimentares é reduzido5, ou diferentes características de imagem são combinadas6, indicando assim que há necessidade de soluções mais complexas para este problema.

É por isso que o aprendizado profundo mostrou-se tão eficaz para o problema do reconhecimento de imagem alimentar. O aprendizado profundo, ou redes neurais profundas, foi inspirado em cérebros biológicos, e permite que modelos computacionais compostos de múltiplas camadas de processamento aprendam automaticamente recursos através do treinamento em um conjunto de imagens de entrada7,8. Por causa disso, o aprendizado profundo melhorou substancialmente o estado da arte em uma variedade de campos de pesquisa7, com visão computacional, e, posteriormente, reconhecimento de imagem alimentar, sendo um deles2.

Em particular, redes neurais convolucionais profundas (DCNNs) são mais populares para o reconhecimento de imagem alimentar – essas redes são inspiradas no sistema visual dos animais, onde neurônios individuais tentam obter uma compreensão da entrada visual reagindo a regiões sobrepostas no campo visual9. Uma rede neural convolucional pega a imagem de entrada e realiza uma série de operações em cada uma das camadas de rede, as mais comuns são camadas convolucionais, totalmente conectadas e de agrupamento. As camadas convolucionais contêm filtros aprendeu que respondem a certos recursos nos dados de entrada, enquanto camadas totalmente conectadas compõem dados de saída de outras camadas para obter conhecimento de nível superior a partir dele. O objetivo de agrupar camadas é diminuir a amostra dos dados de entrada2. Existem duas abordagens para o uso de modelos de aprendizagem profunda que se mostraram populares: tomar uma definição de rede neural profunda existente10,11, referida como uma arquitetura de aprendizagem profunda neste artigo, ou definir uma nova arquitetura de aprendizagem profunda12,13, e treinar qualquer um deles em um conjunto de dados de imagem alimentar. Há pontos fortes e fracos em ambas as abordagens – ao usar uma arquitetura de deep learning existente, uma arquitetura que teve um bom desempenho para outros problemas pode ser escolhida e afinada para o problema desejado, economizando tempo e garantindo que uma arquitetura validada tenha sido escolhida. Definir uma nova arquitetura de aprendizagem profunda, por outro lado, é mais demorado, mas permite que o desenvolvimento de arquiteturas que são feitas especificamente levem em conta as especificidades de um problema e, portanto, teoricamente funcionam melhor para esse problema.

Neste artigo, apresentamos ambas as abordagens. Para o problema do reconhecimento de imagem alimentar, desenvolvemos uma nova arquitetura DCNN chamada NutriNet2,que é uma modificação da conhecida arquitetura AlexNet14. Existem duas principais diferenças em comparação com a AlexNet: a NutriNet aceita imagens de 512×512 pixels como entrada (em oposição às imagens de 256×256 pixels para AlexNet), e a NutriNet tem uma camada convolucional adicional no início da rede neural. Essas duas alterações foram introduzidas para extrair o máximo de informações das imagens do conjunto de dados de reconhecimento possível. Ter imagens de maior resolução significava que há mais informações presentes nas imagens e ter camadas mais convolucionais significava que conhecimentos adicionais poderiam ser extraídos das imagens. Em comparação com os cerca de 60 milhões de parâmetros da AlexNet, a NutriNet contém menos parâmetros: aproximadamente 33 milhões. Isso se deve à diferença de dimensionalidade na primeira camada totalmente conectada causada pela camada convolucional adicional2. A Figura 1 contém um diagrama da arquitetura NutriNet. As imagens de alimentos que foram usadas para treinar o modelo NutriNet foram coletadas da Internet – o procedimento está descrito no texto do protocolo.

Para o problema da segmentação de imagens alimentares, utilizamos duas arquiteturas diferentes existentes: redes totalmente convolucionais (FCNs)15 e redes residuais profundas (ResNet)16,ambas representando o estado da arte para segmentação de imagens quando as usamos para desenvolver suas respectivas soluções de segmentação de imagem alimentar. Existem várias variantes FCN que foram introduzidas por Long et al.: FCN-32s, FCN-16s e FCN-8s15. FcN-32s produz um mapa de pixels baseado nas previsões da camada final da FCN, enquanto a variante FCN-16s combina essas previsões com as de uma camada anterior. O FCN-8s considera mais uma outra camada de previsões e, portanto, é capaz de fazer previsões no melhor grão, razão pela qual é adequado para o reconhecimento de imagem alimentar. O FCN-8s que usamos foi pré-treinado no conjunto de dados PASCAL Visual Object Classes (PASCAL VOC)17 e treinado e testado em imagens de réplicas de alimentos (a partir de agora ‘comida falsa’)18 devido à sua semelhança visual com a comida real e devido à falta de imagens anotadas de alimentos reais em um nível de pixel. Alimentos falsos são usados em diferentes estudos comportamentais e imagens são tiradas para todos os pratos de todos os participantes do estudo. Como o conteúdo alimentar dessas imagens é conhecido, torna o conjunto de dados de imagem útil para o treinamento de modelos de aprendizagem profunda. As etapas de processamento do conjunto de dados estão descritas no texto do protocolo.

A solução baseada em ResNet foi desenvolvida no âmbito do Food Recognition Challenge (FRC)19. Ele usa o método Hybrid Task Cascade (HTC)20 com uma espinha dorsal ResNet-10116. Esta é uma abordagem de última geração para o problema de segmentação de imagem que pode usar diferentes extratores de características, ou backbones. Também consideramos outras redes backbone, particularmente outras variantes da ResNet, como o ResNet-5016,mas o ResNet-101 foi o mais adequado devido à sua profundidade e capacidade de representar imagens de entrada de forma bastante complexa. O conjunto de dados usado para treinar o modelo HTC ResNet-101 foi o conjunto de dados FRC com imagens aumentadas adicionadas. Esses aumentos são apresentados no texto do protocolo.

Este artigo destina-se a ser um recurso para especialistas em machine learning que buscam informações sobre quais arquiteturas de deep learning e etapas de aumento de dados funcionam bem para os problemas de reconhecimento e segmentação de imagens alimentares, bem como para pesquisadores de nutrição que procuram usar nossa abordagem para automatizar o reconhecimento de imagens alimentares para uso na avaliação alimentar. Nos parágrafos abaixo, são apresentadas soluções de deep learning e conjuntos de dados do campo de reconhecimento de imagem alimentar. No texto do protocolo, detalhamos como cada uma das três abordagens foi usada para treinar modelos de rede neural profunda que podem ser usados para avaliação alimentar automatizada. Além disso, cada seção de protocolo contém uma descrição de como os conjuntos de dados de imagem alimentar usados para treinamento e testes foram adquiridos e processados.

As DCNNs geralmente obtiveram resultados substancialmente melhores do que outros métodos de reconhecimento e segmentação de imagem alimentar, razão pela qual a grande maioria das pesquisas recentes no campo é baseada nessas redes. Kawano et al. utilizaram DCNNs para complementar abordagens manuais21 e obtiveram uma precisão de classificação de 72,26% no conjunto de dados UEC-FOOD10022. Christodoulidis et al. usaram-nas exclusivamente para obter uma maior precisão de 84,90% em um conjunto de dados auto-adquirido23. Tanno et al. desenvolveram o DeepFoodCam – um aplicativo para smartphone para reconhecimento de imagem alimentar que usa DCNNs24. Liu et al. apresentaram um sistema que realiza uma avaliação dietética baseada em Internet das Coisas usando DCNNs25. Martinel et al. introduziram uma abordagem baseada em DCNN que explora as especificidades das imagens alimentares26 e relatou uma precisão de 90,27% no conjunto de dados Food-10127. Zhou et al. autor de uma revisão de soluções de aprendizagem profunda no domínio alimentar28.

Recentemente, Zhao et al. propuseram uma rede especificamente para reconhecimento de imagem alimentar em aplicativosmóveis 29. Essa abordagem usa uma rede menor de “alunos” que aprende com uma rede maior de “professores”. Com isso, conseguiram obter uma precisão de 84% sobre o UEC-FOOD25630 e uma precisão de 91,2% no conjunto de dados Food-10127. Hafiz et al. usaram DCNNs para desenvolver uma solução de reconhecimento de imagem somente para bebidas e relataram uma precisão muito alta de 98,51%31. Shimoda et al. descreveram um novo método para detectar regiões de placas em imagens de alimentos sem o uso da anotaçãopixel-wise 32. A Ciocca et al. introduziu um novo conjunto de dados contendo alimentos de 20 diferentes classes de alimentos em 11 estados diferentes (pasta sólida, fatiada, cremosa, etc.) e apresentou sua abordagem para modelos de reconhecimento de treinamento capazes de reconhecer o estado alimentar, além da classe alimentar33. Knez et al. avaliaram soluções de reconhecimento de imagem alimentar para dispositivosmóveis 34. Finalmente, Furtado et al. realizaram um estudo sobre como o sistema visual humano se compara ao desempenho das DCNNs e descobriu que o reconhecimento humano ainda supera dcnns com uma precisão de 80% versus 74,5%35. Os autores observaram que, com um pequeno número de aulas de alimentos, as DCNNs têm um bom desempenho, mas em um conjunto de dados com centenas de classes, a precisão do reconhecimento humano é maior35, destacando a complexidade do problema.

Apesar de seus resultados de última geração, o deep learning tem uma grande desvantagem – requer um grande conjunto de dados de entrada para treinar o modelo. No caso do reconhecimento de imagem alimentar, é necessário um grande conjunto de dados de imagem alimentar, e este conjunto de dados precisa abranger o maior número possível de cenários do mundo real. Na prática, isso significa que para cada item individual de alimentos ou bebidas, é necessária uma grande coleção de imagens, e o maior número possível de itens diferentes precisa estar presente no conjunto de dados. Se não houver imagens suficientes para um item específico no conjunto de dados, é improvável que esse item seja reconhecido com sucesso. Por outro lado, se apenas um pequeno número de itens for coberto pelo conjunto de dados, a solução será limitada em escopo, e só poderá reconhecer um punhado de alimentos e bebidas diferentes.

Vários conjuntos de dados foram disponibilizados no passado. O Pittsburgh Fast-Food Image Dataset (PFID)3 foi introduzido para incentivar mais pesquisas no campo do reconhecimento de imagens alimentares. A Universidade de Alimentos Eletro-Comunicações 100 (UEC-FOOD100)22 e a Universidade de Eletro-Comunicações Food 256 (UEC-FOOD256)30 conjuntos de dados contêm pratos japoneses, expandidos com alguns pratos internacionais no caso do conjunto de dados UEC-FOOD256. O conjunto de dados Food-101 contém pratos populares adquiridos a partir de um site27. Os conjuntos de dados Food-5036 e Video Retrieval Group Food 172 (VireoFood-172)37 são coleções chinesas de imagens de alimentos. O conjunto de dados da Universidade de Milano-Bicocca 2016 (UNIMIB2016) é composto por imagens de bandejas de alimentos de uma cantina italiana38. Recipe1M é um conjunto de dados em larga escala de receitas de cozimento e imagens de alimentos39. O conjunto de dados Food-47540 coleta quatro conjuntos de dados de imagem alimentar publicados anteriormente27,30,36,37 em um. O Beijing Technology and Business University Food 60 (BTBUFood-60) é um conjunto de imagens destinados à detecção de alimentos41. Recentemente, o conjunto de dados ISIA Food-50042 de imagens alimentares diversas foi disponibilizado. Em comparação com outros conjuntos de dados de imagem alimentar disponíveis publicamente, ele contém um grande número de imagens, divididas em 500 classes de alimentos, e tem como objetivo avançar o desenvolvimento de soluções multimídia de reconhecimento alimentar42.

Protocol

1. Reconhecimento de imagem alimentar com NutriNet Obtendo o conjunto de dados de imagem alimentar Reúna uma lista de diferentes alimentos e bebidas que serão as saídas do modelo de reconhecimento de imagem alimentar. Uma lista variada de alimentos e bebidas populares é preferida, pois isso permitirá a formação de um modelo robusto de reconhecimento de imagem alimentar. Salve a lista de alimentos e bebidas em um arquivo de texto (por exemplo, ‘txt’ ou ‘csv’).NOTA: O arquivo de texto usado pelos autores deste artigo pode ser encontrado nos arquivos suplementares (‘food_items.txt’) e inclui uma lista de 520 alimentos eslovenos. Escreva ou baixe um script Python43 que usa a API44 do Google Custom Search para baixar imagens de cada item de comida da lista e salvá-las em uma pasta separada para cada item de comida.NOTA: O script Python usado pelos autores deste artigo pode ser encontrado nos arquivos suplementares (‘download_images.py’). Se este script for usado, a Chave do Desenvolvedor (variável ‘developerKey’, linha 8 no código de script Python) e o Custom Search Engine ID (variável ‘cx’, linha 28 no código de script Python) precisam ser substituídos por valores específicos da conta do Google que está sendo usada. Execute o script Python a partir do passo 1.1.3 (por exemplo, com o comando: ‘python download_images.py’). (Opcional) Limpeza do conjunto de dados de imagem de alimentos Treine um modelo de detecção de imagem alimentar da mesma forma que na seção 1.4, exceto use apenas duas saídas (alimentos, não-alimentos) em oposição à lista de saídas da etapa 1.1.1.NOTA: Os autores deste artigo usaram imagens combinadas de sites de receitas e do conjunto de dados ImageNet45 para treinar o modelo de detecção de imagem alimentar. Como o foco aqui é o reconhecimento de imagem alimentar e este é um passo opcional para limpar o conjunto de dados de reconhecimento, mais detalhes são omitidos. Em vez disso, mais detalhes sobre essa abordagem podem ser encontrados em Mezgec et al.2. Execute o modelo de detecção a partir da etapa 1.2.1 no conjunto de dados de imagem alimentar que é o resultado da etapa 1.1.4. Exclua todas as imagens que foram marcadas como não-alimentos pelo modelo de detecção da etapa 1.2.1. Verifique manualmente o conjunto de dados da imagem alimentar para outras imagens errôneas ou de baixa qualidade e para duplicatas de imagem. Exclua imagens encontradas na etapa 1.2.4. Aumentando o conjunto de dados de imagem alimentar Crie uma nova versão de cada imagem a partir do conjunto de dados de imagem alimentar girando-a em 90° usando a biblioteca CLoDSA46 (linhas 19 a 21 no script Python incluído).NOTA: O script Python contendo todos os comandos CLoDSA usados pelos autores deste artigo pode ser encontrado em um arquivo incluído nos arquivos suplementares (‘nutrinet_augmentation.py’). Se este script for usado, o Caminho de Entrada (variável ‘INPUT_PATH’, linha 8 no código de script Python) e o Caminho de Saída (variável ‘OUTPUT_PATH’, linha 11 do código de script Python) precisam ser substituídos por caminhos para as pastas desejadas. Crie uma nova versão de cada imagem a partir do conjunto de dados de imagem alimentar girando-a em 180° usando a biblioteca CLoDSA (linhas 19 a 21 no script Python incluído). Crie uma nova versão de cada imagem a partir do conjunto de dados de imagem alimentar girando-a em 270° usando a biblioteca CLoDSA (linhas 19 a 21 no script Python incluído). Crie uma nova versão de cada imagem a partir do conjunto de dados de imagem alimentar, invertendo-a horizontalmente usando a biblioteca CLoDSA (linhas 23 e 24 no script Python incluído). Crie uma nova versão de cada imagem a partir do conjunto de dados de imagem alimentar adicionando ruído de cor aleatório a ela usando a biblioteca CLoDSA (linhas 26 e 27 no script Python incluído). Crie uma nova versão de cada imagem a partir do conjunto de dados de imagem alimentar, ampliando-a em 25% usando a biblioteca CLoDSA (linhas 29 e 30 no script Python incluído). Salve imagens das etapas 1.3.1-1.3.6, juntamente com as imagens originais (linhas 16 e 17 no script Python incluído), em um novo conjunto de dados de imagem alimentar (no total, 7 variantes por imagem alimentar). Isso é feito executando o comando na linha 32 do script Python incluído. Realizando o reconhecimento de imagem alimentar Importe o conjunto de dados de imagem alimentar da etapa 1.3.7 para o ambiente NVIDIA DIGITS47,dividindo o conjunto de dados em subconjuntos de treinamento, validação e teste na interface de usuário NVIDIA DIGITS. Copie e cole o texto de definição da arquitetura NutriNet2 no NVIDIA DIGITS como uma rede personalizada.NOTA: O texto de definição da arquitetura NutriNet pode ser encontrado nos arquivos suplementares (‘nutrinet.prototxt’). (Opcional) Defina hiperparmetros de treinamento na interface de usuário NVIDIA DIGITS.NOTA: Hiperparmetros são parâmetros que são usados para definir o processo de treinamento antes de seu início. Os hiperparâmetros utilizados pelos autores deste artigo podem ser encontrados em um arquivo incluído nos arquivos suplementares (‘nutrinet_hyperparameters.prototxt’). Embora a experimentação seja necessária para cada conjunto de dados para encontrar os hiperparmetros ideais, o arquivo contém uma configuração de hiperparômetro que pode ser copiada na interface do usuário NVIDIA DIGITS. Além disso, o NVIDIA DIGITS preenche os hiperparmetros com valores padrão que podem ser usados como linha de base. Este passo é, portanto, opcional. Executar o treinamento do modelo NutriNet. Após o treinamento ser concluído, pegue a iteração do modelo NutriNet de melhor desempenho. Este modelo é então usado para testar o desempenho desta abordagem.NOTA: Existem várias maneiras de determinar a iteração do modelo de melhor desempenho. Uma maneira simples de fazer isso é a seguinte. NVIDIA DIGITS produz um gráfico de medidas de precisão para cada época de treinamento. Verifique qual época alcançou o menor valor de perda para o subconjunto de validação do conjunto de dados de imagem alimentar – essa iteração do modelo pode ser considerada de melhor desempenho. Um passo opcional para determinar a iteração do modelo de melhor desempenho é observar como o valor da perda para o subconjunto de treinamento muda da época para a época e se ele começa a cair continuamente enquanto o valor de perda para o subconjunto de validação permanece o mesmo ou sobe continuamente, tome a época antes dessa queda no valor de perda de treinamento, como isso pode sinalizar quando o modelo começou a se adaptar demais nas imagens de treinamento. 2. Segmentação de imagem alimentar com FCNs Obtendo o conjunto de dados de imagem de alimentos falsos Obtenha um conjunto de dados de imagens falsas de alimentos. Imagens falsas de alimentos são coletadas por pesquisadores que realizam estudos comportamentais usando réplicas de alimentos.NOTA: Os autores deste artigo receberam imagens de alimentos falsos que foram coletados em um ambiente de laboratório18. Anote manualmente todas as imagens de alimentos em um nível de pixel – cada pixel na imagem deve conter informações sobre a classe alimentar a que pertence. O resultado desta etapa é uma imagem de anotação para cada imagem do conjunto de dados de imagem alimentar, onde cada pixel representa uma das classes alimentares.NOTA: Existem muitas ferramentas para conseguir isso – os autores deste artigo usaram o JavaScript Segment Anotaator48. Aumentando o conjunto de dados de imagem de alimentos falsos Execute os mesmos passos da seção 1.3, mas apenas em imagens do subconjunto de treinamento do conjunto de dados de imagem alimentar.NOTA: Com exceção da etapa 1.3.5, todas as etapas de aumento de dados também precisam ser executadas em imagens de anotação correspondentes. Se o script da seção 1.3 for usado, o Caminho de Entrada (variável ‘INPUT_PATH’, linha 8 no código de script Python43) e o Caminho de Saída (variável ‘OUTPUT_PATH’, linha 11 no código de script Python) precisam ser substituídos por caminhos para as pastas desejadas. Além disso, defina o Problema (variável ‘PROBLEM’, linha 6 no código de script Python) para ‘instance_segmentation’ e o Modo de Anotação (variável ‘ANNOTATION_MODE’, linha 7 no código de script Python) e Modo de Saída (variável ‘OUTPUT_MODE’, linha 10 no código de script Python) para ‘coco’. Realizando segmentação de imagens de alimentos falsos Execute as mesmas etapas da seção 1.4, com exceção da etapa 1.4.2. No lugar dessa etapa, realize as etapas 2.3.2 e 2.3.3.NOTA: Hiperparmetros são parâmetros que são usados para definir o processo de treinamento antes de seu início. Os hiperparâmetros de treinamento utilizados pelos autores deste artigo para a etapa opcional 1.4.3 podem ser encontrados em um arquivo incluído nos arquivos suplementares (‘fcn-8s_hyperparameters.prototxt’). Embora a experimentação seja necessária para cada conjunto de dados para encontrar o conjunto ideal de hiperparmetros, o arquivo contém uma configuração de hiperparômetro que pode ser copiada na interface do usuário NVIDIA DIGITS47. Além disso, o NVIDIA DIGITS preenche os hiperparmetros com valores padrão que podem ser usados como linha de base. Copie e cole o texto de definição da arquitetura FCN-8s15 no ambiente NVIDIA DIGITS como uma rede personalizada.NOTA: O texto de definição de arquitetura FCN-8s está disponível publicamente no GitHub49. Insira o caminho para os pesos do modelo FCN-8s pré-treinados na interface de usuário NVIDIA DIGITS.NOTA: Esses pesos do modelo foram pré-treinados no conjunto de dados PASCAL VOC17 e podem ser encontrados na Internet49. 3. Segmentação de imagem de alimentos com HTC ResNet Obtendo o conjunto de dados de imagem alimentar Baixe o conjunto de dados de imagem alimentar do site da FRC19. Aumentando o conjunto de dados de imagem alimentar Realizar etapas 1.3.1-1.3.4.NOTA: O script Python43 contendo todos os comandos CLoDSA46 usados pelos autores deste artigo pode ser encontrado em um arquivo incluído nos arquivos suplementares (‘frc_augmentation.py’). Se este script for usado, o Caminho de Entrada (variável ‘INPUT_PATH’, linha 8 no código de script Python) e o Caminho de Saída (variável ‘OUTPUT_PATH’, linha 11 do código de script Python) precisam ser substituídos por caminhos para as pastas desejadas. Crie uma nova versão de cada imagem a partir do conjunto de dados de imagem alimentar adicionando desfoque gaussiano a ela usando a biblioteca CLoDSA (linhas 26 e 27 no script Python incluído). Crie uma nova versão de cada imagem a partir do conjunto de dados de imagem alimentar, afiando-a usando a biblioteca CLoDSA (linhas 29 e 30 no script Python incluído). Crie uma nova versão de cada imagem a partir do conjunto de dados de imagem alimentar, aplicando correção gama a ela usando a biblioteca CLoDSA (linhas 32 e 33 no script Python incluído). Salve imagens dos passos 3.2.1-3.2.4, juntamente com as imagens originais (linhas 16 e 17 no script Python incluído), em um novo conjunto de dados de imagem alimentar (no total, 8 variantes por imagem alimentar). Isso é feito executando o comando na linha 35 do script Python incluído. Salve imagens dos passos 3.2.2-3.2.4, juntamente com as imagens originais (linhas 16 e 17 no script Python incluído), em um novo conjunto de dados de imagem alimentar (no total, 4 variantes por imagem alimentar). Isso é feito excluindo as linhas 19 a 24 do script Python incluído e executando o comando na linha 35. Realizando segmentação de imagem alimentar Modifique a atual definição de arquitetura HTC20 ResNet-10116 da biblioteca MMDetection50 nas seções ‘configurações de modelo’ e ‘configurações de conjunto de dados’ do arquivo de definição de arquitetura para que ele aceite os conjuntos de dados de imagem alimentar das etapas 3.1.1, 3.2.5 e 3.2.6. (Opcional) Modifique a definição de arquitetura HTC ResNet-101 da etapa 3.3.1 para definir hiperparmetros de treinamento: tamanho do lote em ‘configurações de conjunto de dados’ da seção, tipo de solver e taxa de aprendizado na seção ‘otimizador’, política de aprendizagem na seção ‘política de aprendizagem’ e número de épocas de treinamento na seção ‘configurações de tempo de execução’ do arquivo de definição de arquitetura.NOTA: O arquivo modificado de definição de arquitetura HTC ResNet-101 pode ser encontrado nos arquivos suplementares (‘htc_resnet-101.py’). Hiperparmetros são parâmetros que são usados para definir o processo de treinamento antes de seu início. Embora a experimentação seja necessária para cada conjunto de dados para encontrar o conjunto ideal de hiperparmetros, o arquivo já contém uma configuração de hiperparômetro que pode ser usada sem modificação. Este passo é, portanto, opcional. Execute o treinamento do modelo HTC ResNet-101 no conjunto de dados de imagem alimentar a partir da etapa 3.1.1 usando a biblioteca MMDetection (por exemplo, com o comando: ‘python mmdetection/tools/train.py htc_resnet-101.py’). Após o treinamento da etapa 3.3.3 estar completo, pegue a iteração modelo HTC ResNet-101 de melhor desempenho e ajuste-a, executando a próxima fase de treinamento no conjunto de dados de imagem alimentar a partir da etapa 3.2.5.NOTA: Existem várias maneiras de determinar a iteração do modelo de melhor desempenho. Uma maneira simples de fazer isso é a seguinte. A biblioteca MMDetection produz valores de medidas de precisão para cada época de treinamento na interface da linha de comando. Verifique qual época alcançou o menor valor de perda para o subconjunto de validação do conjunto de dados de imagem alimentar – essa iteração do modelo pode ser considerada de melhor desempenho. Um passo opcional para determinar a iteração do modelo de melhor desempenho é observar como o valor da perda para o subconjunto de treinamento muda da época para a época e se ele começa a cair continuamente enquanto o valor de perda para o subconjunto de validação permanece o mesmo ou sobe continuamente, tome a época antes dessa queda no valor de perda de treinamento, como isso pode sinalizar quando o modelo começou a se adaptar demais nas imagens de treinamento. Após o treinamento da etapa 3.3.4 estar completo, pegue a iteração modelo HTC ResNet-101 de melhor desempenho e ajuste-a, executando a próxima fase de treinamento no conjunto de dados de imagem alimentar a partir da etapa 3.2.6.NOTA: Veja nota para a etapa 3.3.4. Após o treinamento da etapa 3.3.5 estar completo, pegue a iteração modelo HTC ResNet-101 de melhor desempenho e ajuste-a novamente executando-a novamente executando a próxima fase de treinamento no conjunto de dados de imagem alimentar a partir da etapa 3.2.5.NOTA: Veja nota para a etapa 3.3.4. Após o treinamento da etapa 3.3.6 estiver completo, pegue a iteração modelo HTC ResNet-101 de melhor desempenho. Este modelo é então usado para testar o desempenho desta abordagem.NOTA: Veja nota para a etapa 3.3.4. As etapas 3.3.3-3.3.7 produziram os melhores resultados para os propósitos definidos pelos autores deste artigo. A experimentação é necessária para cada conjunto de dados para encontrar a sequência ideal de etapas de treinamento e aumento de dados.

Representative Results

NutriNet foi testado contra três arquiteturas populares de deep learning da época: AlexNet14, GoogLeNet51 e ResNet16. Vários parâmetros de treinamento também foram testados para todas as arquiteturas para definir os valores ideais2. Entre elas está a escolha do tipo solver, que determina como a função de perda é minimizada. Esta função é a principal medida de qualidade para o treinamento de redes neurais, pois é mais adequada para otimização durante o treinamento do que a precisão de classificação. Testamos três solucionadores: Descida de Gradiente Estocástico (SGD)52,Gradiente Acelerado (NAG)53 de Nesterov e algoritmo de gradiente adaptativo (AdaGrad)54. O segundo parâmetro é o tamanho do lote, que define o número de imagens que são processadas ao mesmo tempo. A profundidade da arquitetura de aprendizagem profunda determinou o valor desse parâmetro, pois arquiteturas mais profundas requerem mais espaço na memória da GPU – a consequência dessa abordagem foi que a memória estava completamente cheia de imagens para todas as arquiteturas, independentemente da profundidade. O terceiro parâmetro é a taxa de aprendizagem, que define a velocidade com que os parâmetros da rede neural estão sendo alterados durante o treinamento. Este parâmetro foi definido em uníssono com o tamanho do lote, pois o número de imagens processadas simultaneamente dita a taxa de convergência. Os modelos AlexNet foram treinados utilizando um tamanho de lote de 256 imagens e uma taxa básica de aprendizagem de 0,02; A NutriNet utilizou um tamanho de lote de 128 imagens e uma taxa de 0,01; Imagens GoogLeNet 64 e uma taxa de 0,005; e imagens ResNet 16 e uma taxa de 0,00125. Três outros parâmetros foram fixados para todas as arquiteturas: política de taxa de aprendizagem (step-down), tamanho do passo (30%) e gama (0,1). Esses parâmetros descrevem conjuntamente como a taxa de aprendizagem está mudando em todas as épocas. A ideia por trás dessa abordagem é que a taxa de aprendizagem está sendo gradualmente reduzida para ajustar o modelo quanto mais perto ele chega do valor ideal de perda. Finalmente, o número de épocas de treinamento também foi fixado para 150 para todas as arquiteturas de aprendizagem profunda2. O melhor resultado entre todos os parâmetros testados que a NutriNet alcançou foi uma precisão de classificação de 86,72% no conjunto de dados de reconhecimento, que foi cerca de 2% maior do que o melhor resultado para a AlexNet e ligeiramente superior ao melhor resultado da GoogLeNet. A arquitetura de melhor desempenho em geral foi a ResNet (cerca de 1%), no entanto, o tempo de treinamento para ResNet é substancialmente maior em comparação com o NutriNet (por um fator de aproximadamente cinco), o que é importante se os modelos forem continuamente re-treinados para melhorar a precisão e o número de itens alimentares reconhecíveis. NutriNet, AlexNet e GoogLeNet alcançaram seus melhores resultados usando o solucionador AdaGrad, enquanto o melhor modelo da ResNet usou o solver NAG. NutriNet também foi testado no conjunto de dados de imagem alimentar unimib2016 disponível publicamente38. Este conjunto de dados contém 3.616 imagens de 73 itens alimentares diferentes. A NutriNet obteve uma precisão de reconhecimento de 86,39% neste conjunto de dados, superando ligeiramente o resultado de reconhecimento de linha de base dos autores do conjunto de dados, que foi de 85,80%. Além disso, a NutriNet foi testada em um pequeno conjunto de dados de 200 imagens do mundo real de 115 itens diferentes de alimentos e bebidas, onde a NutriNet alcançou uma precisão top-5 de 55%. Para treinar o modelo de segmentação de imagens falsas de alimentos falsos FCN-8s, usamos o Adam55 como o tipo solucionador, pois descobrimos que ele se saiu bem para esta tarefa. A taxa básica de aprendizagem foi definida muito baixa – para 0,0001. A razão para o número baixo é o fato de que apenas uma imagem poderia ser processada de cada vez, o que é uma consequência do processo de classificação em nível de pixel. Os requisitos de memória gpu para esta abordagem são significativamente maiores do que a classificação de nível de imagem. Assim, a taxa de aprendizagem teve que ser fixada baixa para que os parâmetros não fossem alterados muito rapidamente e convergissem para valores menos ideais. O número de épocas de treinamento foi definido para 100, enquanto a política de taxa de aprendizagem, o tamanho do passo e a gama foram definidos para diminuir, 34% e 0,1, respectivamente, pois esses parâmetros produziram os modelos mais precisos. As medições de precisão do modelo FCN-8s foram realizadas usando a medida de precisão de pixel15,que é análoga à precisão de classificação das redes tradicionais de deep learning, a principal diferença é que a precisão é calculada no nível do pixel em vez de no nível da imagem: onde pa é a medida de precisão de pixel, nij é o número de pixels da classe que eu previ pertencer à classe j e ti = Σj nij é o número total de pixels da classe nos rótulos de verdade de terra1. Em outras palavras, a medida de precisão de pixels é calculada dividindo pixels corretamente previstos pelo número total de pixels. A precisão final do modelo FCN-8s treinado foi de 92,18%. A Figura 2 mostra três imagens de exemplo do conjunto de dados de imagem de alimentos falsos (uma de cada um dos subconjuntos de treinamento, validação e teste), juntamente com os rótulos correspondentes de verdade de solo e de previsão de modelos. Os parâmetros para treinar o modelo HTC20 ResNet-101 para segmentação de imagem alimentar foram definidos da seguinte forma: o tipo de solucionador utilizado foi OGD porque superou outros tipos de solucionador. A taxa básica de aprendizagem foi definida para 0,00125 e o tamanho do lote para 2 imagens. O número de épocas de treinamento foi definido para 40 por fase de treinamento, e várias fases de treinamento foram realizadas – primeiro no conjunto de dados frc original sem imagens aumentadas, depois no conjunto de dados FRC aumentado em 8x e 4x aumentado várias vezes de forma alternada, cada vez tomando o modelo de melhor desempenho e afinando-o na próxima fase de treinamento. Mais detalhes sobre as fases de treinamento podem ser encontrados na seção 3.3 do texto do protocolo. Finalmente, utilizou-se a política de aprendizagem de apenas um passo abaixo, com épocas fixas para quando a taxa de aprendizagem diminuísse (épocas 28 e 35 para a primeira fase de treinamento). Uma coisa importante a notar é que, embora esta sequência de fases de treinamento tenha produzido os melhores resultados em nossos testes no escopo da FRC, usar outro conjunto de dados pode exigir uma sequência diferente para produzir resultados ótimos. Esta solução baseada em ResNet para segmentação de imagens de alimentos foi avaliada utilizando a seguinte medida de precisão19: onde P é precisão, TP é o número de previsões verdadeiras positivas pelo modelo de segmentação de imagem alimentar, FP é o número de previsões falsas positivas e IoU é Intersecção sobre União, que é computada com esta equação: onde a Área de Sobreposição representa o número de previsões pelo modelo que se sobrepõem à verdade do solo, e Área da União representa o número total de previsões pelo modelo juntamente com a verdade do solo, tanto no nível de pixel quanto em cada classe alimentar individual. O recall é usado como medida secundária e é calculado de forma semelhante, utilizando a seguinte fórmula19: onde R é recall e FN é o número de falsas previsões negativas pelo modelo de segmentação de imagem alimentar. As medidas de precisão e recall são então mediadas em todas as classes na verdade terrestre. Utilizando essas medidas, nosso modelo alcançou uma precisão média de 59,2% e um recall médio de 82,1%, que ficou em segundo lugar na segunda rodada do Desafio de Reconhecimento Alimentar19. Esse resultado ficou 4,2% atrás do primeiro colocado e 5,3% à frente do terceiro colocado em termos de medida média de precisão. A Tabela 1 contém os resultados para os quatro primeiros participantes da competição. Figura 1: Diagrama da arquitetura de rede neural profunda NutriNet. Este número foi publicado em Mezgec et al.2. Clique aqui para ver uma versão maior desta figura. Figura 2: Imagens do conjunto de dados de imagem de alimentos falsos. Imagens originais (esquerda), etiquetas de verdade terrestre (meio) e previsões do modelo FCN-8s (à direita). Este número foi publicado em Mezgec et al.1. Clique aqui para ver uma versão maior desta figura. Nome da equipe Colocação Precisão Média Recall médio 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% Tabela 1: Top-4 resultados da segunda rodada do Desafio de Reconhecimento alimentar. A precisão média é tomada como a medida de desempenho primário e o recall médio como medida secundária. Os resultados são retirados do ranking oficial da competição19. Arquivos Suplementares. Clique aqui para baixar este Arquivo.

Discussion

Nos últimos anos, redes neurais profundas foram validadas várias vezes como uma solução adequada para o reconhecimento de imagens alimentares10,11,12,21,23,25,26,29,31,33. Nosso trabalho apresentado neste artigo serve para provar ainda mais este1,2. A abordagem de reconhecimento de imagem alimentar de uma saída única é simples e pode ser usada para aplicações simples onde imagens com apenas um item de alimentos ou bebidas são esperadas2.

A abordagem de segmentação de imagem alimentar parece particularmente adequada para o reconhecimento de imagens alimentares em geral, sem qualquer restrição ao número de alimentos1. Como funciona classificando cada pixel individual da imagem, ele é capaz de não apenas reconhecer qualquer número de itens alimentares na imagem, mas também especificar onde um item alimentar está localizado, bem como quão grande ele é. Este último pode então ser usado para realizar a estimativa de peso alimentar, particularmente se usado com um objeto de referência ou uma câmera de distância fixa.

Houve algum trabalho em relação à disponibilidade dos conjuntos de dados de imagem alimentar3,22,27,30,36,37,38,39,40,41,42, e esperamos que mais seja feito no futuro, especialmente quando se trata de agregar conjuntos de dados de imagem alimentar de diferentes regiões do mundo, o que permitiria que soluções mais robustas fossem desenvolvidas. Atualmente, a precisão das soluções automáticas de reconhecimento de imagem alimentar ainda não atingiu a precisão de nível humano35, e isso é provável em grande parte devido ao uso de conjuntos de dados de imagem alimentar de tamanho e qualidade insuficientes.

No futuro, nosso objetivo será avaliar ainda mais os procedimentos desenvolvidos em imagens do mundo real. Em geral, os conjuntos de dados neste campo geralmente contêm imagens tiradas em ambientes ou imagens controladas que foram otimizadas manualmente para reconhecimento. É por isso que é importante reunir um grande e diversificado conjunto de dados de imagem alimentar do mundo real para abranger todos os diferentes itens de alimentos e bebidas que os indivíduos podem querer reconhecer. O primeiro passo para isso foi dado pelo Desafio de Reconhecimento Alimentar, que incluiu um conjunto de dados de imagens alimentares do mundo real19,mas mais trabalho precisa ser feito para validar essa abordagem em imagens alimentares de todo o mundo e em cooperação com nutricionistas.

Disclosures

The authors have nothing to disclose.

Acknowledgements

Os autores gostariam de agradecer a Tamara Bucher, da Universidade de Newcastle, Austrália, por fornecer o conjunto de dados de imagem falsa. Este trabalho foi apoiado pelos programas de pesquisa e inovação Horizon 2020 da União Europeia (números de subvenção 863059 – FNS-Cloud, 769661 – SAAM); e a Agência de Pesquisa eslovena (número de subvenção P2-0098). A União Europeia e a Agência de Pesquisa eslovena não tiveram papel na concepção, análise ou redação deste artigo.

Materials

HARDWARE
NVIDIA GPU NVIDIA N/A An NVIDIA GPU is needed as some of the software frameworks below will not work otherwise. https://www.nvidia.com
SOFTWARE
Caffe Berkeley AI Research N/A Caffe is a deep learning framework. https://caffe.berkeleyvision.org
CLoDSA Jónathan Heras N/A CLoDSA is a Python image augmentation library. https://github.com/joheras/CLoDSA
Google API Client Google N/A Google API Client is a Python client library for Google's discovery based APIs. https://github.com/googleapis/google-api-python-client
JavaScript Segment Annotator Kota Yamaguchi N/A JavaScript Segment Annotator is a JavaScript image annotation tool. https://github.com/kyamagu/js-segment-annotator
MMDetection Multimedia Laboratory, CUHK N/A MMDetection is an object detection toolbox based on PyTorch. https://github.com/open-mmlab/mmdetection
NVIDIA DIGITS NVIDIA N/A NVIDIA DIGITS is a wrapper for Caffe that provides a graphical web interface. https://developer.nvidia.com/digits
OpenCV Intel N/A OpenCV is a library for computer vision. https://opencv.org
Python Python Software Foundation N/A Python is a programming language. https://www.python.org
PyTorch Facebook AI Research N/A PyTorch is a machine learning framework. https://pytorch.org
Ubuntu OS Canonical N/A Ubuntu 14.04 is the OS used by the authors and offers compatibility with all of the software frameworks and tools above. https://ubuntu.com

References

  1. Mezgec, S., Eftimov, T., Bucher, T., Koroušić Seljak, B. Mixed Deep Learning and Natural Language Processing Method for Fake-Food Image Recognition and Standardization to Help Automated Dietary Assessment. Public Health Nutrition. 22 (7), 1193-1202 (2019).
  2. Mezgec, S., Koroušić Seljak, B. NutriNet: A Deep Learning Food and Drink Image Recognition System for Dietary Assessment. Nutrients. 9 (7), 657 (2017).
  3. Chen, M., et al. PFID: Pittsburgh Fast-Food Image Dataset. Proceedings of the ICIP 2009. , 289-292 (2009).
  4. Joutou, T., Yanai, K. A Food Image Recognition System with Multiple Kernel Learning. Proceedings of the ICIP 2009. , 285-288 (2009).
  5. Yang, S., Chen, M., Pomerlau, D., Sukthankar, R. Food Recognition using Statistics of Pairwise Local Features. Proceedings of the CVPR 2010. , 2249-2256 (2010).
  6. Anthimopoulos, M. M., Gianola, L., Scarnato, L., Diem, P., Mougiakakou, S. G. A Food Recognition System for Diabetic Patients Based on an Optimized Bag-of-Features Model. IEEE Journal of Biomedical and Health Informatics. 18 (4), 1261-1271 (2014).
  7. LeCun, Y., Bengio, Y., Hinton, G. Deep Learning. Nature. 521, 436-444 (2015).
  8. Deng, L., Yu, D. Deep Learning: Methods and Applications. Foundations and Trends in Signal Processing. 7 (3-4), 197 (2014).
  9. Hubel, D. H., Wiesel, T. N. Receptive Fields, Binocular Interaction and Functional Architecture in the Cat’s Visual Cortex. The Journal of Physiology. 160 (1), 106-154 (1962).
  10. Singla, A., Yuan, L., Ebrahimi, T. Food/Non-Food Image Classification and Food Categorization using Pre-Trained GoogLeNet Model. Proceedings of the MADiMa’16. , 3-11 (2016).
  11. Yanai, K., Kawano, Y. Food Image Recognition using Deep Convolutional Network with Pre-Training and Fine-Tuning. Proceedings of the ICMEW 2015. , 1-6 (2015).
  12. Liu, C., et al. DeepFood: Deep Learning-Based Food Image Recognition for Computer-Aided Dietary Assessment. Proceedings of the ICOST 2016. , 37-48 (2016).
  13. De Sousa Ribeiro, F., et al. An End-to-End Deep Neural Architecture for Optical Character Verification and Recognition in Retail Food Packaging. Proceedings of the ICIP 2018. , 2376-2380 (2018).
  14. Krizhevsky, A., Sutskever, I., Hinton, G. ImageNet Classification with Deep Convolutional Neural Networks. Proceedings of the NIPS’12. , 1097-1105 (2012).
  15. Long, J., Shelhamer, E., Darrell, T. Fully Convolutional Networks for Semantic Segmentation. Proceedings of the CVPR 2015. , 3431-3440 (2015).
  16. He, K., Zhang, X., Ren, S., Sun, J. Deep Residual Learning for Image Recognition. Proceedings of the CVPR 2016. , 770-778 (2016).
  17. Bucher, T., vander Horst, K., Siegrist, M. Fruit for Dessert. How People Compose Healthier Meals. Appetite. 60 (1), 74-80 (2013).
  18. Food Recognition Challenge. AICrowd Available from: https://www.aicrowd.com/challenges/food-recognition-challenge (2020)
  19. Chen, K., et al. Hybrid Task Cascade for Instance Segmentation. Proceedings of the CVPR 2019. , 4974-4983 (2019).
  20. Kawano, Y., Yanai, K. Food Image Recognition with Deep Convolutional Features. Proceedings of the UbiComp 2014. , 589-593 (2014).
  21. Matsuda, Y., Hoashi, H., Yanai, K. Recognition of Multiple-Food Images by Detecting Candidate Regions. Proceedings of the ICME 2012. , 25-30 (2012).
  22. Christodoulidis, S., Anthimopoulos, M. M., Mougiakakou, S. G. Food Recognition for Dietary Assessment using Deep Convolutional Neural Networks. Proceedings of the ICIAP 2015. , 458-465 (2015).
  23. Tanno, R., Okamoto, K., Yanai, K. DeepFoodCam: A DCNN-Based Real-Time Mobile Food Recognition System. Proceedings of the MADiMa’16. , 89-89 (2016).
  24. Liu, C., et al. A New Deep Learning-Based Food Recognition System for Dietary Assessment on An Edge Computing Service Infrastructure. IEEE Transactions on Services Computing. 11 (2), 249-261 (2017).
  25. Martinel, N., Foresti, G. L., Micheloni, C. Wide-Slice Residual Networks for Food Recognition. Proceedings of the IEEE WACV 2018. , 567-576 (2018).
  26. Bossard, L., Guillaumin, M., Van Gool, L. Food-101-Mining Discriminative Components with Random Forests. Proceedings of the ECCV’14. , 446-461 (2014).
  27. Zhou, L., Zhang, C., Liu, F., Qiu, Z., He, Y. Application of Deep Learning in Food: A Review. Comprehensive Reviews in Food Science and Food Safety. 18, 1793-1811 (2019).
  28. Zhao, H., Yap, K. -. H., Kot, A. C., Duan, L. JDNet: A Joint-Learning Distilled Network for Mobile Visual Food Recognition. IEEE Journal of Selected Topics in Signal Processing. 14 (4), 665-675 (2020).
  29. Kawano, Y., Yanai, K. Automatic Expansion of a Food Image Dataset Leveraging Existing Categories with Domain Adaptation. Proceedings of the ECCV’14. , 3-17 (2014).
  30. Hafiz, R., Haque, M. R., Rakshit, A., Uddin, M. S. Image-Based Soft Drink Type Classification and Dietary Assessment System using Deep Convolutional Neural Network with Transfer Learning. Journal of King Saud University – Computer and Information Sciences. , (2020).
  31. Shimoda, W., Yanai, K. Weakly-Supervised Plate and Food Region Segmentation. Proceedings of the ICME 2020. , 1-6 (2020).
  32. Ciocca, G., Micali, G., Napoletano, P. State Recognition of Food Images using Deep Features. IEEE Access. 8, 32003-32017 (2020).
  33. Knez, S., Šajn, L. Food Object Recognition using a Mobile Device: Evaluation of Currently Implemented Systems. Trends in Food Science & Technology. 99, 460-471 (2020).
  34. Furtado, P., Caldeira, M., Martins, P. Human Visual System vs Convolution Neural Networks in Food Recognition Task: An Empirical Comparison. Computer Vision and Image Understanding. 191, 102878 (2020).
  35. Chen, M. -. Y., et al. Automatic Chinese Food Identification and Quantity Estimation. SA’12 Technical Briefs. , 1-4 (2012).
  36. Chen, J., Ngo, C. -. W. Deep-Based Ingredient Recognition for Cooking Recipe Retrieval. Proceedings of the MM’16. , 32-41 (2016).
  37. Ciocca, G., Napoletano, P., Schettini, R. Food Recognition: A New Dataset, Experiments, and Results. IEEE Journal of Biomedical and Health Informatics. 21 (3), 588-598 (2017).
  38. Salvador, A., et al. Learning Cross-Modal Embeddings for Cooking Recipes and Food Images. Proceedings of the IEEE CVPR 2017. , 3020-3028 (2017).
  39. Ciocca, G., Napoletano, P., Schettini, R. CNN-Based Features for Retrieval and Classification of Food Images. Computer Vision and Image Understanding. 176-177, 70-77 (2018).
  40. Cai, Q., Li, J., Li, H., Weng, Y. BTBUFood-60: Dataset for Object Detection in Food Field. Proceedings of the IEEE BigComp 2019. , 1-4 (2019).
  41. Min, W., et al. ISIA Food-500: A Dataset for Large-Scale Food Recognition via Stacked Global-Local Attention Network. Proceedings of the MM’20. , 393-401 (2020).
  42. . Python Available from: https://www.python.org (2020)
  43. Google Custom Search API. Google Available from: https://developers.google.com/resources/api-libraries/documentation/customsearch/v1/python/latest/customsearch_v1.cse.html (2020)
  44. . CLoDSA Available from: https://github.com/joheras/CLoDSA (2020)
  45. NVIDIA DIGITS. NVIDIA Available from: https://developer.nvidia.com/digits (2020)
  46. . JavaScript Segment Annotator Available from: https://github.com/kyamagu/js-segment-annotator (2020)
  47. . Fully Convolutional Networks for Semantic Segmentation Available from: https://github.com/shelhamer/fcn.berkeleyvision.org (2020)
  48. . MMDetection Available from: https://github.com/open-mmlab/mmdetection (2020)
  49. Szegedy, C., et al. Going Deeper with Convolutions. Proceedings of the CVPR 2015. , 1-9 (2015).
  50. Bottou, L. Large-Scale Machine Learning with Stochastic Gradient Descent. Proceedings of the COMPSTAT’2010. , 177-186 (2010).
  51. Nesterov, Y. A Method of Solving a Convex Programming Problem with Convergence Rate O(1/k2). Doklady Akademii Nauk SSSR. 27, 372-376 (1983).
  52. Duchi, J., Hazan, E., Singer, Y. Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. Journal of Machine Learning Research. 12, 2121-2159 (2011).
  53. Kingma, D. P., Ba, J. Adam: A Method for Stochastic Optimization. arXiv Preprint. , (2017).

Play Video

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

View Video