데이터과학 유망주의 매일 글쓰기 — 70일차

배우는 자(Learner Of Life)
5 min readJan 5, 2021

--

# CycleGAN

CycleGAN을 간략하게 나타낸 그림 (1)

오늘 한일:

오늘 드디어 딥러닝 과정의 마지막 자가 점검이 끝났다. 한 주동안 주어진 과제를 놓고 매우 많이 고민해보고 수정한 탓인지, 생각보다 어렵지는 않았다. 이번 섹션에서 인상적이었던 것은 개념을 제대로 이해하고 이야기할 수 있는 능력을 기르는데 중점을 두었다는 점이다. 덕분에 이렇게 글도 쓰고, 특정한 개념에 대해 동영상을 찍어보면서, 특정한 개념을 나만의 언어로 소화하는 법을 배웠다.

이번 주 배운 가장 마지막 내용은 GAN(Generative Adversarial Network)이었는데, 생성자(Generator)와 감별자(Discriminator)가 서로 대립관계를 형성하며 발전하는 모델이다. 이 모델에서 가장 널리쓰이는 타입의 GAN 중 하나가 CycleGAN이라는 것인데, 이 모델에 대해 좀 더 공부해 볼 필요성을 느꼈다.

CycleGAN

일반 GAN과의 차이점은 무작위의 노이즈에서 이미지를 만들어 내지 않는다는 점에 있다. 주어진 이미지에서 다른 버전의 이미지를 생성한다고 보면 쉽다. 예를 들어 말에 대한 이미지를 기존의 GAN이 학습하여 따라했다면, CycleGAN을 통해 말의 피부색깔을 변경하여, 얼룩말로 바꿀 수도 있다. 물론 이 기능은 CycleGAN만 할 수 있는 것은 아니며, 다른 형태의 GAN으로도 가능한 기능이기도 하다.

CycleGAN을 이용하여 같은 이미지도 다른 버전으로 만들 수 있다. (2)

하지만, CycleGAN의 가장 큰 장점은, “완전히 같은 조건의 데이터가 주어지지 않더라도”, 그것에 대해 그려볼 수 있다는데 있다. 예를 들어, 한 말의 그림을, 같은 배경에 얼룩말로 바꾸어 그리기 위해 똑같은 배경을 가진 얼룩말 버전의 이미지 데이터를 입력해야할 필요가 없다. 한 말의 이미지에서 얼룩말로 바꾸어 그리기 위해, 일부러 같은 이미지가 얼룩말로 있는 이미지를 찾아 학습시켜야할 필요가 없다는 것이다. 즉, 완전히 똑같은 조건을 가진 데이터 쌍(paired data)이 없어도 된다는 것이다. 이러한 완전한 데이터 쌍을 입력하지 않아도 된다는 것은, 학습에 있어 상당한 편의를 가져다 준다. 어떤 이미지든 얼룩말이 있는 이미지가 있다면 학습을 시킬 수 있기 때문이다.

Paired 이미지는 완전히 같은 조건을 필요로 하지만, Unpaired 이미지는 다른 조건의 이미지도 다룰 수 있다. (3)

위와 같은 목적 이외에도, 건물을 설계할 때 설계도에 기반에 어떻게 실제로 나타날지 시뮬레이션 하거나, 한 지역의 계절마다 다른 이미지를 생성할 수도 있다. 위 (2)번의 예처럼, 모네의 그림을 실제 사진으로 표현해 볼 수도 있고, 몽타주를 이용해 범인이 어떻게 생겼을지 예측해볼 수도 있다. 포토샵을 쓰는 것처럼 이미지를 프로페셔널하게 다듬고 보완하는 일도 할 수 있다.

앞으로 할일:

오늘은 CycleGAN에 대해서 리뷰했다. 단순히 이미지를 따라하는 것에서 벗어나, 조금 색다르게 바꾸어 볼 수 있다는 점에서 매력적이다. 무엇보다도, 하나의 이미지를 학습하고, 그것의 조건을 변경하기 위해, 완전 똑같은 배경을 가진 다른 버전의 이미지를 반드시 찾아내야할 필요가 없다. 조건이 다르더라도, 내가 진짜 이미지에서 바꾸려는 특성을 가진 이미지를 가져와 새로운 버전의 이미지를 생성할 수 있게 해준다. 이 것이 CycleGAN의 가장 큰 강점이다. 똑같은 조건의 이미지 데이터를 찾아야할 수고를 덜어주어, 모델링을 훨씬 더 용이하게 하기 때문이다.

앞으로 더 다양한 형태의 GAN을 알아보고 싶은 마음이 생겼다. 이제는 인공지능이 단순히 모사하는 것을 넘어 창조를 할 수 있는 수준까지 이른 것 같다. 곧 머지 않아 실제 이름을 달고 활동하는 AI 화가나 소설가, 영화감독이 생기지 않을까? 아니 이미 생겼을지도 모른다.

마지막으로 프로젝트가 남았는데, 어떠한 모델을 사용해야할지 고민이 되기 시작했다. 나는 내가 앓고 있는 질병인 녹내장에 대한 이미지 데이터를 학습하여, 어떤 이미지가 녹내장인지 가려내는 프로젝트를 기획했다. 아무래도 지금 나의 상황과 와닿고, 내가 좀 더 흥미롭게 할 수 있다는 생각이 들어서다. 하지만, 무슨 모델을 사용해야할지 고민이 된다. 가장 유력한 것이 오늘과 어제 다루었던 이 GAN 모델이다. 스스로 생성하고 감별하는 능력을 키워, 내 프로젝트에서도 우수한 성능을 내지 않을까라는 생각이 든다.

어쨌든 오늘은 그동안 밀린 과제를 마무리하는데 먼저 집중하고, 시간이 남으면 프로젝트를 기획해야겠다. 이번에도 나의 전략은 같다. 최대한 빨리 끝낼 수 있는 프로젝트를 찾아 진행하는 것. 생각보다 프로젝트를 진행할 수 있는 시간이 많지 않다고 느꼈기 때문이다. 그래서 빨리 끝나면 거기서 모델을 좀 더 개선하는 방향으로 해볼 생각이다. 어쨌든 프로젝트를 마무리하고 블로그까지 쓸 수 있는 시간, 발표를 준비할 시간을 모두 확보해야 하기 때문이다. 그리고 나서는, 시간을 들여 논문을 조금 읽어보고 싶다. 이 딥러닝 분야에서 매우 흥미로운 논문이 많기 때문이다.

다시 한번 나를 딥러닝의 매력에 푹 빠지게 한 이번 기회에 감사한다.

참조:

(1)~(3) https://towardsdatascience.com/cyclegan-how-machine-learning-learns-unpaired-image-to-image-translation-3fa8d9a6aa1d

--

--

배우는 자(Learner Of Life)

배움은 죽을 때까지 끝이 없다. 어쩌면 그게 우리가 살아있다는 증거일지도 모른다. 배움을 멈추는 순간, 혹은 배움의 기회가 더 이상 존재하지 않는 순간, 우리의 삶은 어쩌면 거기서 끝나는 것은 아닐까? 나는 배운다 그러므로 나는 존재한다. 배울 수 있음에, 그래서 살아 있음에 감사한다.