왕현성
코딩발자취
왕현성
전체 방문자
오늘
어제
  • 코딩 (277)
    • Python (71)
    • Java (16)
    • MySQL (34)
    • 인공지능 (48)
      • 머신러닝 (16)
      • 딥러닝 (32)
    • 영상처리 (4)
    • Rest API (21)
    • Android Studio (25)
    • streamlit (13)
    • DevOps (22)
      • AWS (9)
      • PuTTY (5)
      • Git (4)
      • Serverless (2)
      • Docker (2)
    • IT 기술 용어 (6)
    • 디버깅 ( 오류 해결 과정 ) (17)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • PIL
  • PYTHON
  • yolov8
  • imageprocessing
  • matplotlib
  • OpenCV
  • numpy
  • tune()
  • alibi-detection
  • labelme
  • 영상처리역사
  • ckpt_file
  • labelme UnocodeDecodeError
  • alibidetect
  • pip install labelme
  • 비지도학습
  • UnboundLocalError
  • pytorch
  • 의료이미징
  • TensorFlow
  • 딥러닝
  • encoding='utf-8'
  • 영상처리
  • ComputerVision
  • 기상탐사
  • get_long_description
  • 영상기술
  • unsupervised
  • maskimage
  • 컴퓨터비전

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
왕현성

코딩발자취

딥러닝 : CNN 말과 사람 분류하기 / CNN모델링 방법 , 이미지파일을 학습 데이터로 만드는 방법(ImageDataGenerator)
인공지능/딥러닝

딥러닝 : CNN 말과 사람 분류하기 / CNN모델링 방법 , 이미지파일을 학습 데이터로 만드는 방법(ImageDataGenerator)

2022. 12. 30. 13:16
728x90

모델링

이미지는 300X300 칼라 이미지다. 간단한 모델링 하기. 사진의 결과는 2개중의 하나이므로, 맨 마지막 액티베이션 함수는 'sigmoid' 사용

import tensorflow as tf
from keras.layers import Dense,Flatten,Conv2D,MaxPooling2D
from keras.models import Sequential

필요 라이브러리 임포트

def build_model() :
  model = Sequential()
  model.add(Conv2D(16,(3,3),activation='relu',input_shape=(300,300,3)))
  model.add(MaxPooling2D((2,2),2))
  model.add(Conv2D(32,(3,3),activation='relu'))
  model.add(MaxPooling2D((2,2),2))
  model.add(Conv2D(64,(3,3),activation='relu'))
  model.add(MaxPooling2D((2,2),2)) ## CNN

  model.add(Flatten())
  model.add(Dense(512,'relu'))
  model.add(Dense(1,'sigmoid'))
  model.compile('rmsprop','binary_crossentropy',['accuracy']) # ANN
  return model
model = build_model()

모델 변수 저장 후 summary확인

model.summary()

Data Preprocessing

 

# 아직 학습할 준비가 다 되지 않았다.
# 왜냐하면 fit 함수에 들어가는 데이터는
# 넘파이 어레이가 들어가야한다.
# 하지만 우리가 가지고있는 데이터는 이미지파일(png)이다.
# 따라서 현재 상태로는 fit함수를 이용한 학습이 불가능하다.
# 이미지파일을 넘파이 어레이로 변환시켜주는 ImageDataGenerator 라이브러리를 사용한다.
from keras.preprocessing.image import ImageDataGenerator

필요 라이브러리 import

train_datagen = ImageDataGenerator(rescale=1/255.0) # rescale 파라미터를 이용해서 피쳐스케일링한 결과를 변수로 저장
validation_datagen = ImageDataGenerator(rescale=1/255.0)
# 라이브러리를 변수로 만들었으면 그 다음 할 일은
# 이미지가 들어있는 디렉토리의 정보와 이미지 사이즈 정보와 몇 개로 분류할지 정보를
# 알려준다.
# 넘파이의 target_size와 model의 input_shape은 가로 세로가 같아야한다.
# class_mode는 2개로 분류할 땐 'binary', 3개 이상일 땐 categorical 사용.
 
train_generator=train_datagen.flow_from_directory('/tmp/horse-or-human',target_size=(300,300),
                                  class_mode='binary')
validation_generator=validation_datagen.flow_from_directory('/tmp/validation-horse-or-human',(300,300),class_mode='binary')

각 1027,256의 이미지를 찾았고, 2개의 class로 나뉘어져있는 것을 컴퓨터가 확인.

 

학습과 평가

epoch_history = model.fit(train_generator,epochs=15,validation_data=(validation_generator))

이 전 게시글 들에서는 fit 안에 X_train,y_train,X_test,y_test 이런 식으로 집어넣었지만,

training값의 이미지와 정답이 모두 위에서 만든 train_generator , validation_generator에 들어있기 때문에 위 코드와

같이 작성을 해준다

위 결과를 시각화 하면

plt.plot(epoch_history.history['accuracy'])
plt.plot(epoch_history.history['val_accuracy'])
plt.legend(['train','validation'])
plt.show()

신규 데이터 예측

위 사진으로 예측을 해보겠습니다.

이미지파일을 입력받아 예측하는 코드

import numpy as np
from google.colab import files
from tensorflow.keras.preprocessing import image

uploaded = files.upload()

for fn in uploaded.keys() :
  path = '/content/' + fn
  img = image.load_img(path, target_size=(300,300))
  x = image.img_to_array(img) / 255.0
  print(x)
  print(x.shape)

  x = np.expand_dims(x, axis = 0)

  print(x.shape)

  images = np.vstack( [x] )
  classes = model.predict( images, batch_size = 10 )
  
  print(classes)

  if classes[0] > 0.5 :
    print(fn + " is a human")
  else :
    print(fn + " is a horse")

말이라고 예측한 것을 확인

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

딥러닝 : 원본 파일을 Train / Test 파일로 분리하여 사용하는 방법과 디렉토리를 만드는 방법  (0) 2022.12.30
딥러닝 : 이미지 데이터 증강 / Image Augmentation  (0) 2022.12.30
CNN의 convolution,Stride,Padding,Pooling / feature map의 사이즈를 구하는 공식  (0) 2022.12.29
딥러닝 : 레이블링된 y값을 원핫 인코딩으로 바꾸기 tf.keras.utils.to_categorical() / Mnist 손글씨 숫자 예측  (0) 2022.12.29
딥러닝 : Tensorflow의 모델을 저장하고 불러오는 방법  (0) 2022.12.29
    '인공지능/딥러닝' 카테고리의 다른 글
    • 딥러닝 : 원본 파일을 Train / Test 파일로 분리하여 사용하는 방법과 디렉토리를 만드는 방법
    • 딥러닝 : 이미지 데이터 증강 / Image Augmentation
    • CNN의 convolution,Stride,Padding,Pooling / feature map의 사이즈를 구하는 공식
    • 딥러닝 : 레이블링된 y값을 원핫 인코딩으로 바꾸기 tf.keras.utils.to_categorical() / Mnist 손글씨 숫자 예측
    왕현성
    왕현성
    AI 머신비전 학습일지

    티스토리툴바