새소식

반응형
Vision AI/Paper review

[논문 읽기] Food Image Classification with Convolutional Neural Networks

  • -
반응형

https://cs230.stanford.edu/projects_fall_2019/reports/26233496.pdf

 

Abstact

  • 음식이미지는 SNS를 지배하고 여행과 음식점 선택을 유도하지만, 여전히 엄청난 양의 이미지 때문에 정리가 되지 않고 있다.
  • 음식이미지 분류를 올바르게 활용하면 음식 추천, 다이어트를 위한 음식 선택 같은 것 처럼 전반적으로 음식에 대한 경험을 향상시킬 수 있다.
  • 이 논문에서는 CNN으로 음식이미지 분류를 할 때의 문제를 탐구한다.
  • scratch 학습, pretrained model을 통한 transfer learning을 사용하여 61.4% 정확도, 85.2%의 top-5 정확도를 달성했다.

Introduction

  • 흔히 우리는 “눈으로 먹는다”라고 말한다. 인스타그램같은 SNS가 매우 커짐에 따라 우리의 디지털 경험은 더 사진 중심이 되고, 이 중 3억 6천만장 이상의 음식 사진이 있다.
  • 한 2015년 설문조사에서 88% 이상이 음식을 여행의 목적지를 선택할 때 결정적인 요소로 고려했다. 그만큼 음식 이미지가 중요하다는 것을 계속 시사하는 것 같다.
  • 이 프로젝트의 목표는 음식 이미지가 인풋으로 주어질 때 올바른 라벨 분류를 하는 것이다.

Related Work

  • Food 101 dataset을 사용할 것이기 때문에 food 101 dataset의 논문에서 소개하는 초기의 Randon forest 기반 분류 방법부터 2016년의 DeepFood 논문까지 소개하고 있다.
  • 음식 분류 연구는 비교적 희소하기 때문에 ImageNet 연구도 살펴봤다고 한다.
  • 2012년 AlexNet, 2014년 VGGNet, InceptionNet, Resnet 순으로 특징을 살펴본 내용을 말해준다.

Data

  • Food-101 데이터셋에 대해 소개한다.
  • 101,000개의 이미지
  • 101개 클래스
  • 클래스당 이미지는 1000장이며, training 750장 test 250장으로 구성되어있다.
  • ImageNet에서는 상대적으로 뚜렷한 10개의 클래스로 구성되었지만 Food-101 데이터셋에는 라멘과 쌀국수 같이 내용이나 표현이 유사한 데이터가 있다.
  • 그리고 학습 데이터는 밝기, 색깔, 크기가 매우 달랐으며 레이블링이 잘못된 경우도 있었다.
  • 학습성능을 높이기 위해 ImageNet 가중치를 사용했다.
  • transfer learning을 위해 모델 사양에 맞게 이미지를 128x128 또는 256x256으로 정규화했고, 과적합 방지를 위해 rotation, shifting, horizontal flip 같은 augmentation을 사용했다.

 

Methods

Setup

  • AWS EC2 instance에서 모델을 학습했음
  • 모델은 Tensorflow, Keras로 작성했음
  • 모델은 각 epoch마다 저장
  • 이미지크기 조정 및 전처리
  • class들의 subset을 랜덤하게 선택하여 모델을 테스트할 수 있도록 하였으며, 성능이 낮은 모델을 더 빨리 폐기함으로써 model design iterations를 가속화 할 수 있음
  • 모든 모델의 loss는 cross-entropy 사용

Training from Scratch

  • baseline model은 4층의 convolution layer, 2층의 FC layer로 64x64 이미지를 학습했음
  • 적은 epoch에서 validation set에서 가장 높은 28.2% 정확도가 나왔지만 그때부터 overfitting이 되어 정확도가 계속 감소했음
  • MNIST와 SIGNS dataset의 낮은 이미지 해상도는 음식 이미지를 수별하는 모델에 충분한 세부정보를 제공하지 못할 것이라는 가설을 세웠음
  • 이미지 해상도와 모델 복잡도를 높여 정확도를 36.3%까지 증가시켰지만 다시 모델은 학습 데이터에 overfitting 되었음
  • Baseline model을 최적화 해본 후에, 여러 image classification 논문에서 제안된 모델을 찾아봤고, 적용해보았지만 Imagenet과 Food-101 데이터셋의 class 수가 다르기 때문에 성능 향상이 없었음.
  • Overfitting 해결을 위해 AlexNet을 구현하고 Data augmentation을 적용해보았는데, augmentation 때문에 overfitting이 되기 전에 더 많은 epoch를 학습할 수 있었고 32.8% 정확도를 달성했음.

Transfer Learning

  • ImageNet 데이터셋으로 훈련된 다양한 모델(VGG16, ResNet50, InceptionV3)로부터 transfer learning을 하기로 결정했다
  • ImageNet weight를 불러와 base layer를 freeze하고 top layer(FC)를 Food-101 클래스에 맞게 구현하여 학습했다
  • VGG16은 학습속도가 너무 느렸고, ResNet50을 사용해서 정확도 42.84%를 달성했다.
  • InceptionV3 모델을 사용하며 base layer를 unfreeze하고 실험한 결과 top 쪽에 몇 레이어를 unfreeze하면(feature extractor에서 FC쪽에 가까운 CNN layer를 말하는듯) top layer만 고정하는 것 보다 성능이 더 좋았다.
  • 그리고 전체 layer를 unfreeze하면 학습이 너무 느렸다.
  • 앞선 방법을 사용하여 성능을 61.35%까지 올렸다.

Results and Discussion

실험했던 모델들의 성능
볼로네제 스파게티와 까르보나라 스파게티를 자주 헷갈려함

  • 서로 헷갈릴 가능성이 높은 음식 클래스를 살펴보면, 시각적으로 매우 유사하게 표현된 음식 클래스때문에 top5 정확도가 높은 것이 분명하다.

Conclusion and Future Work

  • 여러 실험을 해봤을 때, AlexNet, VGG16, ResNet50, InceptionV3 중에 InceptionV3 ImageNet pretrained model, stage에서 top layer를 unfreeze 해서?( FC에 가까운 feature extractor stage를 unfreeze 했다고 말하는 것 같음) transfer learning을 하였을 때 61.4% 정확도로 가장 좋았다.
  • 이전에 음식이미지를 식별하는데 필요한 일반적인 feature를 미리 잘 학습했기 때문에 transfer learning이 가장 좋았다.
  • Future work로는 transfer learning 중에 어떤 layer를 freeze할지, 학습가능하게 할지 같은 모델 측면과 하이퍼파라미터 최적화가 포함된다.
  • bouning box를 추가하면 모델의 성능이 더 향상될 수 있다. Food-101 데이터셋은 음식이미지만 crop하지 않고 다른 noisy한 이미지를 포함하기 때문이다.
  • 또 다른 가능성은 모델의 하위집합을 학습하는 것이다. 많은 오류가 유사한 음식을 혼란스러워했기 때문이다. (티라미수 vs. 초콜릿케이크)
  • 예를 들면, 음식 위치의 메뉴? 또는 요리의 정의 같은 이미지가 아닌 정보를 이용하여 top-1 정확도를 높일 수 있을 것이다.

 

Food-101 dataset을 여러 논문의 모델 또는 scratch 모델로 실험한 논문이다. 오분류분석을 하면서 문제가 있을만한 것들을 언급하고 있기 때문에 CNN으로 음식 이미지를 이용해 모델링하는 사람들이 왜 잘 안되는지 고민해볼 때 읽으면 도움이 될 논문인 것 같다.

 

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감과 광고 클릭 부탁드립니다~