[이미지 스타일 변환] Stable Diffusion과 활용 방식 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki

1. Stable Diffusion 이란?

a. 개요

  • Stable Diffusion은 텍스트 입력을 바탕으로 이미지를 생성하는 오픈소스 AI 모델
  • Latent Diffusion Model(LDM) 구조를 사용하여, **픽셀 공간이 아닌 ‘잠재 공간(latent space, 정보가 압축된 수치 표현 공간)’**에서 연산을 수행함
    • 이로 인해 고해상도 이미지도 상대적으로 적은 연산으로 빠르게 생성 가능

b. 주요 구성 요소

가. 텍스트 인코더 (CLIP Text Encoder)

  • 사용자의 입력 문장을 **벡터(embedding)**로 변환
    • 이 벡터는 이미지 생성 과정에서 **조건(conditioning)**으로 작용
  • CLIP은 텍스트와 이미지를 동일한 표현 공간에 맵핑해주는 모델로, 다양한 프롬프트 해석이 가능

나. U‑Net (Denoising Neural Network)

  • 노이즈가 포함된 잠재 이미지에서 점차 의미 있는 형태를 복원하는 신경망 구조
  • 생성 과정 중 반복적으로 작동(step)하며, 이미지의 윤곽과 내용을 정제
  • 각 반복 단계에서는 **cross-attention (텍스트와 이미지 정보를 동시에 고려하는 메커니즘)**을 통해 텍스트 프롬프트의 의미를 이미지에 반영
    • 예: “파란 고양이”라는 프롬프트를 인식하여 고양이 형체와 파란 색감을 점진적으로 강조

다. VAE (Variational Autoencoder)

  • **잠재 이미지(latent vector)**를 실제 픽셀 이미지로 복원하는 역할
  • 이미지 생성의 처음과 끝에서 사용됨:
    • 최초: 이미지를 압축하여 latent로 변환
    • 마지막: latent를 다시 실제 이미지로 디코딩

c. 이미지 생성 과정 요약

  1. 무작위 노이즈로 구성된 잠재 벡터를 생성
  2. 텍스트 인코더(CLIP)가 프롬프트를 텍스트 임베딩으로 변환
  3. U‑Net이 반복적으로 노이즈를 제거하며 텍스트 의미를 반영한 잠재 이미지를 생성
  4. VAE 디코더가 이를 최종 이미지로 변환

d. 주요 특징 및 장점

  • 빠른 고해상도 생성: latent 공간에서 작업하기 때문에 효율적
  • 풍부한 프롬프트 조합 가능: 단순 문장 외에도 스타일, 감정, 장면 등을 세밀하게 조정 가능
  • 확장성:
    • Inpainting: 이미지 일부를 프롬프트 기반으로 자연스럽게 보정
    • Outpainting: 기존 이미지의 외곽을 확장 생성
    • Image-to-Image: 기존 이미지를 기반으로 변형 생성

e. 기술적 보충 설명

가. Latent 공간이란?

  • 이미지나 텍스트 등의 고차원 데이터를 압축해 표현한 공간
  • 예: 512x512 이미지 → 64x64x4 같은 작은 벡터로 표현되며, 이 공간에서 생성 과정을 수행하면 계산량을 줄일 수 있음

나. Cross-Attention이란?

  • U‑Net이 텍스트와 이미지 정보를 동시에 고려하는 방식
  • 이미지의 각 위치가 텍스트의 어떤 단어에 주목해야 하는지를 계산해, 텍스트 의미에 맞는 이미지 세부 묘사를 가능하게 함

다. Stable Diffusion의 공개와 확산

  • 2022년 Stability AI와 CompVis 팀에 의해 공개
  • 완전한 오픈소스로 공개되어 누구나 모델 구조·가중치·학습 코드까지 활용 가능

2. Stable Diffusion 내부 구조와 작동 원리

a. 각 요소 동작 방식

가. CLIP 텍스트 인코더

  • 입력한 문장(예: "피자에 선글라스 낀 모습")을 숫자 벡터로 바꿔서 U‑Net이 참조하도록 함
  • 벡터는 이미지 생성의 “자기장 같은 안내 신호” 역할

