00:00:00

Share Your Feedback 🏝️

Dream Booth

Dream Booth

MinWoo(Daniel) Park | Tech Blog

Read more
Previous: Test-time Scaling Next: Goedel-Prover

Dream Booth

  • Related Project: Private
  • Category: Paper Review
  • Date: 2025-02-11

DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation

  • url: https://arxiv.org/abs/2208.12242
  • pdf: https://arxiv.org/pdf/2208.12242
  • abstract: Large text-to-image models achieved a remarkable leap in the evolution of AI, enabling high-quality and diverse synthesis of images from a given text prompt. However, these models lack the ability to mimic the appearance of subjects in a given reference set and synthesize novel renditions of them in different contexts. In this work, we present a new approach for “personalization” of text-to-image diffusion models. Given as input just a few images of a subject, we fine-tune a pretrained text-to-image model such that it learns to bind a unique identifier with that specific subject. Once the subject is embedded in the output domain of the model, the unique identifier can be used to synthesize novel photorealistic images of the subject contextualized in different scenes. By leveraging the semantic prior embedded in the model with a new autogenous class-specific prior preservation loss, our technique enables synthesizing the subject in diverse scenes, poses, views and lighting conditions that do not appear in the reference images. We apply our technique to several previously-unassailable tasks, including subject recontextualization, text-guided view synthesis, and artistic rendering, all while preserving the subject’s key features. We also provide a new dataset and evaluation protocol for this new task of subject-driven generation. Project page: this https URL

Usage Case

개요

본 Usage Case 소개 섹션에서는 세 가지 시스템에 대해 단계별로 기술합니다.

  • 텍스트 → 이미지 2단계 생성 파이프라인
    (SDXL Turbo를 통한 초기 latent 이미지 생성과 SDXL Refiner를 통한 디테일 보완)
  • 이미지 스타일 변환 시스템
    (입력 이미지의 latent 표현을 생성한 후, 특정 예술가의 스타일 등 원하는 스타일로 변환)
  • Stable Diffusion 파인튜닝 시스템
    (특정 도메인, 예를 들어 의자 이미지에 특화하여 Stable Diffusion v1.5 모델을 재학습)

관련 자료

  1. 핵심 자료
    DreamBooth 공식 페이지

  2. 이론 및 구현 관련 자료
  3. 모델 관련 자료
  4. 코랩 학습 및 데이터 브릭스 노트북

목차


관련 모델 히스토리

  • Base Model (Stability AI, SDXL)
    • 2022: Stable Diffusion v1 출시
    • 2023: SDXL 출시
    • 2024: SDXL Turbo 발표
  • DreamBooth (Google Research)
    • Google Research의 원본 구현 → Diffusers 라이브러리에 통합
    • 커스텀 최적화 및 다양한 응용에 활용

1. 텍스트→이미지 2단계 생성 파이프라인 (SDXL Turbo & SDXL Refiner)

1.1 개요 및 주요 컨셉

목표 사용자가 입력한 텍스트 프롬프트(e.g., “갈색 가죽 의자가 있는 거실 사진”)로부터 고품질 이미지를 생성합니다.

주요 모델 구성 요소

  • SDXL Turbo (Base Model) 빠른 초기 생성 단계에서, 노이즈 상태의 latent 공간에 “뼈대”가 되는 이미지 구조를 생성합니다.

  • SDXL Refiner (Refinement Model) Base 모델이 생성한 latent 이미지를 받아, 세부 디테일을 보완하고 최종적으로 높은 품질의 이미지를 생성합니다.

  • 공유 컴포넌트

    • VAE (Variational Autoencoder) 이미지의 인코딩 및 디코딩에 사용되며, 두 모델 간 공유되어 메모리 효율성을 극대화합니다.
    • Text Encoder 입력 텍스트를 임베딩 벡터로 변환하며, Refiner 모델에는 Base 모델의 텍스트 인코딩 결과를 그대로 전달합니다.

메모리 최적화 기법:

  • 데이터 타입 torch.float16 사용으로 메모리 사용량 절감
  • xformers 메모리 효율 어텐션 GPU 메모리 최적화를 위해 활성화 (단, 특정 GPU 서버 환경에서는 제한적일 수 있음)
  • CUDA 캐시 관리 torch.cuda.empty_cache()를 inference 전후 호출하여 GPU 메모리 해제

