[RISE] 4주차 수행내용

세휘·2021년 4월 1일
0

RISE 프로젝트

목록 보기
3/12

데이터 수집 및 전처리1


주제: 한국, 중국, 일본의 전통 음식 분류하기

주제 선정 이유: 최근 음식, 의복, 풍속 등 우리 문화에 대해 분쟁이 많은데 인정할건 인정하고 서로의 문화를 존중하는 사회가 되었으면 좋겠다고 생각했다. 그래서 우리 나라의 전통 음식뿐 아니라 주변 국가인 중국과 일본의 전통 음식에 대해서도 제대로 파악하며 훈련시킬 데이터셋을 확인할 예정이다.




0. 데이터 직접 확인 및 제거

kaggle의 원본 데이터셋에는 미국, 인도, 유럽의 음식 이미지 훈련 데이터도 있지만 이번 프로젝트에서는 제외시켰다. 그리고 음식과 관련이 없거나, 음식을 만드는 과정의 하나인 이미지 들을 직접 확인하며 제거하였다.

아래의 음식 종류들은 전통 음식의 의미를 뚜렷이 하기 위해 직접 확인하면서 적어보았다.

한국: 김밥, 족발, 국밥, 보쌈, 불고기, 잡채, 치맥(치킨과 맥주), 곱창전골, 곱창, 구절판, 양념치킨, 골뱅이 소면, 닭갈비, 갈비, 비빔밥, 전, 감자탕, 추어탕, 삼겹살, 파전, 해물파전, 물냉면, 비빔냉면, 선지해장국, 등뼈해장국, 짜장면, 김치(배추김치, 깍두기, 동치미, 콩국수, 식혜, 낚지볶음, 설렁탕, 뻥튀기, 소떡소떡, 떡볶이, 쌈, 삼계탕, 순두부찌개, 간장게장, 순대, 숙대국밥,

데이터 추가 필요: 구절판, 된장찌개, 명란젓


일본: 메론빵, 초코소라빵, 미소된장국, 오코노미야끼, 오니기리, 낫또, 라멘, 스시, 샤브샤브, 메밀소바, 와사비, 타코야끼, 타마고야끼(계란말이), 텐동, 새우튀김, 두부, 야끼소바, 돈코츠(돈가스), 유부초밥, 단팥빵, 꼬치, 장어, 한라봉, 우동 등

데이터 추가 필요: 우동, 다른 종류 음식
데이터 삭제 필요: 명란젓


중국: 차슈, 꽃빵, 차단(장조림), 완자, 탄탄면, 짜장면, 대나무 잎밥, 만두, 피단 등




1. 데이터 구글 클라우드에 업로드




2. Colab에서 데이터 불러오기

필수!! colab에서 구글드라이브 마운트 해주기

import os
import shutil
import glob
import cv2
import numpy as np
import pandas as pd

import tensorflow as tf
from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.layers import *
from tensorflow.keras.optimizers import *
from tensorflow.keras.applications import *
from tensorflow.keras.callbacks import *
from tensorflow.keras.initializers import *
from tensorflow.keras.preprocessing.image import ImageDataGenerator

Path = "./drive/MyDrive/Colab Notebooks/datasets/Dishes/"
cuisines = ['Chinese', 'Japanese', 'Korean']

images = []
label = []
for dish in cuisines:
    #print(os.path.exists('/content/drive'))
    food = os.listdir(Path+dish)
    for i in food:
        images.append(dish+'_'+i)
        label.append(dish)
 
df = pd.DataFrame(list(zip(images, label)), columns=['Image', 'Cuisine'])
df.Cuisine.unique()

출력: array(['Chinese', 'Japanese', 'Korean'], dtype=object)



df.Cuisine.hist()

출력:

데이터 증강시키기

# Augment data
batch_size = 64
train_input_shape = (224, 224, 3)
n_classes = 3

train_datagen = ImageDataGenerator(validation_split=0.2,
                                   rescale=1./255.,
                                   rotation_range=15,
                                   #width_shift_range=0.5,
                                   #height_shift_range=0.5,
                                   shear_range=0.1,
                                   zoom_range=0.5,
                                   #horizontal_flip=True,
                                   #vertical_flip=True,
                                  )

train_generator = train_datagen.flow_from_directory(directory=Path,
                                                    class_mode='categorical',
                                                    target_size=train_input_shape[0:2],
                                                    batch_size=batch_size,
                                                    subset="training",
                                                    shuffle=True,
                                                    classes=df.Cuisine.unique().tolist()
                                                   )

valid_generator = train_datagen.flow_from_directory(directory=Path,
                                                    class_mode='categorical',
                                                    target_size=train_input_shape[0:2],
                                                    batch_size=batch_size,
                                                    subset="validation",
                                                    shuffle=True,
                                                    classes=df.Cuisine.unique().tolist()
                                                   )

STEP_SIZE_TRAIN = train_generator.n//train_generator.batch_size
STEP_SIZE_VALID = valid_generator.n//valid_generator.batch_size
print("Total number of batches =", STEP_SIZE_TRAIN, "and", STEP_SIZE_VALID)

출력:
Found 5981 images belonging to 3 classes.
Found 1495 images belonging to 3 classes.
Total number of batches = 93 and 23




[참고]

Food Classification using Resnet

0개의 댓글