데이터 과학

케라스 CNN을 이용한 개와 고양이 분류 본문

인공지능/파이썬 인공지능 - 딥러닝

케라스 CNN을 이용한 개와 고양이 분류

티에스윤 2021. 9. 26. 20:35

이번 내용은 Keras에서 CNN 알고리즘으로 개와 고양이를 분류하는 내용입니다. 

 

이미지 학습에 대한 기본은 MNIST (Modified National Institute of Standards and Technology database)입니다. 뉴욕대 얀 르쿤 교수의 NIST는 오래전부터 인공지능에서 사용되었던 이미지 학습 알고리즘입니다. 이에 대한 학습을 하려면 텐서플로우 홈페이제 접속하거나 얀 르쿤 교수의 홈페이지에 접속해서 관련 내용을 학습하면 됩니다. 

 

https://www.tensorflow.org/?hl=ko 

http://yann.lecun.com/exdb/mnist/

 

MNIST는 이미지 학습의 기본적인 내용입니다. 딥러닝을 공부하고 있다면 텐서플로우 사이트에 접속하여서 MNIST를 실행해 보세요. 

 

 

개와 고양이 이미지 분석은 이전 딥러닝의 중요한 과제였습니다. 인공지능 책 앞에도 개와 고양이 사진을 보여주면서 난제와 같은 문제라고 하면서 인간의 직관적인 지식과 연결지으면서 많이들 소개하는 내용입니다. 기계학습으로는 개와 고양이를 구분하기 힘들다는 이야기들이 많았습니다. 

 

 

CNN(convolution Neural Network) 알고리즘에 대한 간단한 이해가 필요한데 이는 예전부터 사용했던 상태 추출(feature extraction) 이후에 pooling이라는 작업을 통해 이루어지는 알고리즘입니다. 

 

 

개와 고양이에 대한 이미지 파일은 아래 링크에 있습니다. 이 링크에 접속하면 435MB 용량의 이미지 파일을 다운 받을 수 있습니다.

 

https://www.kaggle.com/chetankv/dogs-cats-images

 

다운 받은 파일을 주피터 노트북에 업로드해서 다음 파일을 실행하면 CNN으로 학습이 진행됩니다. 

 

cnn_dog_cat.ipynb
0.02MB

 

 

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from keras.layers.normalization import BatchNormalization
from keras.preprocessing.image import ImageDataGenerator
import numpy as np
from keras.preprocessing import image
import warnings

 

CNN = Sequential()
CNN.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
CNN.add(BatchNormalization())
CNN.add(MaxPooling2D(pool_size = (2, 2)))
CNN.add(Conv2D(32, (3, 3), activation = 'relu'))
CNN.add(BatchNormalization())
CNN.add(MaxPooling2D(pool_size = (2, 2)))
CNN.add(Flatten())
CNN.add(Dense(units = 128, activation = 'relu'))
CNN.add(Dropout(0.2))
CNN.add(Dense(units = 1, activation = 'sigmoid'))
CNN.compile(optimizer='adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

 

 

train_datagen = ImageDataGenerator(rescale = 1./255, 
                                   rotation_range =7, 
                                   horizontal_flip = True, 
                                   shear_range = 0.2,
                                   height_shift_range = 0.07,
                                   zoom_range = 0.2)

test_datagen = ImageDataGenerator(rescale = 1./255)

 

 

training_set = train_datagen.flow_from_directory('./input/dog-cat/dataset/training_set', 
                                                 target_size= (64, 64), 
                                                 batch_size= 32, 
                                                 class_mode='binary')

 

 

결과:

Found 8000 images belonging to 2 classes

 

test_set = test_datagen.flow_from_directory('./input/dog-cat/dataset/test_set', 
                                            target_size= (64, 64), 
                                            batch_size= 32, 
                                            class_mode='binary')

 

 

 

결과: 

Found 2000 images belonging to 2 classes

CNN.fit_generator(training_set, steps_per_epoch= 39, epochs = 100, validation_data= test_set, validation_steps= 7)

 

epoch를 100번 학습하여 나타나는 결과가 있습니다. 

 

 

 

이외에 개와 고양이 분류를 위해 사전에 이미지 분류에 대한 학습은 다음 링크에 있습니다. 

 

https://www.kaggle.com/code/uysimty/keras-cnn-dog-or-cat-classification

 

https://www.kaggle.com/uysimty/get-start-image-classification

 

 

Kaggle에 이 내용으로 분석된 컨텐츠가 있는데 링크를 걸어 놓겠습니다. 

 

https://www.kaggle.com/venkatasainathreddy/convolution-neural-netwrok

 

https://www.kaggle.com/vibhorsen/cats-and-dogs-using-cnn

 

https://www.kaggle.com/aiguardian/detection-cats-dogs-simple-algorithm-83/notebook

 

https://www.kaggle.com/uysimty/keras-cnn-dog-or-cat-classification/notebook

 

'인공지능 > 파이썬 인공지능 - 딥러닝' 카테고리의 다른 글

numpy  (0) 2022.03.30
Colab에서의 파이썬  (0) 2022.03.29
딥러닝 오차함수(loss function, 손실함수)와 옵티마이저  (0) 2021.11.10
Fashion MNIST  (0) 2021.10.31
케라스 설치 방법  (2) 2021.09.06