나. 잠재 공간

  • 일반 픽셀(512×512×3)이 아닌 작은 형태([4×64×64])로 표현
  • 이미지의 미니어처 버전으로, 빠르고 가벼운 연산 가능

다. U‑Net

  • 노이즈 제거 단계: 50~100번 반복해서 깨끗한 latent 이미지로 복원
  • 입력값: 현재 noisy latent, timestep(50 ~ 100 정도), CLIP embedding
  • cross‑attention(텍스트-이미지 주목) 덕분에 텍스트 속 세부 요소가 이미지에 반영됨

라. 스케줄러

  • 노이즈 제거 속도 조절자
    • 느리면 품질↑, 빠르면 속도↑
  • 셰프가 요리 타이밍 조절하듯 이미지 “완성 타이밍” 설계 가능

마. Classifier‑Free Guidance (CFG)

  • 조건 모델(텍스트 입력 포함)과 비조건 모델(텍스트 없이 생성)의 결과를 수식으로 결합:

    최종 = 비조건 + guidance_scale * (조건 – 비조건)
    
  • guidance_scale 높으면 프롬프트 충실성↑, 낮추면 창의성↑

바. VAE 디코더

  • U‑Net이 만든 latent 이미지를 실제 픽셀 이미지로 변환
  • encoder–decoder 구조로, 훈련 시 학습된 압축↔복원 기능 활용

c. 전체 생성 흐름

  1. 랜덤 노이즈 latent 생성

  2. CLIP으로 프롬프트 → 임베딩

  3. U‑Net에서 노이즈 제거 + cross‑attention으로 텍스트 반영

    3-1. 스케줄러가 각 단계 타이밍·강도 조절

  4. VAE 디코더 → 최종 픽셀 이미지 생성

e. 추가 설명

가. Classifier‑Free Guidance

  • 조건 이미지와 비조건 이미지 차이에 스케일 조절해 합성
  • 프롬프트 충실도와 창의성 사이 균형 맞출 수 있는 방법

나. Scheduler와 CFG의 역할 차이

항목 Scheduler Classifier-Free Guidance (CFG)
역할 노이즈 제거 시간표를 관리 (timestep마다 얼마나 노이즈를 제거할지 조절) 텍스트 프롬프트 반영 강도를 조절 (조건 vs 비조건 예측 조합)
주요 매개변수 beta_schedule, num_inference_steps guidance_scale (보통 7.5~12 사이)
작동 위치 각 단계별 latent의 노이즈 분포 조정 UNet 출력값 조합 (조건 - 비조건)
연동 여부 직접적 관계 없음 (병렬 동작) 직접적으로 scheduler와 관련되지 않음
  • Scheduler
    • 전체 50 step이라고 하면:
      • step 1: 노이즈 95% → 90%
      • step 2: 노이즈 90% → 85% …
    • 어떤 **베타 스케줄(감쇠 곡선)**을 사용하느냐에 따라 각 스텝에서 얼마만큼의 노이즈를 제거할지 달라진다.
    • 느리게 동작한다는 것 = step별 노이즈 제거가 적다 = 더 정밀하고 섬세한 복원 가능 (퀄리티↑, 속도↓)
  • CFG
    • UNet에 프롬프트 조건과 **빈 프롬프트(unconditional)**를 각각 넣고 두 예측값의 차이를 구해 반영함:
    • guidance_scale가 크면 프롬프트의 영향을 강하게 받음 (예: "노란 고양이" → 진짜 노란 고양이)
    • guidance_scale가 작으면 덜 제한되고 창의적이거나 중립적인 이미지 생성 가능

3. ControlNet

a. 존재 이유

  • 기본 Stable Diffusion은 프롬프트만으로 이미지 생성 → pose(자세), 구조, 구도 등이 예측 불가
  • ControlNet은 “이 입력 이미지의 구조 유지하면서 프롬프트 반영” 형태의 제어 필요할 때 사용

