[이미지 스타일 변환] 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. 이미지 생성 과정 요약
- 무작위 노이즈로 구성된 잠재 벡터를 생성
- 텍스트 인코더(CLIP)가 프롬프트를 텍스트 임베딩으로 변환
- U‑Net이 반복적으로 노이즈를 제거하며 텍스트 의미를 반영한 잠재 이미지를 생성
- 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. 전체 생성 흐름
-
랜덤 노이즈 latent 생성
-
CLIP으로 프롬프트 → 임베딩
-
U‑Net에서 노이즈 제거 + cross‑attention으로 텍스트 반영
3-1. 스케줄러가 각 단계 타이밍·강도 조절
-
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별 노이즈 제거가 적다 = 더 정밀하고 섬세한 복원 가능 (퀄리티↑, 속도↓)
- 전체 50 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. 지원되는 시각적 조건(컨디셔닝 타입)
- Structural Guides – pose, depth map 유지
- Edge & Contour – 스케치, 윤곽선 등 형태 강조
- Semantic & Style Masks – 특정 영역 스타일링
- Pattern & Function – 패턴, QR코드 등 특수 디테일 제어
e. ControlNet 적용 시 장점
- 단순한 img2img보다 안정적이고 예측 가능한 구조 유지
- 컨텐츠와 스타일 분리 제어 가능 → 일관된 시리즈 이미지, 제품 목업, 만화 등 제작에 유리
f. 기술 핵심 요소
가. Zero Convolution
- ControlNet 파라미터는 처음에 0으로 초기화 → 기존 Stable Diffusion 네트워크 파괴 없이 확장 학습 가능
나. Frozen + Trainable Dual Net
- 원래 U‑Net 구조는 고정(frozen), 추가된 ControlNet 부분만 fine-tune (학습 가능)
- 구조 유지 + 추가 컨디셔닝 학습 분리해서 안정 확보
g. 전체 작동 흐름
- 입력 이미지 → 피처(ex. 윤곽, depth, pose) 추출
- text prompt + 피처 → U‑Net에 인식
- cross‑attention 과정에서 텍스트와 이미지 구조를 동시에 고려해 생성
- 스케치 → 완성된 이미지까지 자연스럽게 유지됨
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이 과도하게 특정 방향으로 쏠리거나
- 약하게 작동해서 의미 반영이 잘 안 될 수도 있음
- Cross-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을 병렬로 처리
- 서로 영향을 주지 않으면서 조화롭게 반영 가능
- 기존의 text conditioning과 완전히 분리된 attention block을 사용
- 전용 projection network 추가
[ 요약 ]
항목 | 영향 | 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. 왜 강력한가?
- 구조 유지: 포즈와 구도가 그대로 유지
- 정체성과 스타일 유지: 사용자와 얼굴·스타일이 모든 장면에 반영
- 크리에이티브 주제 반영: 사이버펑크·영화 분위기 같은 프롬프트 특성 적용
- 결과적으로 하나의 이미지 안에 모든 조건 조합을 다 포함한 결과물 생성 가능
f. 활용 분야
- 캐릭터 일관성 있는 시리즈 제작
- 브랜딩 아바타, 마스코트 활용
- 웹툰, 게임, 스토리텔링 콘텐츠 제작
- 그린스크린 대신 상상력 기반 배경 합성 등
g. 다음 단계 방향
- LoRA + ControlNet + IP‑Adapter 조합 최적화
- 스타일 융합, 멀티-LoRA
- UI 기반 툴 제작, 자동화 파이프라인 상용화