1.2 프로세스 단계 및 수식

1.2.1 Base 모델 (SDXL Turbo)에 의한 Latent 이미지 생성

  1. 텍스트 프롬프트 인코딩
    • 입력 텍스트 \(c\)를 텍스트 인코더를 통해 임베딩 \(E(c)\)로 변환합니다.
  2. Diffusion Process를 통한 이미지 생성
    • 초기 노이즈 벡터 \(\mathbf{z}_T\)에서 시작하여 \(T\) 단계에 걸쳐 점진적으로 denoising합니다.
    • 각 단계 \(t\)에서, 아래와 같은 수식을 사용하여 다음 단계의 latent 값을 계산합니다.
    \[\mathbf{z}_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( \mathbf{z}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \, \epsilon_\theta\bigl(\mathbf{z}_t, t, E(c)\bigr) \right) + \sigma_t \, \mathbf{n}, \quad \mathbf{n} \sim \mathcal{N}(0, I)\]
    • 변수 설명
      • \(\alpha_t\), \(\bar{\alpha}_t\): 스케줄러에서 제공하는 스케일링 파라미터
      • \(\epsilon_\theta(\cdot)\): UNet 기반의 노이즈 예측 네트워크
      • \(\sigma_t\): 단계별 노이즈 스케일
      • \(\mathbf{n}\): 가우시안 노이즈
  3. Guidance Scale 적용
    • 일반적으로 7.5 정도의 값으로 설정하여, 조건부 생성(프롬프트 기반)과 무조건 생성 사이의 가중치를 조절합니다.

결과 Base 모델은 latent 공간 내에 이미지의 “구조”를 생성합니다.


1.2.2 Refiner 모델 (SDXL Refiner)에 의한 품질 개선

  1. 입력
    • Base 모델에서 생성된 latent 이미지 \(\mathbf{z}_{\text{base}}\)가 Refiner 모델의 입력으로 전달됩니다.
  2. 세부 디테일 보완
    • 동일한 텍스트 조건 \(c\)와 공유된 VAE 및 Text Encoder를 사용하여, 기존 latent 이미지의 세밀한 디테일을 보완합니다.
    • Refiner 모델의 인퍼런스도 유사한 diffusion 단계를 통해 진행되며, 추가적인 refinement 과정을 거쳐 해상도와 디테일을 개선합니다.
  3. 최종 이미지 출력
    • Refiner가 생성한 최종 latent 표현을 VAE 디코더를 통해 RGB 이미지로 변환합니다.

1.3 종합 흐름

  1. 모델 로딩 및 디바이스 할당
    • 각 모델 구성 요소(VAE, SDXL Turbo, SDXL Refiner, Text Encoder 등)를 로드하고, GPU(e.g., "cuda:0")에 할당 후 eval() 모드로 전환합니다.
  2. Base 모델 인퍼런스
    • 프롬프트와 negative prompt를 사용하여 20단계 정도의 diffusion 과정을 통해 초기 latent 이미지를 생성합니다.
  3. Refiner 모델 인퍼런스
    • Base 모델의 latent 이미지를 입력받아, 동일한 텍스트 조건 하에서 추가적인 refinement 과정을 거칩니다.
  4. 최종 이미지 생성
    • Refiner 출력의 latent를 VAE 디코더를 통해 최종 RGB 이미지로 변환하여 결과를 출력합니다.

2. 이미지 스타일 AI 시스템 (입력 이미지 → 스타일 변환)

2.1 시스템 개요

목표 실제 이미지를 입력받아, 예를 들어 Van Gogh의 화풍과 같이 특정 예술가 스타일 또는 원하는 스타일로 변환하는 파이프라인을 구현합니다.

주요 활용 분야

  • 예술 작품 스타일 적용
  • 인테리어 디자인 시각화
  • 광고 및 마케팅 콘텐츠 제작

2.2 프로세스 단계 및 기술적 특징