b. ControlNet이란?

  • 텍스트 프롬프트 + 입력 이미지(예: 포즈 사진, 스케치 등)를 conditioning signal로 받아들임
  • 입력 이미지에서 특징**(feature)** 추출 (예: 윤곽선, 깊이, 포즈)
  • U‑Net에 해당 정보를 주입하여, 구조와 스타일을 동시에 유지하며 이미지 생성

c. 주요 사용 사례

  • 포즈 유지 + 다른 대상 적용: “왕좌에 앉은 인물 사진” → “골든리트리버가 왕좌에 앉은 모습”
  • 스케치 기반 이미지 제작, depth맵 기반 입체 변형 등 다양한 구조 제어 적용 가능

d. 지원되는 시각적 조건(컨디셔닝 타입)

  1. Structural Guides – pose, depth map 유지
  1. Edge & Contour – 스케치, 윤곽선 등 형태 강조
  1. Semantic & Style Masks – 특정 영역 스타일링
  1. Pattern & Function – 패턴, QR코드 등 특수 디테일 제어

e. ControlNet 적용 시 장점

  • 단순한 img2img보다 안정적이고 예측 가능한 구조 유지
  • 컨텐츠와 스타일 분리 제어 가능 → 일관된 시리즈 이미지, 제품 목업, 만화 등 제작에 유리

f. 기술 핵심 요소

가. Zero Convolution

  • ControlNet 파라미터는 처음에 0으로 초기화 → 기존 Stable Diffusion 네트워크 파괴 없이 확장 학습 가능

나. Frozen + Trainable Dual Net

  • 원래 U‑Net 구조는 고정(frozen), 추가된 ControlNet 부분만 fine-tune (학습 가능)
  • 구조 유지 + 추가 컨디셔닝 학습 분리해서 안정 확보

g. 전체 작동 흐름

  1. 입력 이미지 → 피처(ex. 윤곽, depth, pose) 추출
  2. text prompt + 피처 → U‑Net에 인식
  3. cross‑attention 과정에서 텍스트와 이미지 구조를 동시에 고려해 생성
  4. 스케치 → 완성된 이미지까지 자연스럽게 유지됨

4. IP‑Adapter(Image Prompt - Adapter)

a. 존재 이유

  • ControlNet은 이미지의 **구조(pose, 윤곽 등)**를 제어해주지만, **스타일이나 정체성(identity)**은 제어하기 어려움
  • IP‑Adapter는 참조 이미지의 스타일·얼굴·느낌을 바로 반영하면서 추가 학습 없이 사용 가능
    • 예: 얼굴 + 설정된 장면 → 얼굴 느낌을 유지한 채 장면에 반영됨

b. IP‑Adapter란?

  • Image Prompt Adapter의 약자
  • CLIP Vision Encoder로 참조 이미지(예: 얼굴, 옷, 스타일)를 인코딩
  • U‑Net의 cross‑attention (텍스트-이미지 주목) 레이어에 이미지 임베딩 주입
  • 이를 통해 “프롬프트 내용 반영 + 참조 이미지 느낌 유지” 이미지 생성

c. IP-Adapter의 핵심 발상 흐름

가. CLIP은 멀티모달 정렬 모델

  • CLIP은 텍스트와 이미지 모두를 같은 latent space(잠재 공간)로 임베딩한다.
  • 이 공간에서는 "a cat"이라는 문장과 고양이 이미지가 서로 가까운 위치에 놓이도록 학습됨.
  • 즉, CLIP은 텍스트 ↔ 이미지 간 의미 대응이 가능한 표현 공간을 학습함.

나. Stable Diffusion은 CLIP 텍스트 임베딩을 가이드로 사용

  • 텍스트 임베딩을 조건(conditioning)으로 넣어서 이미지를 생성한다.
    • 예: "a man in a tuxedo" → 해당 스타일을 갖는 이미지 생성

다. 그럼 이미지도 같은 방식으로 쓸 수 있지 않을까?

  • 텍스트 대신 이미지 임베딩도 조건으로 쓸 수 있지 않을까?
  • 즉, “이 이미지처럼 만들어줘”라는 뜻의 image prompt를 넣는 방식
    • → 이게 바로 IP‑Adapter의 핵심 아이디어

