Introduction
최근 generative model의 발전으로 사람의 얼굴, 동물 등 일부 영역에서는 거의 사진과 유사한 수준의 합성이 가능해졌습니다. 하지만, 이미지에 대한 고수준(high-level) 이해에 이렇게 픽셀 단위까지 완벽한 모델링이 필요한 것은 아닙니다. 보통은 그 물체의 특징을 가장 잘 요약하는 속성을 알아내는 것이 더 중요합니다.
이 논문에서는 폰트를 렌더링하기 위하여 vector graphic을 모델링하는 sequential generative model을 제안합니다. 폰트의 이미지를 픽셀 단위에서 생성하는 대신 vector graphic을 생성하므로 이러한 방식은 scale에 invariant한 representation을 만들어낸다는 장점이 있습니다.
Proposed Method
데이터셋
62개의 character(0-9, a-z, A-Z)를 포함하는 14M개의 example을 가지는 SVG-Fonts 데이터셋을 수집하였습니다. 이것은 SFD(spline font database)라는 폰트 포맷으로 저장되어 있는데, 이를 SVG (scalable vector graphics) 타입으로 변환하였습니다. 이 때 SVG command는 moveTo, lineTo, cubicBezier, 그리고 EOS 네 개를 사용하였습니다. SVG command는 top-most comnand에서 시작하고 시계방향으로 정렬되도록 정규화되었습니다. 최종적으로 이 데이터셋은 SVG command와 command argument로 이루어진 tuple의 sequence들로 이루어지게 됩니다.
Network architecture
모델은 VAE와 autoregressive SVG decoder로 이루어진 구조를 가지고 있습니다. SVG decoder는 Tensor2Tensor로 구현되었습니다. VAE는 class-conditional하고 학습된 latent code z는 class-independent하게 됩니다.
SVG decoder는 4개의 적층된 LSTM을 가지고 있으며 학습시에 dropout을 사용합니다. 마지막 레이어는 테스트시에 확률적으로 샘플링될 수 있는 Mixture Density Network(MDN)입니다. SVG decoder의 학습에 사용되는 loss는 one-hot SVG command에 대한 softmax cross-entropy loss와 argument에 대한 MDN loss의 합으로 구성됩니다.
모델은 end-to-end로 학습될 수 있지만 실험적으로는 두 모듈을 독립적으로 학습하는 것이 더 나았습니다. VAE는 글자의 pixel rendering으로부터 Adam을 사용하여 학습되었고, 학습이 끝난 이후에는 VAE의 weight을 고정하고 style vector에 conditional한 SVG decoder를 학습합니다.
Experiment
아래는 폰트 렌더링 결과(selected)입니다. 각각의 font character는 10개의 샘플 중 가장 좋은 것을 뽑아서 만들었습니다.
Learning a smooth, latent representation of font style
학습된 representation이 시각적으로 smooth하고 해석 가능한지 알아보기 위하여, 32 차원의 폰트 스타일 벡터 z를 1M개의 샘플에 대하여 시각화하고 UMAP을 사용, 2차원에 그렸습니다.
보라색 박스는 이 중 일부를 확대한 것입니다. A 영역을 자세히 보면 가로 방향에서 serif 효과, 세로 방향에서 두께가 바뀌는 visual semantic을 발견할 수 있습니다. 푸른 색 1~6 라인은 두 character의 latent representation 사이의 linear interpolation 결과를 나타낸 것입니다. Linear interpolation 된 중간 결과들은 각각 서로 다른 종류와 갯수의 command를 가지고 있음에도 불구하고 시각적인 렌더링 결과물은 smooth함을 알 수 있습니다.
Exploiting the latent representation for style propagation
VAE는 글자의 class label에 conditioned되어 학습되었으므로, 이상적으로는 latent representation z는 폰트의 스타일만을 인코딩하고 class 정보에는 독립적이어야 합니다. 따라서 여기서는 서로 다른 폰트 사이에서 style propagation이 가능한지 알아보았습니다. 특히, 어떤 폰트의 한 글자로부터 다른 모든 글자를 유추할 수 있는지 확인합니다.
위 그림에서 보라색 박스는 latent representation을 계산하는데 사용된 글자이고, 해당 row의 다른 글자들은 이 z를 사용하여 렌더링된 결과입니다. 예상대로 같은 row의 글자들은 비슷한 스타일을 가지고 있습니다. 학습시에는 서로 다른 class에서 같은 z가 비슷한 스타일을 가지도록 강제한 적이 없기 때문에 이는 unsupervised로 학습되었다고 볼 수 있습니다. 또한 각각의 row들이 다양한 스타일을 가지는 것으로 보아 학습된 모델이 데이터셋의 다양성을 잘 포착한 것으로 보입니다. 마지막으로, 각각의 column들이 스타일과 무관하게 해당하는 class를 제대로 표현한 것으로 보아 학습된 모델이 class label과 스타일을 잘 분리하여 학습되었다고 할 수 있습니다.
이 실험의 확장으로, 한 개의 character를 사용하는 대신 여러 개를 사용하여 style propagation을 더 발전시킬 수 있는지를 확인하였습니다. 여기서는 여러 개의 character로부터 z를 계산한 뒤 이를 평균하여 style propagation에 사용하였습니다. 아래 그림의 보라색 박스가 z를 계산하는데 사용된 글자입니다.
결과로부터, z를 계산하는데 사용된 글자의 갯수가 늘어날수록 style의 consistency와 quality가 늘어나는 것을 볼 수 있습니다. 이를 더 정량적으로 확인하기 위하여, 생성된 모든 글자들로부터 다시 z를 계산하고 이들의 variance를 측정해 보았습니다. 이상적인 모델일수록 같은 스타일(인 것으로 기대되는) 글자들의 z는 모두 같아야 하므로 variance가 0에 가까워야 합니다. 아래 그림은 1개, 또는 5개의 글자를 사용하였을 때 z의 variance를 표시한 것입니다. 대부분의 케이스에서 5개를 사용한 경우 variance가 더 작음을 알 수 있습니다.
Building style analogies with the learned representation
Latent space가 smooth하고 서로 다른 class label 사이에서 align되어 있다면, 여기서 의미를 가지는 방향을 찾을 수 있을지도 모릅니다. 이 실험에서는 어떤 속성(bold, italic, condensed)을 가지거나 가지지 않는 샘플들을 골라, 두 집단간의 평균적인 방향성을 계산해보았습니다. 구체적으로 각 속성을 가지는 샘플들의 z의 평균과 가지지 않는 샘플들의 z의 평균을 계산하고 그 차이를 concept direction으로 정의합니다.
아래 그림은 이 벡터의 방향으로 latent space를 이동하며, 샘플이 실제로 해당 속성을 변화시키는지 관찰한 결과입니다.
Quantifying the quality of the learned representations
지금까지는 모델의 결과를 qualitative하게 살펴보았습니다. 보다 quantitative한 결과를 보기 위하여 여기서는 train set과 test set에서 log-likelihood를 계산해 보았습니다. 아래 그림의 왼쪽에서 보이는 것과 같이 대체로 '8' 클래스는 학습이 잘 되어 log-likelihood가 높았고, '7' 클래스는 학습이 잘 되지 않아 낮았습니다. 아래 그림의 오른쪽에서는 sequence length에 따라 log-likelihood 값을 표시한 것으로, sequence length가 길 수록 log-likelihood의 variance가 커지는 모습을 볼 수 있습니다.
Limitations of working with a learned, stochastic, sequential representation
이 모델은 구조적으로 stochastic하고 sequential한 특징을 가지고 있습니다. 따라서 처음에 low likelihood로 시작한 샘플은 그 에러가 누적되거나 처음 실수를 바로잡지 못할 가능성이 있습니다. 아래 그림의 왼쪽 '3' 샘플은 초반의 실수를 바로잡지 못한 케이스를, '6' 샘플은 에러가 누적되어 시점과 종점이 연결되지 않는 케이스를 보여줍니다.
VAE는 자체적으로 confidence와 같은 역할을 하는 variance (\sigma^2)를 latent representation으로 variance를 가지는데, 결과를 보면 이 confidence가 높은 곳(밝은 녹색 부위, 보라색 박스)에서는 퀄리티가 좋지만 낮은 곳(어두운 녹색 부위, 파란색 박스)에서는 상당히 퀄리티가 떨어지는 것을 확인할 수 있습니다.
Conclusions
본 논문에서는 vector graphic을 위한 generative model을 제안하였습니다. 이 모델이 학습한 latent representation은 scale-invariant한 특징을 가지고 있으며, 폰트의 스타일을 바꾸거나 스타일을 옮기는 (style propagation)데 사용될 수 있을 것입니다. 저자들은 이 모델의 본질적인 한계를 직접 지적하며, attention-based model을 사용하는 등의 방식으로 개선할 수 있을 것이라 전망하였습니다.
Share article