Vision AI/Paper review
[논문 읽기] Food Image Classification with Convolutional Neural Networks
beelinekim
2023. 8. 30. 23:56
반응형
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으로 음식 이미지를 이용해 모델링하는 사람들이 왜 잘 안되는지 고민해볼 때 읽으면 도움이 될 논문인 것 같다.
반응형