빠르게 발전하고 있는 AI 기반 편집기술
해당 글에 있는 썸네일과 이미지들은 절대로 정치적 의도나 비하하려는 목적이 없습니다. 단지 저작권 문제가 없는 대통령 이미지를 사용했을 뿐이며 문제가 된다면 삭제하도록 하겠습니다.
몇 개월 전에 StyleCLIP이라는 연구를 본 적이 있습니다. GAN이후로, 특히나 StyleGAN 이후로 딥러닝을 활용해 고화질 이미지를 생성하는 연구들이 쏟아져 나왔었기 때문에, 그때는 그냥 흥미로운 연구네! 라고 생각하며 자세히 살펴보지는 않고 넘어갔었습니다. 그러다가 최근에 (몇 개월 전에 작성된 글이지만) Max Woolf 의 블로그에서 StyleCLIP을 테스트해본 글을 보게 되었는데 꽤 재미있길래 시간이 될 때 간단하게 테스트를 해 보았습니다. 참고로 저는 Max woolf가 올려 놓은 colab을 조금 수정해서 테스트 해 보았습니다. 글이 쉽고 재밌으며 colab 링크도 친절하게 걸어 놓았으니 관심있으신 분들은 직접 읽어보시길 추천드립니다.
StyleCLIP을 이해하려면 먼저 두 가지 재미난 연구들에 대한 간단한 이해가 필요합니다. 첫번째는 Nvidia의 StyleGAN 입니다. 워낙에 유명해서 제가 따로 설명드릴 필요는 없을 것 같지만 간단히 말하자면 특정 도메인의 이미지들에서 style을 학습하여 비슷하게 만들어주는 모델입니다. 이게 제일 잘 활용될만한 곳이 바로 사람 얼굴을 생성하는 것입니다. variation이 매우 다양한 객체에 비해 사람 얼굴은 눈, 코, 입, 머리카락 등의 특징이 꽤나 명확하고 약간의 variation만으로도 완전히 다른 사람이 될 수 있기 때문에 실제 존재하지 않는 사람 얼굴을 생성하는 모델로 유명해졌습니다. 특히나 고화질로 말이죠. 초기의 GAN은 32x32 정도의 이미지를 생성하는데 그쳤으나, 최근에 GAN계열 알고리즘은 FHD 이미지도 무리 없이 생성 가능합니다.
또한 매년 개선된 버전이 발표되고 있어서, StyleGAN이후로 StyleGAN2, StyleGAN2-ada 와 같은 개선된 모델이 더 좋은 성능을 보이고 있습니다. (참고로 StyleCLIP에 사용된 모델은 StyleGAN2의 pytorch 버전입니다.) 얼마 전에는 Nvidia에서 후속 연구로 Alias-free GAN이라는 연구도 발표되었습니다. 아직 코드 공개는 안되었지만 기존의 생성 결과에는 약간씩 alias 가 발생하는 부분들이 있었는데 그런 것들을 개선하는 연구로 결과만 보았을 때는 꽤 놀랍습니다. 아무튼, StyleGAN은 얼굴 이미지를 생성하는데 탁월한 성능을 보여서 많은 연구들의 밑바탕이 되었습니다.
두번째로 이해가 필요한 연구는 OpenAI의 CLIP입니다. OpenAI의 GPT3 라는 놀라운 모델 이후에 ImageGPT라는 연구를 내놓았고, 이를 더 발전시킨 것이 DALLE와 CLIP이라는 연구입니다. DALLE는 text를 이용하여 이미지를 생성해내는 어찌보면 설명할 StyleCLIP과 비슷한 연구인데 도메인을 가리지 않기 때문에 매우 놀라운 결과를 보여주었습니다. (하지만 StyleCLIP이 좀 더 특정 도메인에 집중하며, image generation이 아닌 image manipulation 이기 때문에 해당 도메인 에선 훨씬 좋은 결과를 보여줍니다.) 물론 모델이 코드와 모델이 다 공개된건 아니라서 cherry-pick 한 결과일 수도 있습니다. 아무튼 그런 놀라운 결과를 보여준 DALLE와 같이 발표된 연구가 CLIP이기 때문에 처음에는 그렇게 주목받지는 못했지만, 코드와 모델을 공개를 하면서 많은 곳에 쓰이게 되었습니다. CLIP의 경우 (text, image)를 pair로 학습을 한 모델로 image에 대한 text값을 뽑아내는데, 기존의 연구들에 비해 개선된 것은 대량의 데이터에 대해서 학습이 되었기 때문에 image-text 관계를 아주 잘 나타낸다는 것입니다. 그리고 이를 통해 GPT2, GPT3, DALLE와 같이 few-shot, zero-shot learning에 사용될 수 있게 되었습니다.
StyleGAN의 경우 latent feature로부터 image를 만들어 냅니다. CLIP의 경우 text - image를 매핑합니다. 그렇다면 이론적으로 text로 이미지를 만들어 낼 수 있습니다. 예를 들어 "얼굴" -> "백발의 얼굴" 로 변경하길 원한다면 기존의 얼굴에 대한 latent feature를 인코더로 뽑아낸 후, 백발에 얼굴에 대응하는 적절한 latent feature 값을 CLIP 을 활용하여 계산한 후 이 값을 StyleGAN 디코딩하여 얼굴로 만드는 것이 가능한 것입니다.
StyleGAN과 CLIP을 같이 사용하는 시도를 처음 한 것은 아니고, text-image pair 학습을 통해 원하는 입력에 맞는 이미지를 생성하는 연구들이 많았지만, StyleCLIP은 실용적인 면에서 쓸만한 구조 (성능 뿐 아니라 inference speed 면에서도) 라는 데에 의의가 있습니다. 또한 위에서 설명한 DALLE처럼 그냥 text에서 image를 만들어 내는 것은 굉장히 어렵고 현재 기술로는 힘들기 때문에, image manipulation에 집중한 연구입니다.
일반적으로 style을 변경할 때는 latent space의 W, W+를 변경하는데, style space S를 변경하는 연구도 있고, 이러한 연구들을 참고하였다고 합니다. 그리고 이 연구에서는 3가지 방법을 소개하고 있습니다.
이 방법은 StyleGAN의 W+ space와 CLIP의 space를 비교해서 loss를 최소화하도록 최적화하는 방식입니다. 즉, source image와 text prompt pair에 대해서 source image latent vector를 CLIP text vector 값과의 loss가 적도록 optimization 을 진행합니다.
입력된 값 마다 최적화를 진행하는 것이기 때문에 한번 수행할 때 시간이 좀 걸리며, 이를 컨트롤 하기가 힘들다는 단점이 있습니다. loss 는 StyleGAN generator로 만든 값과, text에 대한 CLIP embedding 값의 cosine distance, regularization을 위한 latent space 간의 L2 distance, 그리고 identity loss로 이뤄져 있습니다. 말로 설명하면 좀 복잡한데 논문 수식은 그리 복잡하지 않으니 논문을 참고하는 게 좋을 것 같습니다.
앞의 방법이 모든 입력마다 계산을 해야 하니 실용적으로 본다면 쓸 수 없겠죠. 그래서 비효율적이기도 하고, 안정적이지도 않아서 고안한 방법으로 특정 text prompt에 대한 mapping network 을 학습하는 방법입니다. 이 mapping network을 통해 image manipulation을 위한 inference를 하게 되며, 하나의 mapping network 학습에는 몇시간 걸리긴 하지만 text prompt에 대해 한번만 학습하면 된다는 장점이 있습니다.
입력된 latent vector는 3개로 나눠진 모델로 들어가는데 각각은 coarse, medium, fine을 의미합니다. 이것은 StyleGAN에서 사용한 구조와 아주 비슷하죠. 학습에 관한 내용은 조금 길어서 논문을 참고하면 좋을 것 같습니다. 이 Local Mapper 방법은 앞선 방법보다는 괜찮은 편이지만, 완전 다른 얼굴 이미지더라도 비슷하게 manipulation이 되는 경우가 많다고 합니다.
그래서 나온 세 번째 방법은 global latent space에 text를 매핑하는 방법입니다. 이러한 global direction은 StyleGAN의 style space S 로부터 계산된 하나의 모델로 모든 매핑을 수행하게 됩니다. 즉, 여기서 original text -> target text 의 임베딩 차이값인 delta t 값이 delta s (기존 style -> 변경된 style) 에 매핑되도록 하려는 것입니다. 또한 style의 변화의 정도는 alpha 라는 값으로 조절하게 되구요.
그리고 이게 잘 동작하도록 하기 위해서 text prompt engineering 도 추가로 진행합니다.
또한 delta s가 이미지 변화를 잘 만들어 내도록 하기 위해서 channelwise relevance를 계산하였습니다. 왜냐면, grey hair로 바꾼다고 할 때 일반적으로 노인이 백발이 많으니 얼굴 스타일까지 노인 스타일로 바꿀 수 있기 때문입니다. 근데 여기서는 머리카락 색만 바꾸고 싶기 때문에 이걸 style space S 의 channel 별로 100개 가량의 image pair set에 대해서 테스트한 후 channel 별로 threshold 값이 있도록 알고리즘을 짠 것입니다.
즉 위에서 말한 alpha는 얼마나 많은 변화를 줄 것인지에 관한 내용이고, beta 는 channel 별 threshold라고 볼 수 있습니다. 즉, beta가 높으면 특정한 channel style만 변경되고 낮으면 추가적인 attribute도 같이 변경되는 것이죠. 아래 이미지를 참고해 주세요.
결과적으로 이렇게 Style space S 를 사용한 방법이 W+ 보다 더 나은 결과를 보여주었으며 inference 시간도 낮은 장점이 있습니다.
여기서는 비슷하게 text-image pair를 통해 image manipulation하지만 CLIP을 사용하지는 않고 text-image pair에 직접 최적화를 한 TediGAN이라는 모델과 비교도 포함하고 있습니다. 그리고 Global dirction 방식이 비교적 좋은 결과를 보여주는 것을 확인할 수 있습니다.
신기한 결과들이지만 StyleGAN과 CLIP 모두에 의존하기 때문에 두 가지 중 하나라도 pretrained model의 도메인에서 벗어나거나 하는 경우 전혀 제대로 된 결과가 안나올 수 있는 단점이 있습니다. 그리고 학습 데이터에 모자라서 학습이 잘 안된 케이스에 대해서도 그렇구요. 또한 특정 케이스에 대해서만 잘 안되는 경우도 많다고 합니다. 해당 논문에는 appendix를 통해서도 다양한 파라미터값 변경이나 loss 변경등을 통해 테스트한 내용도 많아서, 관심있다면 읽어보는 것을 추천드립니다.
Max woolf가 colab을 잘 작성해 놓아서 참고해서 테스트를 한번 해 보았습니다. 참고로 해당 방법은 Global direction 방법을 활용한 것입니다. 첫 문단에서 밝혔듯이 대통령 이미지를 사용한 것은 절대로 비하 등의 의도가 없으며 저작권 문제에서 자유로운 이미지를 사용해서 테스트 한 것입니다.
원본은 아래 이미지를 사용하였습니다.
이 글 썸네일에도 있는 이미지입니다. 머리스타일을 한번 변경해 보았습니다. 꽤 잘 되네요!
머리 스타일을 좀 더 변경해 보았습니다. 미세한 차이를 정말 잘 잡아내는 것 같습니다. 특히나 모히칸 스타일의 경우 너무 잘어울려서 진짜 사진이라고 해도 믿을 것 같네요ㅎㅎ
그 외에도 다양한 머리스타일 테스트를 해볼 수 있습니다. 잘 어울리는 것도 있고 어색한 것도 있고 하네요.
감정에 관한 결과, 피부색 등도 꽤 결과가 잘 나옵니다. 마치 사람이 편집한 것 처럼 보이네요!
max woolf 가 올려놓은 colab에 비디오 생성도 있길래 한번 만들어 봤습니다. alpha값을 0에서 올리면서 나온 결과를 붙인 것입니다.
테스트를 진행 해 보니 결과가 정말 신기하기도 하고 재미있기도 했습니다. 이 외에도 몇가지를 더 테스트 해 보았는데, bias된 것들도 좀 있고 인종차별적인 결과들도 많이 나옵니다. 특히 논문에는 없는 text들로 몇가지 테스트를 해 보니, AI 윤리론자들이 입에 거품 물 만한 결과들이 많이 나옵니다. 그런 민감한 이미지들은 올리지 않겠습니다.
그리고 정말 reasoning을 하는 수준이 아닌 단순히 latent space 비교를 통해서 만들어 내는 것이기 때문에 괴랄한 결과도 많이 나옵니다. 아무튼 그런 면에서 GAN 계열 알고리즘들이 다 그렇듯이 아직까진 문제가 좀 있다고 생각은 되지만, 발전 속도를 보아하니 빠르게 개선이 되지 않을까 싶습니다.
아 그리고 이걸 활용해서 재미난 서비스를 만들 수 있겠다라고 생각하시는 분들도 있겠지만, StyleGAN은 commercial 로 사용할 수 없는 라이센스입니다. 물론, 그와 비슷한 성능을 내는 모델을 새로 개발하고 데이터셋도 확보한다면 가능할 수도 있겠네요ㅎㅎ
StyleCLIP만 해도 몇개월 전에 발표되었기 때문에, 그 이후에도 비슷하면서도 다른 재미난 연구들이 많이 나왔고, 계속 나오고 있습니다. 시간이 가능할 때 또 이런 재미난 연구들을 소개해 드리도록 하겠습니다.