내가 찍은 사진을 명화처럼 만들어준다!

Yujeong Lee
CURG
Published in
10 min readMay 16, 2020

이유정 Sogang Univ. BaSE LAB, CURG
lkitty0302@gmail.com

이번 포스팅에서는 A Neural Algorithm of Artistic Style[1] 이라는 논문을 소개하고자 한다. 이 논문은 2015년에 arXiv를 통해 공개된 논문으로 평범한 사진에 화가가 그린 그림의 색, 질감을 입혀 마치 화가가 그린 그림처럼 보이도록 하는 이미지 합성 알고리즘을 제안하였다. 지금은 이미지를 합성하고 질감을 바꾸는 기술이 익숙하지만, 2015년에는 논문이 공개된 후 여러 매체에서 기사가 쏟아져 나오며 꽤 이슈가 되었다[1]. 본 논문에서 제안하는 알고리즘으로 생성된 결과물을 먼저 살펴보자.

A Neural Algorithm of Artistic Style의 사진 결합 결과

위 그림은 본 논문에서 제안하는 알고리즘을 사용하여 원본 사진에 다양한 style을 적용하여 생성한 이미지이다. 사진 A는 독일의 튀빙겐이라는 곳을 찍은 원본 사진이며, B부터 F까지는 유명한 화가들의 그림의 style과 A 사진의 content를 가지는 그림을 생성한 결과이다. B는 J.M.W 터너의 ‘미노타우르스 호의 난파’, C는 빈센트 반 고흐의 ‘별이 빛나는 밤’, D는 뭉크의 ‘절규’, E는 피카소의 ‘앉아있는 나체의 여성’, F는 칸딘스키의 ‘구성’이다. 위 그림에서도 확인할 수 있듯이 논문에서 제안하는 알고리즘을 사용하여 이미지를 생성한 결과 놀랍게도 원본 사진의 특성과 각 화가의 작품에서 나타나는 색, 질감 등 을 살린 새로운 사진을 생성했다.

어떻게 이런 결과물을 만들어 낼 수 있을까? 본 논문을 이해하기 위해서 CNN(Convolutional Neural Networks)알고리즘에 대한 이해가 필요하다. 따라서 이번 포스팅에서는 CNN알고리즘에 대해 간단히 설명하고 본 논문에서 설명하는 알고리즘에 대해 알아보고 글을 마친다.

1. CNN(Convolutional Neural Networks)과 VGG(Visual Geometry Group) 네트워크

CNN은 고양이가 보는 것 마다 자극받는 뇌의 위치가 다르다는 것을 알게된 후 합성곱 신경망(CNN)으로 점차 진화되었으며, 1998년 Yann Lecn의 논문에서 손글씨 숫자를 인식하는데 사용한 LeNet-5가 소개되면서 등장하였다. CNN 구조는 FC layer(fully-connected layer, 전결합 레이어)와 달리 아래 그림과 같이 convolutional layer와 pooling layer로 구성되어 있다.

CNN 구조

기존 FC layer구조는 1차원 데이터만 입력 받을 수 있기 때문에 3차원 데이터를 받을 경우 공간적 정보가 소실된다는 문제점이 있다. 하지만 convolutional layer는 입출력 모두 3차원 데이터로 처리하기 때문에 공간적 정보를 유지할 수 있다.

본 논문에서는 VGG 19네트워크를 사용하였다. VGG네트워크는 옥스포드의 VGG(Visual Geometry Group)에서 만들었으며 네트워크의 깊이를 깊게 만드는 것이 성능에 어떠한 영향을 미치는지 확인하기 위한 연구이다[5]. 네트워크 깊이의 영향을 확인하기 위해 convolution filter 사이즈를 3*3으로 고정하고 아래 그림과 같이 총6개의 구조를 만들어 성능을 비교했다.

VGG Network 구조

이 논문에서 사용한 VGG-19는 E에 해당한다. 총 16개의 convolution layer와 5개의 pooling layer, 3개의 FC layer로 구성되어있다. Pooling layer를 기준으로 conv 1_1, conv 1_2, conv 2_1, conv 2_2, conv 3_1, … , conv 5_4라는 이름을 가지고 있다. VGG-19 네트워크 구조는 아래 그림과 같다.

VGG-19 네트워크 구조

Style transfer논문에서는 FC layer는 사용하지 않고 convolution layer와 pooling layer만 사용한다. Pooling layer역시 보통 CNN에서는 max pooling을 사용하지만 이 논문에서는 자연스러운 이미지처리를 위해 average pooling을 사용했다.

2. IDEA

이제 본 논문에서 제안한 알고리즘에 대해 알아보고자 한다. 처음 언급했던 것과 같이 이 논문에서는 content(사진)에 style(그림)의 색감, 특징을 살려 새로운 그림을 생성한다. 기존 에는 CNN을 활용하여 feature를 생성하고 생성된 feature를 깊게 쌓아 더 좋은 layer를 만들어 냈다면, 본 논문에서는 생성된 feature map에서 reconstruction한다.

CNN(Content Reconstructions, Style Reconstructions)