2.2.1 이미지 전처리

  1. 입력 이미지 로드 및 변환
    • PIL 라이브러리를 사용하여 입력 이미지를 로드한 후, RGB 모드로 변환합니다.
  2. 전처리 파이프라인 적용
    • Resize: 이미지 크기를 표준 크기로 조정
    • Crop (Center 또는 Random): 중앙 또는 랜덤하게 크롭하여 일관된 해상도를 유지
    • ToTensor & Normalize 텐서 변환 후, 픽셀 값 범위를 보통 \([0,1]\)에서 \([-1,1]\) 또는 VAE가 요구하는 범위로 정규화합니다.
  3. 디버깅 및 확인
    • 전처리 후 이미지의 크기, 모드, 텐서 값 범위 등을 출력하여 정상적으로 처리되었는지 확인합니다.

2.2.2 VAE 인코딩 및 Latent 변환

  1. VAE 인코딩
    • 전처리된 이미지를 VAE 인코더에 입력하여 latent 표현 \(\mathbf{z}\)를 얻습니다.

      \[q_\phi(\mathbf{z} \mid \mathbf{x}) = \mathcal{N}\bigl(\mu_\phi(\mathbf{x}),\, \sigma_\phi(\mathbf{x})^2 I\bigr)\]
  2. 스케일링
    • 생성된 latent에 상수 \(0.18215\)를 곱하여 SDXL 모델 학습 시 사용된 스케일과 일치시킵니다.

      \[\mathbf{z}_{\text{scaled}} = 0.18215 \times \mathbf{z}\]
  3. NaN/Inf 체크
    • 인코딩 후 latent에 NaN 또는 무한대 값이 존재하는지 검사하여 문제 발생 시 적절히 처리합니다.

2.2.3 스타일 변환을 위한 Diffusion 인퍼런스

  1. 프롬프트 기반 스타일 적용
    • 예술적 스타일을 부여하기 위해 텍스트 프롬프트 (예 “A photo of a brown leather chair in a living room, painted in the style of Van Gogh” 등)와 negative prompt를 함께 사용합니다.
  2. 강도 파라미터 (strength) 적용
    • 원본 이미지의 특성을 얼마나 유지할지 결정하는 하이퍼파라미터로, 예시에서는 \(s = 0.7\)로 설정하여 원본 latent와 새로 생성된 변화량의 혼합 비율을 조절합니다.

      \[\mathbf{z}_{\text{final}} = (1 - s) \cdot \mathbf{z}_{\text{scaled}} + s \cdot \mathbf{z}_{\text{refined}}\]
  3. Diffusion 인퍼런스
    • Refiner 파이프라인이 입력된 latent 이미지를 바탕으로 추가 노이즈 제거 및 텍스트 조건에 따른 스타일 변환을 수행합니다.
    • 이 과정에서도 앞서 언급한 diffusion 수식과 guidance scale이 적용되어 이미지의 세부 디테일과 스타일이 보완됩니다.
  4. 최종 출력
    • 변환된 latent를 다시 VAE 디코더를 통해 RGB 이미지로 복원하고, 최종 스타일 변환 이미지를 출력합니다.

2.3 기술 수식 요약

  • VAE 인코딩 및 스케일링:

    \[\begin{aligned} &\mathbf{z} \sim q_\phi(\mathbf{z} \mid \mathbf{x}), \\ &\mathbf{z}_{\text{scaled}} = 0.18215 \times \mathbf{z} \end{aligned}\]
  • Diffusion 과정 (스타일 변환 단계):

    \[\mathbf{z}_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( \mathbf{z}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \, \epsilon_\theta\bigl(\mathbf{z}_t, t, E(c)\bigr) \right) + \sigma_t \, \mathbf{n}\]
  • 강도 조절 (Strength):

    \[\mathbf{z}_{\text{final}} = (1 - s) \cdot \mathbf{z}_{\text{scaled}} + s \cdot \mathbf{z}_{\text{refined}}, \quad (s = 0.7 \text{ 등})\]

3. Stable Diffusion 파인튜닝 시스템 (특정 도메인 – 의자 이미지)

3.1 시스템 개요

