논문리뷰

[논문리뷰] GlyphControl: Glyph Conditional Control forVisual Text Generation (NeurIPS 2023)

syveany 2026. 6. 8. 15:18

글자 생성과 관련한 이미지 생성 분야 논문들 깔짝 맛보는 중이다.

NeurIPS 2023 논문이다.

https://proceedings.neurips.cc/paper_files/paper/2023/file/8951bbdcf234132bcce680825e7cb354-Paper-Conference.pdf

 

부분부분 취사 선택해서 읽었다.

0. Abstract

이미지 속 글자를 일관되게 생성할 수 있는 diffusion 기반 text-to-image 생성 모델 개발에 대한 관심이 커지고 있다.

그래서 GlyphControl이라는 방법을 제안한다.

기존의 ByT5같은 character-aware text encoder들은 text-to-image 모델 전체를 다시 학습시켜야했지만, GlyphControl은 모델 전체를 다시 학습시키지 않고 추가로 glyph condition을 학습시켜서 이거만 넣어주면 된다.

즉, 기존은 Prompt → Model → Image 였다면 GlyphControl은 Prompt + Glyph 정보 → Model → Image 하면 된다.

Glyph 정보를 활용함으로써 사용자들은 자기가 원하는 내용, 위치, 크기로 글자를 지정할 수 있다.

그리고 visual text generation 연구를 위해서 LAION-Glyph라는 벤치마크 데이터셋을 구축했다.

 

그리고 OCR 기반 지표, *CLIP score, **FID를 이용해서 성능을 평가했다. (주로 OCR 기반 사용하긴 함)

* CLIP score: 프롬프트랑 생성된 이미지의 의미가 얼마나 비슷한가

** FID: Frechet Inception Distance. 생성 이미지와 실제 이미지 분포 사이의 거리

 

1. Introduction

(생략)

 

2. Related Work

Text-to-image Diffusion Models.

DDPM(Denoising Diffusion Probabilistic Model)가 시초임

GLIDE: *CFG(Classifier-Free Guidance), cascaded diffusion 구조 필요성 제안

Imagen: CLIP encoder 대신 T5-XXL text encoder 같은 대형 인코더 사용

eDiff-I: CLIP + T5 같이 씀

Latent Diffusion: 이미지를 latent space에 넣어서 거기서 diffusion 함

Stable Diffusion: Latent Diffusion를 기반으로 CLIP 텍스트 인코더로 학습

SDXL: Stable Diffusion보다 3배 큰 U-Net, 두 번째 텍스트 인코더 추가, refinement model 추가

* CFG: 프롬프트를 얼마나 강하게 따를지 조절함

 

Controllable Image Generation.

이미지 생성할 때 diffusion에 segmentation map이나 depth map과 같은 추가 조건을 줄 수 있다.

이러한 직관적인 방법 외에도 다양한 diffusion 기반 이미지 편집 기법들을 사용할 수 있는데, 얘네들을 조합해서 활용하는 추세이다.

T2IAdapter, ControlNet은 이러한 조건들을 사전 학습된 diffusion 모델에 추가 입력으로 넣는다.

본래 능력을 유지하면서도 구조를 정확하게 제어할 수 있음을 보여줬다.

Text의 glyphs가 본질적으로 기하학적 구조이기 때문에 ControlNet을 기본 프레임워크로 사용한다.

 

Visual Text Generation.

CLIP 임베딩은 입력 프롬프트의 철자 정보를 정확하게 인식하지 못한다.

그래서 Imagen하고 eDiff-I는 T5를, DeepFloyd는 T5-XXL을 사용해서 이를 보완한다.

또한 CLIP이나 T5같은 characted-blind 모델보다 ByT5 같은 character-aware 모델의 장점을 적극적으로 활용할 수도 있다. 

ByT5를 사용하면 철자 오류는 감소하지만 레이아웃 오류는 여전히 존재한다. Glyph image를 넣어줄 필요성이 있음을 알 수 있다.

DALLE3이 둘 다 잘하긴 하는데 비공개모델이고 GlyphDraw는 glyph 이미지를 입력으로 줘서 중국어를 정확하게 렌더링한다.

비슷한 느낌으로 우리는 glyph 이미지를 조건맵으로 사용해서 텍스트의 내용, 위치, 크기를 제어 가능하게 한다.

 

3. Approach

3.1 Preliminary

Stable Diffusion.

본 연구는 Stable Diffusion 2.0 Base를 기본 모델로 사용했다.

SD 2.0 Base는 256x256에서 약 550k step로 학습된 다음 추가로 512x512의 고해상도 사진으로 학습되었다.

LAION-5B 데이터셋 중 aesthetic score가 4.5 이상인 데이터만 사용했다.

A100 128개로 수백시간이 걸린다. (규모 미쳤다)

자원이 엄청나게 필요하기 때문에 처음부터 SD를 재학습하지 않고 이미 학습된 SD2.0에 Glyph 조건만 추가한 것이다!

 

ControlNet.

ControlNet은 SD같은 사전학습된 diffusion 모델에 추가 조건 정보를 입력할 수 있도록 하는 네트워크이다.

적은 데이터만으로도 특정 조건을 학습할 수 있다.

기존 SD의 가중치를 Locked Branch랑 Trainable Branch로 복제해서 사용한다. 원본 능력이 크게 망가지지 않게 하기 위해서이다.

