Info

[0] 초록

  • 제안 : CV와 NLP 딥러닝 아키텍쳐를 활용한 애플리케이션
  • 도메인 : 요리
  • 주요 기능
    1. Input : 음식 이미지
      • 재료정보 추출
      • 레시피 제공
    2. Input : 재료
      • 레시피 추천
      • 중심 아이디어 : CV와 NLP의 SOTA 테크닉을 활용해 Joint Embedding 생성

[1] 서론

제안배경 : 많은 심리학적 긍정 요인도 있는 Foodstagramming(미적으로 잘 나온 음식 사진을 인스타그램에 업로드하는 것)은 요즘 인기 있는 인스타그램 주제다. 우리는 음식할 시간이 적은 바쁜 현대인이 사진들을 보다가 바로 레시피와 음식 재료들을 알 수 있도록 하는 딥러닝 애플리케이션을 제안한다. 또한 집에 재료들이 있는데 어떤 음식을 만들어야 하는 지 모를 때에도 재료를 우리 모델에 검색하면 추천 요리와 레시피들을 얻을 수 있다.


[2] 배경과 관련 연구 소개

  • 음식 분류
    • Bossard et al. : Food-101 시각분류 데이터셋 개발, baseline accuracy로 50.8% 기록
  • 음식 이미지를 인풋으로 레시피 등 정보 제공
    • Facebook AI Research with MIT : 이미지를 인풋으로 하여 DB에 있는 레시피를 리턴해주는 애플리케이션 pic2recipe 개발
    • Amaia Salvador : Recipe1M 데이터셋 활용하여 cross-modal embedding 기법 제안
    • Herranz et al. : 음식 이미지와 위치정보, 유사 음식 이미지, 레시피, 근처 음식점, 영양 정보들을 통합하는 multi-model 프레임워크 제안
    • Chang Liu : 음식 종류와 제공크기 등을 파악하는 CNN 아키텍쳐 제안
    • Facebook Inverse Cooking Recipe Generation : retrieval-based approach로 인풋 이미지에 대한 레시피 제공
  • 본 연구의 새 데이터셋 제안 : Food-101 데이터셋에 대해 재료에 대해 보다 자세한 정보를 제공하는 데이터셋

[3]방법론

[3-1] Dataset

  • Primary Sources : Food-101, allrecipes.com and Recipe1M+
  • Specifications : 120,000장의 이미지, 5,000개 재료, 101개의 class

[3-2] Data 전처리

  • 텍스트
    • 데이터 : 웹 크롤링으로 얻은 비정형 텍스트 형태 재료 데이터
    • 처리
      • 재료 이름을 정확히 얻기 위해 NLP, 텍스트 분석, 전처리, 키워드 인식 작업 진행
      • 유사 키워드를 하나로 인식하기 위해 OpenRefine 사용
  • 이미지
    • 데이터 : Food-101, allrecipes.com의 음식 이미지
    • 처리 : 512 * 512의 이미지로 리사이즈 및 정제

[3-3] 모델 학습

Screen-Shot-2020-07-30-at-5.11.49-PM

  • 모델 개요
    • 이미지와 텍스트로 나누어 각각 CNN과 Bi-LSTM으로 임베딩 후 이를 이용하여 결합 임베딩 생성
  • A . 이미지 임베딩 : CNN
    • ImageNet으로 pretrain한 VGGNet을 베이스 모델로 CNN 레이어를 추가, 101개 class 분류 학습
    • 학습이 완료된 후 분류를 위한 마지막 softmax층을 제거하고 마지막 FC layer를 이미지 임베딩으로 사용 (4096차원 벡터)
  • B . 텍스트 임베딩 : Word2Vec + Bi-LSTM
    • 전처리한 재료정보 텍스트를 Word2Vec 통해 1차 임베딩을 얻어내고, 이를 다시 Bi-LSTM 네트워크에 태워 임베딩 공간 획득
  • C . 결합 임베딩
    • 음식 사진과 재료쌍의 유사도를 높게 만들어주도록 하는 결합 임베딩 생성 (cosine similarity loss)

[3-4] 웹 어플리케이션으로 테스트

Screen-Shot-2020-07-30-at-5.13.20-PM

  • 개발항목 : 웹 어플리케이션과 REST API 개발
  • 목적 : 사용자들이 모델을 사용해보고 피드백 송신
  • 기술스택
    • Server : Node JS
    • Model Serving : Python
    • Requst Methods : HTTP GET, HTTP POST

[4] 결과

[4-1] 이미지 분류 태스크

Screen-Shot-2020-07-30-at-5.14.39-PM

  • Metric : Accuracy
  • Score : 85%
  • Number of Test Inputs : 10,000

[4-2] 재료 추출 태스크

Screen-Shot-2020-07-30-at-5.15.02-PM

  • 특징 : 이미지 분류 모델은 단순히 fried rice로 분류한 사진을, Bi-LSTM 재료 모델은 그 안의 chicken breast 채료를 찾아내어서 분류 모델과 재료추출 모델이 서로 보완할 수 있음을 도출

[4-3] 음식 유사 이미지 제공

  • Metric : Accuracy
  • Score
    • Top-5 : 91%
    • Top-10 : 95%
  • Database : 120,000 Images

[4-4] 재료로부터 요리 추천

Screen-Shot-2020-07-30-at-5.16.18-PM


[5] 토의

  • 평가 : 나쁘지 않은 accuracy지만, 한계 존재
  • 예상 원인
    • 분류모델의 class가 101개로 제한
    • 부족한 인풋 이미지 퀄리티
    • 이미지 perspective 문제
    • 한 사진에 여러 이미지 출현 문제
    • 학습 데이터의 anomaly와 전처리시 오류

[6] 결론

  • 웹 어플리케이션으로 오픈소스 형태 공개한 데 의의
  • 카테고리를 늘려서 모델 개선하는 작업을 진행할 예정

코멘트

  • Pros
    • 이미지와 텍스트의 join embedding 사용 아이디어가 좋았음
    • 분류문제를 풀 때 사전학습된 모델을 파인튜닝하는 전형적인 방식이 real world problem에도 잘 들어맞는다는 것을 보여줌
  • Cons
    • [내용적] 텍스트 임베딩 상 Bi-LSTM의 사용 이유와 성능을 추가적으로 표현해줬으면 좋았을 것. 우선 unordered set 전체를 임베딩하기 위한 알고리즘으로 판단
    • [내용적] 재료 -> 음식 추천은 주요 로직과 평가 모두 페이퍼에서 논하지 않아 아쉬움
    • [내용적] 재료 -> 음식 추천은 페이퍼에서 나온 것으로 볼 때 추천 로직보다는 단순 검색로직에 가까워 보임
    • [형식적] 영어 문법 오류와 문맥에 어울리지 않는 문장이 다수 있어내용 판단시 애로사항 존재
    • [형식적] 서론에서 전체 맥락과 먼 내용들 아쉬움
  • 아이디어 제안
    • 같은 문제를 이미지 내 재료들을 object detection한 후 detect된 재료들의 텍스트 임베딩을 활용하여 음식을 추천하는 로직 실험
    • 재료 -> 레시피 추천 로직에서, 여러 레시피들 중 쿼리로 들어온 재료가 중요하게 여겨지는 레시피를 추천하는 것이 좋은 추천이라는 전제에서 (해당 재료가 주재료인 레시피 위주) 재료의 사용량이나 레시피에서 재료의 등장빈도 등을 따로 로직으로 사용
    • Image – Ingredient 임베딩시
      • Attention 활용하여 주요 재료 파악하는 네트워크
      • triplet loss 활용하여 유사도 임베딩