목표 Stable Diffusion v1.5 모델을 특정 도메인(e.g., 의자 이미지)에 특화하여 파인튜닝함으로써, 해당 도메인에 최적화된 이미지 생성 모델을 구축합니다.

주요 활용 사례

  • 특정 브랜드나 디자인의 제품 이미지 생성
  • 커스텀 디자인 시각화
  • 데이터 증강 및 창의적 콘텐츠 생성

3.2 데이터 처리 파이프라인

3.2.1 데이터 로딩 및 전처리

  • ChairDataset
    • 각 하위 폴더(e.g., rckchr, hsmnchr 등)는 특정 의자 클래스를 나타내며, 파일 이름을 기반으로 자동으로 프롬프트(e.g., “a photo of a rckchr”)가 생성됩니다.
  • 이미지 전처리 단계
    1. Resize
      • 입력 이미지를 정해진 크기(e.g., 512px 혹은 학습에 사용되는 128px)로 크기 조정
    2. Crop (Center 또는 Random)
      • 중앙 또는 랜덤 크롭을 통해 일관된 해상도를 유지
    3. Tensor 변환 및 정규화
      • ToTensor()Normalize([0.5]*3, [0.5]*3)를 적용하여 픽셀 값을 \([-1, 1]\) 범위로 정규화

3.3 모델 아키텍처 및 학습 전략

3.3.1 모델 구성 요소

  • VAE
    • 이미지 인코딩 및 디코딩을 담당하며, 파인튜닝 시 가중치 업데이트 없이 고정(freeze)하여 사용
  • UNet
    • 노이즈 예측 네트워크로, 입력된 latent에 추가된 노이즈를 예측하여 학습
  • Text Encoder & Tokenizer
    • 텍스트 프롬프트를 임베딩 벡터로 변환하며, 학습 과정에서는 가중치가 업데이트되지 않습니다.
  • Scheduler (e.g., DDPMScheduler)
    • diffusion 과정에서 노이즈 스케줄링을 담당

3.3.2 Diffusion 학습 수식

  1. 이미지 인코딩 및 스케일링
    • 입력 이미지 \(\mathbf{x}\)에 대해 VAE 인코더를 사용하여 latent 표현 \(\mathbf{z}\)를 얻습니다.

      \[\mathbf{z} \sim q_\phi(\mathbf{z} \mid \mathbf{x})\]
    • 스케일링 적용:

      \[\mathbf{z}_{\text{scaled}} = 0.18215 \times \mathbf{z}\]
  2. 노이즈 추가
    • latent에 노이즈 \(\epsilon \sim \mathcal{N}(0, I)\)를 추가하고, 특정 시점 \(t\)에 해당하는 누적 스케줄 파라미터 \(\bar{\alpha}_t\)를 적용하여 noisy latent를 생성합니다.

      \[\mathbf{z}_{\text{noisy}} = \sqrt{\bar{\alpha}_t} \, \mathbf{z}_{\text{scaled}} + \sqrt{1 - \bar{\alpha}_t} \, \epsilon\]
  3. 노이즈 예측 및 손실 계산
    • UNet은 noisy latent \(\mathbf{z}_{\text{noisy}}\)와 텍스트 임베딩 \(E(c)\)를 입력받아 노이즈 예측 \(\hat{\epsilon}\)를 수행합니다.

      \[\hat{\epsilon} = \epsilon_\theta\bigl(\mathbf{z}_{\text{noisy}}, t, E(c)\bigr)\]
    • 학습 목표는 실제 노이즈 \(\epsilon\)와 예측 노이즈 \(\hat{\epsilon}\) 사이의 Mean Squared Error (MSE)를 최소화하는 것입니다.

      \[\mathcal{L} = \mathbb{E}_{\mathbf{z}, \epsilon, t}\Bigl[\|\epsilon - \hat{\epsilon}\|_2^2\Bigr]\]

3.3.3 학습 전략 및 최적화

  • Mixed Precision Training (AMP)
    • torch.amp.autocastGradScaler를 활용하여 메모리 효율성과 연산 속도를 향상시킵니다.
  • 옵티마이저
    • AdamW 옵티마이저를 사용하며, 학습률은 \(1 \times 10^{-5}\)로 설정합니다.
  • 동결(Frozen) 처리
    • VAE와 Text Encoder는 학습 중 가중치 업데이트 없이 고정합니다.
  • 체크포인트 저장
    • 일정 epoch(e.g., 10 epoch)마다 모델의 상태를 저장하여 추후 복원 및 분석이 가능하도록 합니다.