위 그림은 CNN하나에서 서로 다른 두 가지 방법으로 style과 content를 layer별로 reconstruction한 결과이다. 그림의 위쪽은 style reconstruction을 나타내며, 아래쪽은 contents reconstruction을 나타낸다.

Reconstruction은 각 층에서 나오는 Feature map들의 집합을 의미한다. Style feature를 살펴보면 얕은 layer일수록 단조로운 패턴의 반복이지만, 깊어질수록 feature들이 더 복잡해진다. 즉, style representation에서는 그림의 전체적인 틀이 아닌 색감이나 특징만 추출된다. 반대로 content representation에서는 층이 깊어질수록 사진이 선명하지 않은 것을 확인할 수 있다. 이는 CNN을 통과하면서 사진에서 사물을 확인할 수 있는 feature만 남기며 사진의 데이터가 손실되기 때문에 선명하게 복원되지 않는다. 따라서 이미지를 생성할 때 content representation에서 추출된 사진의 전체적인 틀인 content feature에 style representation에서 추출된 그림의 색감, 특징인 texture가 입혀진 모습으로 생성된다.

CNN layer, style/content에 따른 이미지 생성 결과

위 그림에서 열은 CNN layer별, 행은 style과 content의 가중치 별 사진 생성 결과를 나타낸 결과이다. CNN layer가 깊어질수록 스타일의 특성이 잘 드러난다는 것을 그림을 통해 알 수 있다. 행의 숫자는 style과 content의 loss 중 어느것에 가중치를 둘 것인지(content : a, style : b일때 a/b)를 의미한다. 즉, 숫자가 커질수록 content에 비중을 더 두는 것이고 숫자가 작아질수록 style에 비중을 더 두는 것이다. 그림의 행을 보면 숫자가 작을수록(왼쪽) style에 비중을 두어 content는 거의 알아볼 수 없고, 숫자가 커질수록(오른쪽) content에 비중을 두어 사진의 특성이 잘 표현되어 있다.

너무 style에 중점을 두면 해당 그림의 특성은 잘 살릴 수 있지만 content의 내용은 거의 나타나지 않고, content에 중점을 두면 사진은 명확하게 나타나지만 그림의 스타일은 거의 표현되지 않는다. 따라서 content와 style간 비율을 조절하여 이미지를 만들어야 한다. 보통 1/10³또는 1/10⁴ 정도의 값으로 설정하고 사용한다고 한다.

이 논문에서는 convolution network의 content와 style을 분리할 수 있고, 독립적으로 조작하여 새 이미지를 만들 수 있다는 것을 핵심이라고 말한다.

3. Method

이번 섹션에서는 본 논문에서 제안하는 방법을 설명한다. 본 논문에서는 style로 사용할 그림과 content로 사용할 사진을 VGG-19네트워크에 입력값으로 넣어 conv1_1, conv2_1, conv3_1, conv4_1, conv5_1 단계의 사진을 사용하여 이미지를 생성하였다.

total loss function

Total loss function은 content loss와 style loss의 합을 최소화 한 값이며 앞에 알파와 베타를 사용해 style과 content 중 어디에 중점을 둘 것인지 선택할 수 있다. 위 수식은 total loss function을 나타낸다.

content loss function

Content loss function는 px를 비교하며 아래 수식과 같이 정의한다. x는 결과 이미지이고, p는 content이미지이다. F는 x를 통과시킨 feature map을 의미하며 P는 p를 통과시킨 feature map을 의미한다. 수식에서 l은 layer의 층을 의미하며 i번째 필터 j번째 위치의 feature map을 의미한다.

style loss function

Style loss는 아래와 같이 정의한다. 먼저 G는 Gram matrix를 의미하며 l번째 layer에서 i번째 feature map과 j번째 feature map을 내적하여 correlation을 구해 x와 style의 representation의 평균값을 구해 loss를 최소화 한다. wl은 활성화 시킬 층을 나타내는 가중치이며 합은 항상 1이다.

결론

이번 글에서는 CNN을 사용하여 사진을 마치 유명 화가의 명화처럼 보이도록 합성하는 방법을 제안한 논문을 소개했다. 본 논문에서 제안하는 방법은 content정보가 많이 손실된다는 문제점이 있다. 이 문제점을 해결하기 위해 나온 논문이 “Deep Photo Style Transfer”로 원본 content는 그대로 유지하며 style만 적용할 수 있는 방법을 제안한다[7]. 아래 그림은 Deep Photo Style Transfer를 사용한 결과물이다. 왼쪽 사진은 content 사진, 가운데 사진은 style 사진, 오른쪽은 결과물이다. Style transfer에 관심이 많다면 Deep Photo Style Transfer 논문도 읽어보기를 추천한다.

Deep Photo Style Transfer(출처 : https://dogfoottech.tistory.com/167)

References

[1] https://news.sbs.co.kr/news/endPage.do?news_id=N1003203149

[2] https://arxiv.org/pdf/1508.06576.pdf

[3] https://excelsior-cjh.tistory.com/180

[4] https://arxiv.org/abs/1409.1556

[5] https://kyounju.tistory.com/3

[6] http://sanghyukchun.github.io/92/#92-reconst-img

[7] https://arxiv.org/pdf/1703.07511.pdf

--

--