본문 바로가기

Tech/Machine Learning

pix2pix (1) - 데이터 준비

1.데이터 준비

고래, 고양이, 공룡 등 여러가지 동물 데이터셋을 수집하였다.

각각 500~700장 가량 수준이 모였다.


2. Training Set 준비 (전처리)

pix2pix를 학습시키기 위해서는 아래와 같은 이미지를 준비해야 한다

좌측이 입력이미지, 우측이 출력이미지가 된다.

이러한 이미지를 학습시키면 트레이닝이 끝난 후 왼쪽과 같은 스타일의 이미지를 입력했을때

우측과 같은 이미지를 만들어 낸다

왼쪽의 이미지는 꼭 스케치한 형태가 아니어도 된다. 아래 이미지처럼 좌측 이미지의 형태를 우측으로 바꾸는데 적용할 수 있다.

다른 것도 그렇지만 흑백이미지를 컬러로 변환하는 것도 눈길을 끈다.

다시 고양이로 돌아가서 스케치한 이미지와 고양이 이미지를 준비할때 개인적인 생각으로 고양이를 사람이 직접 그린것을 쌍으로 준비하면

더 재미있는 결과가 나올 것 같다. 하지만 많은 데이터셋을 준비해야 하기 떄문에  Canny Edge Detection이라는 알고리즘을 사용하였다.

그냥 윤곽선 따주는 알고리즘으로 이해하자

 

이런 이미지를 Canny Edge Detection 알고리즘을 적용하면


import cv2
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline
from PIL import Image
import os


def makeImage(input_img, output_img):
sum_img = Image.new("RGB",(512,256),(256,256,256))

img = cv2.imread(input_img)

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.resize(img, (256,256))
edges = cv2.Canny(img,170,200)
edges = cv2.bitwise_not(edges)

img_left = Image.fromarray(edges.astype('uint8'))
img_right = Image.fromarray(img.astype('uint8'),'RGB')

sum_img.paste(im=img_left, box=(0,0))
sum_img.paste(im=img_right, box=(256,0))

plt.figure(figsize=(15,15))
plt.imshow(sum_img)

sum_img.save(output_img)

inputimg = './animal_dataset/zebra/122. zebras-makgadikgadi-pans-national-park-631.jpg'
outputimg = './test.jpg'
makeImage(inputimg, outputimg)


Canny Edge Detection 의 결과가 개인적으로 만족스럽지 못하다. 

알고리즘이 문제라기 보다는 목적에 알고리즘이 맞지 않는 것이 맞겠다

비교적 괜찮은 결과를 보여주는 팬더곰으로 데이터셋을 잡아보자

대략 300개의 데이터를 변환하였다.