딥러닝 케라스 framework를 이용하여 병든 농작물을 분류해 내는 딥러닝 모델을 만들어 보고 이를 응용하여 웹 앱 제작까지 해보겠습니다.
아래는 미리 만들어둔 후추 잎의 감염 여부를 판정하는 웹 어플리케이션입니다. gradio 라는 툴을 이용하면 편리하게 아래와 같은 web application 제작이 가능합니다.
모델 생성을 위한 개발 환경은 코랩에서 진행하도록 할게요.
Colab 은 브라우저 내에서 Python 스크립트를 작성하고 실행할 수 있습니다. 무료 GPU 를 통해 간편하게 딥러닝 코드를 실행해 볼 수 있습니다. 아래 사이트에서 실행이 가능합니다.
https://colab.research.google.com/
미리 준비해 놓은 데이터셋을 로드합니다. dataset은 kaggle PlantVillage Dataset 을 이용했습니다.
https://www.kaggle.com/datasets/emmarex/plantdisease
이번 프로젝트에서는 정상 후추잎과 감염된 후추잎을 분류하는 모델을 학습 시켜 생성해 보도록 하겠습니다.
구글드라이브에 미리 데이터를 미리 복사해 놓습니다.
- 정상 샘플 데이터셋 : "Pepper__bell___healthy" ==> "drive/MyDrive/dataset/pepper/dataset/train/healthy/"
- 감염된 샘플 데이터셋 : "Pepper__bell___Bacterial_spot" ==> "drive/MyDrive/dataset/pepper/dataset/train/infected/"
분류할 class 명은 아래와 같습니다.
('healthy', 'infected')
딥러닝 코드를 실행하기 위한 라이브러리를 import 합니다.
import gradio as gr
import tensorflow as tf
import numpy as np
from PIL import Image
import requests
from io import BytesIO
from tensorflow import keras
from tensorflow.keras import layers
dataset 을 포함하고 있는 google driver를 mount 합니다.
from google.colab import drive
drive.mount('/content/drive')
우선 학습에 방해가 되는 데이터셋 중에 corrupt 되어 있는 이미지들을 제거합니다.
import os
num_skipped = 0
for folder_name in ("healthy", "infected"):
folder_path = os.path.join("drive/MyDrive/dataset/pepper/dataset/train/", folder_name)
for fname in os.listdir(folder_path):
fpath = os.path.join(folder_path, fname)
try:
fobj = open(fpath, "rb")
is_jfif = tf.compat.as_bytes("JFIF") in fobj.peek(10)
finally:
fobj.close()
if not is_jfif:
num_skipped += 1
# Delete corrupted image
os.remove(fpath)
print("Deleted %d images" % num_skipped)
이미지 사이즈와 배치 사이즈를 지정해 주고 저장소에서 학습 데이터셋과 검증 데이터셋을 각각 로드합니다.
배치 사이즈를 지나치게 크게 잡아줄 경우 GPU 메모리 full 에러가 발생할 수 있으니 적절한 사이즈를 설정해주세요.
image_size = (256, 256)
batch_size = 64
train_ds, val_ds = tf.keras.utils.image_dataset_from_directory(
"drive/MyDrive/dataset/pepper/dataset/train/",
validation_split=0.2,
subset="both",
seed=1337,
image_size=image_size,
batch_size=batch_size,
)
To be continued
'인공지능(AI)' 카테고리의 다른 글
다음 주 ChatGPT4 출시 소식 (0) | 2023.03.12 |
---|---|
머신러닝에서 파이프라인(Pipeline) 은 무엇일까? (0) | 2023.03.08 |
오픈 AI Whisper API 사용방법 (0) | 2023.03.02 |
인공지능이 대체할 가능성 높은 직업들 (0) | 2023.03.01 |
Chat GPT, AGI 시대의 도래와 자본주의 그리고 우리의 미래 (0) | 2023.03.01 |
댓글