라. IP‑Adapter는 CLIP의 Vision Encoder로 참조 이미지를 인코딩

  • 텍스트가 아니라 이미지를 CLIP에 넣어서 image embedding을 추출
  • 이 임베딩을 U‑Net의 cross-attention 레이어에 삽입
    • → Stable Diffusion이 이미지 구조를 따르지는 않지만, 스타일/정체성/색감/톤은 자연스럽게 따라감

마. CLIP의 Text Embedding과 Image Embedding의 모달리티 갭은?

[ 모달리티 갭이란?]

  • CLIP은 텍스트와 이미지를 같은 차원의 벡터 공간에 매핑하지만:
    • 텍스트 임베딩은 문장 기반 의미 요약
    • 이미지 임베딩은 시각적 특징 기반 요약
  • 두 표현은 구조적으로 유사해 보여도, 실제 분포나 정보 구성 방식은 꽤 다름
  • 즉, 같은 공간 안에 있지만, 같은 방식으로 해석되진 않음

[ U‑Net 입장에서의 문제점 ]

  • Stable Diffusion의 U‑Net은 원래 CLIP의 텍스트 임베딩을 중심으로 학습됨
  • 그런데 IP‑Adapter는 텍스트 대신 이미지 임베딩을 주입
  • 이때 U‑Net은 텍스트로 기대했던 정보를 받지 못하므로 다음과 같은 문제가 생길 수 있음:
    • 의미 해석 오류
      • 텍스트는 보통 추상적인 명사/형용사 중심 (예: "a smiling man")
      • 이미지 임베딩은 더 복잡하고 다의적인 정보 포함
      • U‑Net이 학습 중 본 적 없는 방향에서 정보를 받으면 → 불안정한 attention 또는 의미 왜곡
    • attention 혼란
      • Cross-attention 레이어는 query: latent image, key/value: text embedding을 가정
      • 그런데 여기서 text embedding 대신 image embedding을 넣으면:
        • attention이 과도하게 특정 방향으로 쏠리거나
        • 약하게 작동해서 의미 반영이 잘 안 될 수도 있음

[ 해법 : IP‑Adapter 구조 ]

  • 단순히 image embedding을 넣는 것이 아니라, 다음을 수행함:
    • 전용 projection network 추가
      • CLIP Vision Encoder의 출력은 **Projection Layer (MLP 등)**을 거쳐 U‑Net이 잘 받아들일 수 있는 형태로 변환됨
      • 즉, image embedding → U‑Net friendly conditioning vector
    • decoupled cross-attention 구조
      • 기존의 text conditioning과 완전히 분리된 attention block을 사용
        • 즉, text용 cross-attention + image용 cross-attention을 병렬로 처리
        • 서로 영향을 주지 않으면서 조화롭게 반영 가능

[ 요약 ]

항목 영향 IP‑Adapter의 대응
모달리티 갭 존재 U‑Net이 예측과 다르게 동작할 수 있음 Projection + Decoupled Attention으로 해결
텍스트 기반 학습 편향 이미지 조건이 무시되거나 왜곡됨 전용 경로를 만들어 두 가지 conditioning 분리
시각 정보 과다/불일치 생성 품질 저하 Cross-attention 강도 조정 + multi-stage 주입

[ 참고 ]

  • 이 모달리티 갭 문제는 Multimodal 모델 전반에서 매우 중요한 주제
    • CLIP도 사실 텍스트 ↔ 이미지 간 거리를 비교하는 데 특화되어 있고, 생성(Generative)용으로 최적화된 건 아님
  • 그래서 IP‑Adapter는 CLIP을 그대로 쓰기보다, “CLIP에서 뽑은 시각 임베딩을 어떻게 잘 다듬어서 쓸 것인가”에 집중한 구조

d. 오픈소스 구현

  • Hugging Face Diffusers에서도 지원되며, ComfyUI·Automatic1111 등 다양한 툴에서 사용 가능

e. 기술 핵심

  • Decoupled Cross-Attention: 텍스트용과 이미지용 attention을 분리해 구현
  • 파라미터가 22M로 가볍고, 기존 모델 고정(frozen) 방식이라 효율적이고 호환성 높음

5. LoRA(Low-Rank Adaptation)

