GAN(Generative Adversarial Network) 이용하여 실제 사진을 일본 애니메이션의 감독 스타일로 변화시키는 CartoonGAN이라는 모델이 2018년에 소개 되었습니다. 앞에 U-GAT-IT 도 소개 드렸지만 GAN은 이미지를 스타일링 하는 영역에서 많이 활용되는 것 같습니다.

사전 훈련된 모델을 이용하여 테스트를 진행하려고 합니다. 먼저 사전 훈련된 모델 다운로드 후 진행하시기 바랍니다.

모델은 '센과 치히로 행방불명', '하울의 움직이는 성' 등으로 유명한 미야자키 하야오 감독의 애니메이션 스타일과 '시간을 달리는 소녀'의 호소다 마모루 감독의 스타일, '너의 이름은'의 신카이 마코토 감독의 스타일로 변경 할 수 있는 모델입니다. 추가로 Paprika 라는 일본 애니메이션 스타일의 모델도 있습니다.

미야자키 하야오 / 호소다 마모루 / 신카이 마코토 / Paprika


Github : https://github.com/yunwoong7/CartoonGAN-Test-Pytorch-Torch

Import Packages

import os
import torch
import torchvision.transforms as transforms
import cv2

from utils import plt_imshow

from network.Transformer import Transformer

Function

각 모델을 쉽게 테스트 할 수 있도록  Function 으로 만들었습니다.

def make_cartoon(img, size=450, style="Hayao"):
    model = Transformer()
    model.load_state_dict(torch.load(os.path.join('pretrained_model', style + '_net_G_float.pth')))
    model.eval()
    print('{} Model loaded!'.format(style))
    
    T = transforms.Compose([
    transforms.ToPILImage(),
    transforms.Resize(img_size, 2),
    transforms.ToTensor()])

    img_input = T(img).unsqueeze(0)
    img_input = -1 + 2 * img_input
    
    img_output = model(img_input)

    img_output = (img_output.squeeze().detach().numpy() + 1.) / 2.
    img_output = img_output.transpose([1, 2, 0])
    
    plt_imshow([style], [img_output], figsize=(16, 10))

Load Image

img_size = 450
img_path = 'test_img/test_image.jpg'
img = cv2.imread(img_path)

plt_imshow(["Original"], [img])

Make Cartoon

미야자키 하야오 감독의 애니메이션 스타일입니다.

make_cartoon(img, size=450, style="Hayao")

호소다 마모루 감독의 애니메이션 스타일입니다.

make_cartoon(img, size=450, style="Hosoda")

신카이 마코토 감독의 애니메이션 스타일입니다.

make_cartoon(img, size=450, style="Shinkai")

마지막으로 Paprika 애니메이션 스타일입니다.

make_cartoon(img, size=450, style="Paprika")


조금 비슷해보이지만 다른 스타일로 잘됩니다. 아래는 추가적으로 다른 이미지에 적용한 예시입니다.

반응형