Trainable SD는 zero convolution을 사용한다. 학습이 진행되면서 점진적으로 조건 정보가 반영된다.

 

3.2 GlyphControl

Framework.

GlyphControl 프레임워크는 여러 핵심 구성요소들로 이루어져 있다.

(i) OCR 엔진: 입력 이미지에서 텍스트를 검출함

(ii) Glyph Renderer: 검출된 텍스트를 동일한 위치에 흰색 보드 이미지 형태로 렌더링함

(iii) VAE encoder/decoder: 입력 이미지를 latent code로 변환하고 latent code로부터 최종 이미지로 복원함

(iv) OpenAI CLIP text encoder: 입력 텍스트를 텍스트 임베딩으로 변환함

(v) U-Net encoder/decoder: 디노이징 디퓨전 단계 담당함

(vi) Glyph ControlNet: Glyph renderer가 렌더링한 이미지를 보고 conditional glyph information을 인코딩함

 

Glyph 정보를 활용하기 위해서 ControlNet에 이미지 형태로 렌더링 한 뒤 입력으로 넣어준다. 이를 Glyph input condition이라고 한다.

렌더링된 glyph 이미지를 넣는 게 텍스트를 정확하게 생성하는 데에 매우 효과적이다.

이렇게 정확하게 구조를 제어하는 능력이 뛰어나기 때문에 ControlNet을 선택했다.

 

정리해서 말하자면, 입력으로 2개 요소(프롬프트 + 렌더링된 glyph 이미지)를 넣는 것이다!

e.g. Prompt: A storefont with 'GlyphControl' written on it / 렌더링된 glyph 이미지: 흰 배경에 'GlyphControl'이라고 쓴 이미지

  그러면 CLIP가 '아 상점 간판을 만드려는 것이구나!'를 파악하고 Glyph Image가 '아 글자를 정확히 GlyphControl이라고 써야 하는구나'를 판단하는 거임

 

Glyph Instructions.

Glyph control의 가장 큰 장점 중 하나는 사용자가 다양한 glyph instruction을 만들 수 있다는 것이다.

단어 수, 줄 수, 글자 크기 조정 가능하다. 회전도 가능하다.

실험 해봤더니 GlyphControl이 DeepFloyd보다 OCR 정확도가 높았다.

 

Implementation.

VAE랑 U-Net의 구조랑 초기 가중치는 SD2.0-base랑 똑같이 썼다. 그리고 CFG를 썻다.

OCR엔진으로는 PP-OCRv3를 썼고, Glyph를 렌더링 할 때는 PIL의 ImageDraw 모듈을 썼다.

추론 단계에서는 사용자가 glyph instruction을 제공해야 이미지가 만들어진다.

 

즉 걍 SD2.0-base 위에 Glyph ControlNet을 얹었다는 소리임

 

3.3 LAION-Glyph Benchmark

Overview.

SD랑 DeepFloyd는 LAION-5B 데이터셋을 사용했다.

근데 visual text generation task에 딱 맞는 공개 데이터셋이 존재하지 않아서 직접 LAION-Glyph 벤치마크를 만들었다.

LAION-2B-en에서 시작해서 PP-OCR 엔진 써서 텍스트가 많이 들어가있는 이미지만 골랐다.

 

Pipeline.

2단계로 나뉜다.

처음에는 aesthetic score가 4.5 이상인 이미지만 남긴다. 그리고 PP-OCRv3로 텍스트 검출 인식을 한다.

OCR박스가 이미지 가장자리에 있는 경우, OCR 영역 총 합이 전체의 5% 미만인 경우, bbox가 5개보다 많은 경우는 제거한다.

그리고 LAION 데이터셋 캡션을 BLIP-2로 다시 생성한다. (∵기존거는 인터넷에서 긁어온거라 부정확함)

이렇게 1000만장 규모의 LAION-Glyph 벤치마크 데이터셋을 구축했다.

 

Statistics.

이미지 내 문자 수는 대부분 10~50개이고, 대부분 150개 이하이다.

단어 수는 주로 3~5개이다. 대부분 15개 이하이다.

bbox는 비교적 1개인 게 적지만 비교적 비슷비슷하게 나왔다. 

학습과 평가를 위해서 데이터셋 규모를 LAION-Glyph-100K, LAION-Glyph-1M, LAION-Glyph-10M으로 나눴다.

 

4. Experiment

(생략)

 

5. Discussion and Limitations

폰트,색상 제어 불가능

-> 흰 배경 위에 검은색 기본 폰트만 사용하기 때문. 향후에 GlyphControl에 다양한 폰트를 넣거나 스타일 인식기 사용해볼 수 있음

 

작은 글씨 + 긴 문장 약함

-> OCR에서 bbox 5개 이상인 데이터를 제거했기 때문일 수도.. 향후에 완화할 예정임

 

VAE 자체가 작은 텍스트를 잃어버림

-> Stable Diffusion 자체의 구조적 한계임.. Latent로 옮기는 과정에서 손실되기 때문

 

6. Conclusion

(생략)

 

 

---

요약하자면

기존: prompt 만으로 글자 생성

ByT5: 철자 문제 해결

GlyphDraw: 글자 모양 정보 제공

GlyphControl: 글자 모양 + 위치 + 크기 정보 제공

 

 

(+ 작은 글자 생성하기, 특히 작은 글자 많이 생성하기 관련해서 연구해볼 수 있을 듯)