a. 존재 이유

  • IP‑Adapter는 1회성 참조 이미지 조건에 적합하지만, 매번 업로드해야 하고 정체성을 장기적으로 기억하진 못함
  • LoRA는 AI가 사진을 기억하게끔 학습 가능한 구조라, 한번 학습하면 계속 재사용 가능

b. LoRA란 무엇인가?

  • LoRA = Low-Rank Adaptation
  • Stable Diffusion 같은 거대 모델을 일부만 가볍게 fine‑tune하는 기법:
    • U‑Net(또는 텍스트 인코더) 내부에 작고 학습 가능한 행렬(low‑rank matrices)을 삽입
    • 주로 cross‑attention 레이어에만 학습 파라미터를 추가 → 빠르고 효율적
  • 학습 후에는 작은 파일(수 MB)로 분리된 가중치 저장 가능 → 학습된 후 Stable Diffusion에 레고처럼 Plugged in

c. 실제 예시

  • 5~10장 셀피를 제공 → sks_person_lora 모델 학습
  • 이후 “cinematic portrait of sks_person_lora as a king” 같은 프롬프트 사용 가능
  • 이젠 AI가 다양한 씬/포즈/의상에서도 당신의 얼굴을 기억하고 생성 가능

d. LoRA vs IP‑Adapter 요약 비교

항목 IP‑Adapter LoRA
학습 필요 여부 ❌ 없음 ✅ 있음 (5–10장 이미지 필요)
즉시 사용 가능 ✅ 즉시 사용 ❌ 학습까지 시간 필요
얼굴 기억 여부 ❌ 매번 업로드 필요 ✅ 모델이 얼굴/정체성을 기억
사용 사례 원샷 참조 이미지 기반 생성 캐릭터, 브랜드, 꾸준한 정체성 기반 생성

6. LoRA · ControlNet · IP‑Adapter · 프롬프트 활용법

a. 지금까지 배운 것 요약

  • ControlNet: 포즈·그리드·구조 유지
  • IP‑Adapter: 참조 이미지 스타일·정체성 즉시 주입
  • LoRA: 개인 정체성을 모델에 장기적으로 학습

b. 실전 예시: 사이버펑크 왕 콘셉트 포스터

  • 목표: 사용자가 왕좌에 앉은 사이버펑크 왕 같은 느낌으로 생성
  • 프롬프트: a cinematic portrait of sks_person as a cyberpunk king, dramatic lighting
  • ControlNet: 왕좌에 앉은 포즈 이미지
  • LoRA: sks_person_lora (셀피 학습된 정체성)
  • IP‑Adapter: 깨끗한 초상 사진 스타일 주입
  • 결과: 사용자의 얼굴과 포즈, 프롬프트 분위기를 모두 반영한 이미지 생성

c. 전체 워크플로우 구조

[ Text Prompt ]
      ↓
[ CLIP Text Embedding ]
      ↓
[ Latent Noise Space ]
      ↓
→ ControlNet (pose guidance)
→ LoRA (trained identity)
→ IP-Adapter (reference face/style)
      ↓
[ U‑Net ]
      ↓
[ VAE Decoder ]
      ↓
[ 최종 이미지 ]

d. 왜 강력한가?

  1. 구조 유지: 포즈와 구도가 그대로 유지
  2. 정체성과 스타일 유지: 사용자와 얼굴·스타일이 모든 장면에 반영
  3. 크리에이티브 주제 반영: 사이버펑크·영화 분위기 같은 프롬프트 특성 적용
  • 결과적으로 하나의 이미지 안에 모든 조건 조합을 다 포함한 결과물 생성 가능

f. 활용 분야

  • 캐릭터 일관성 있는 시리즈 제작
  • 브랜딩 아바타, 마스코트 활용
  • 웹툰, 게임, 스토리텔링 콘텐츠 제작
  • 그린스크린 대신 상상력 기반 배경 합성

g. 다음 단계 방향

  • LoRA + ControlNet + IP‑Adapter 조합 최적화
  • 스타일 융합, 멀티-LoRA
  • UI 기반 툴 제작, 자동화 파이프라인 상용화