본문 바로가기
TIL - 외/빅데이터

처음 만들어보는 GAN Model

by chaemj97 2022. 11. 1.
728x90

GAN (Generative Adversarial Network)

모델 2개

1. 생성자 모델 (Generator) : 이미지를 학습해서 없던 이미지를 만들어냄

2. 판별자 모델 (Discriminator) : 1번이 만든 이미지와 원래 있던 이미지를 보고 가품, 진품 판별 학습(가짜0, 진짜1)

 

딥러닝

1. 문제정의

2. 데이터셋 준비

3. 모델 설정

4. 모델 학습 / 평가

 

# 시작

1. 학습 이미지 준비

폰트 데이터가 많이 필요한데 손으로 다 적기는 무리

.ttf 파일 이용

# 32x32 크기 이미지로 만들기
IMAGE_WIDTH = 32
IMAGE_HEIGHT = 32

for font in fonts:
	# 흰색 바탕 32x32 이미지 생성
	image = Image.new('L', (IMAGE_WIDTH, IMAGE_HEIGHT), color = 255)
    drawing = ImageDraw.Drwa(imgae)
    w, h = drawing.textsize(character, font= font)
    
    font = ImageFont.truetype(font, 48)
    # 검은색 글씨 쓰기
    drawing.text((IMAGE_WIDTH-w)/2, (IMAGE_HEIGHT-h)/2, '가', fill=(0), font=font)
    # 이미지 저장
    image.save(file_path,'JPEG')

 

2. 학습 시킬 수 있는 데이터셋 만들기

이미지를 csv 파일로 가지고 있기

 

Part1. 프로젝트 셋팅

# 1-1. 패키지 호출
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

import tensorflow as tf
from tensorflow.keras import layers

 

Part2. 데이터 준비

# 2-1. CSV 데이터 읽어오기
import pandas as pd
# 이미지를 csv로 저장후 불러오기
data = pd.read_csv('/img_pixels_augmented.csv').astype('float32')
data.head()


# 2-2. 3D Vector 변환
width, height, channel = 32, 32, 1 # 이미지 사이즈 32*32 pixel
X = data.values
X = X.reshape((X.shape[0], width, height, channel))
print(X.shape)
# (9662,32,32,1)


# 2-3. Image Pixel Normalization [0,255] -> [-1,1] 
X = (X - 127.5) / 127.5 
# print(X[0])


# 2-4. 한글 이미지 시각화
plt.figure(figsize=(11,11))
i = 1
for image in X:
    plt.subplot(10, 10, i) #(10*10) 총 100칸
    image = image.reshape(width, height)
    plt.imshow(image, cmap='gray') # 흑백 이미지
    plt.axis('off')
    i+=1
    if i > 100: break
plt.suptitle("Korean Image", fontsize = 20)
# 100장의 글자 출력


# 2-5. 학습 데이터 batch 준비
# 64장씩 학습하기
BATCH_SIZE = 64
# Input dataset + image randum shuffle
train_dataset = tf.data.Dataset.from_tensor_slices(X).shuffle(X.shape[0]).batch(BATCH_SIZE)
print(train_dataset)
plt.show()

 


x : 실제 데이터, z : 노이즈

판별(x) : 판별자가 진짜 이미지를 보고 예측한 판별 값 (진짜 1, 가짜 0)

생성(z) : 생성자가 만든 가짜 이미지

판별(생성(z)) : 판별자가 가짜 이미지를 보고 예츠간 판별 값 (진짜 1, 가짜 0)

 

minMax : 생성자는 min, 판별자는 Max

생성자 입장

생성자는 판별자를 속이도록 잘 만들어아 함

판별자 입장

판별자는 진짜/가짜를 잘 구분해야 함

(127) [DLD:대전 러닝 데이] GAN 모델을 활용한 한글 손 글씨 이미지 생성 : Generative Adversarial Network for Korean with tf.keras - YouTube

728x90
반응형

댓글