고양이 vs 강아지 1

박재형·2025년 4월 5일
0

이번 시간에는 강아지와 고양이 사진을 분류하는 모델을 제작해 보겠다. 이번에는 저번과 달리 전처리되지 않은 생 데이터를 직접 전처리하여 모델을 제작해보겠다.

일단, 개와 고양이 생 데이터 이미지를 구해야한다.
이번 시간에는 Kaggle에서 고양이와 강아지 이미지를 구현하는 알고리즘을 제작하는 copetition에서 제공하는 이미지셋을 이용하도록 하겠다.
https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition

하지만, 이 이미지셋은 강아지와 고양이로 클래스가 나뉘어져있지 않다. 따라서 파이썬을 이용하여 데이터를 분류하고 전처리하겠다.

import os
import shutil
import tensorflow as tf

일단 파일을 수정하기 위해 os와 shutil을 임포트했고, 데이터 전처리를 위해 텐서플로우를 임포트했다.

for i in os.listdir('dogs-vs-cats-redux-kernels-edition\\train\\train\\'):
    if 'cat' in i:
        shutil.copyfile('dogs-vs-cats-redux-kernels-edition\\train\\train\\'+ i, 'dataset\\Cats\\' + i)
    if 'dog' in i:
        shutil.copyfile('dogs-vs-cats-redux-kernels-edition\\train\\train\\'+ i, 'dataset\\Dogs\\' + i)

해당 파일에 모든 이미지를 탐색하고, 모든 이미지파일이 dog.xx 혹은 cat.xx로 이루어졌기에 cat이 이름에 포함되어 있으면 cats 폴더로 복사되고 dog이 포함되어 있으면 dogs에 복사된다.

이미지 파일들을 복사 했으면, 데이터 전처리를 할 건데 이는 텐서플로우를 이용하여 쉽게 할 수 있다.

tf.keras.preprocessing.image_dataset_from_directory()

텐서플로우의 이 함수를 사용하면 되는데, 이미지를 전처리해준다.

train_ds=tf.keras.preprocessing.image_dataset_from_directory(
    'dataset\\',
    image_size=(64, 64),
    batch_size=64,
    subset = 'training',
    validation_split=0.2,    
    seed=123,    
)

어떤 이미지를 사용할 것인지 아미지가 저장된 위치를 입력하고, 이미지의 픽셀값을 어떻게 조정할 것인지 설정한다.

batch_size는 수 만여 개의 이미지를 한 번에 학습하는 것이 아니라 해당 batch_size만큼씩 따로 따로 학습한다는 것이다.

이 데이터들은 학습에 이용될 것이니 subset = 'training' 을 입력해주었고, 저번 시간처럼 validation을 이용하기 위해 validation_split=0.2을 넣어 주었다. 이는 이 데이터들 중에 20%는 validation에 이용된다는 뜻이다.

마지막으로 seed를 넣어주었는데, seed는 데이터 분할의 무작위성을 통제하여 항상 동일한 방식으로 데이터가 나뉘게 되어 같은 seed값에서는 같은 비율로 validation으로 가는 이미지가 선정된다.

val_ds=tf.keras.preprocessing.image_dataset_from_directory(
    'dataset\\',
    image_size=(64, 64),
    batch_size=64,
    subset = 'validation',
    validation_split=0.2,    
    seed=123,    
)

그 다음으로 validation에 쓰게 될 데이터셋도 전처리 해주었다.

이후 해당 전처리가 된 train값을 프린트해보면

Found 25000 files belonging to 2 classes.
Using 20000 files for training.
Found 25000 files belonging to 2 classes.
Using 5000 files for validation.

개, 고양이 각각 2개의 클래스로 나누어졌고, 25000개의 이미지 중 80%인 20000개의 이미지는 학습에, 20%인 5000개의 이미지는 validation에 들어간다고 출력됐다.

다음 시간엔 이 전처리된 이미지들을 바탕으로 모델을 제작해보겠다.

0개의 댓글