3.4 전체 플로우

  1. 데이터 준비
    • ChairDataset을 통해 각 의자 클래스 이미지와 자동 생성된 프롬프트를 로드 및 전처리합니다.
  2. 모델 준비
    • Stable Diffusion v1.5 모델의 구성 요소(VAE, UNet, Text Encoder, Tokenizer)를 로드합니다.
    • VAE와 Text Encoder는 고정(freeze)하고, UNet은 학습 모드로 전환합니다.
  3. 학습 루프
    • 각 배치에 대해 이미지를 VAE 인코더로 latent로 변환한 후 노이즈를 추가합니다.
    • diffusion scheduler에 따라 타임스텝 \(t\)를 샘플링하여 noisy latent를 생성합니다.
    • 텍스트 프롬프트를 임베딩하고, UNet이 예측한 노이즈와 실제 노이즈 간의 MSE 손실을 계산한 후 역전파를 수행합니다.
    • Mixed Precision 기법과 Gradient Scaler를 사용하여 학습 안정성과 메모리 효율을 확보합니다.
  4. 체크포인트 관리
    • 주기적으로 모델 상태를 저장하여 학습 진행 상황을 모니터링하고, 최종 모델을 도메인 특화 생성기로 활용합니다.

4. 고려 사항

  • 실제 적용 시 고려사항
    • 사람 얼굴 및 개인 정보
      • 얼굴 이미지의 경우 pre-trained 모델이 de-identification 처리가 되어 있으므로 파인튜닝 시에도 동일한 처리가 필요하며, 고품질 얼굴 이미지 생성에는 추가 전처리 및 후처리 기법이 요구됩니다.
    • 의류 및 신발 이미지
      • 단일 아이템 이미지의 경우 텍스트-이미지 정렬 문제 및 세밀한 segmentation, 오버랩 기법(e.g., virtual try-on 시스템) 등이 추가적으로 고려되어야 합니다.
    • 클러스터 리소스
      • 실제 솔루션 단계에서는 더 높은 GPU 리소스(e.g., v10x8 클러스터)가 필요할 수 있으며, 이는 모델 학습 및 인퍼런스 품질에 직접적인 영향을 미칩니다.
  • 향후 개선 방향
    • 최신 Vision-Language Models (e.g., Claude, GPT Vision 등)을 활용하여 레이블 자동 생성 및 텍스트-이미지 정렬 문제 개선
    • 프롬프트 설계, 강도(strength), diffusion 스텝 수 등 하이퍼파라미터에 대한 추가 실험을 통해 최종 이미지 품질을 개선

5. 결론

세 가지 시스템은 각각의 목적에 따라 Stable Diffusion 계열 모델을 다양한 방식으로 활용합니다.

  • 텍스트 → 이미지 2단계 생성 파이프라인 Base 모델에 의한 빠른 latent 이미지 구조 생성과 Refiner를 통한 세밀한 디테일 보완을 통해 고품질 이미지를 생성합니다.

  • 이미지 스타일 변환 시스템 입력 이미지의 latent 표현을 생성하고, 텍스트 프롬프트 기반 diffusion 인퍼런스를 통해 예술적 또는 광고용 스타일 변환 이미지를 출력합니다.

  • 파인튜닝 시스템 도메인 특화 데이터를 활용해 Stable Diffusion v1.5 모델을 재학습시킴으로써, 특정 제품군(e.g., 의자 이미지)에 최적화된 생성 모델을 구축합니다.

각 프로세스는 diffusion 모델의 기본 개념, VAE의 인코딩/디코딩, 그리고 UNet의 노이즈 예측 알고리즘에 기반하고 있으며, 이를 통해 높은 품질과 세밀한 제어가 가능한 이미지 생성 기술을 구현합니다.

Previous: Test-time Scaling Next: Goedel-Prover

post contain ""

    No matching posts found containing ""