Model
.ai
오픈 AI 모델 추적

생성 AI 이미지 모델 작동 원리: 확산, 잠재 공간, 텍스트 인코더 쉽게 설명

주제: 모델
작성자: Quartermaster
2025년 8월 28일 게시

개요

현재 모든 이미지 모델은 노이즈 제거기야. 학습할 때 수백만 장의 이미지에 점점 더 많은 랜덤 노이즈를 섞고, 각 이미지의 캡션과 함께 보여줘서 어떤 노이즈가 섞였는지 예측하도록 배워. 생성할 때는 이 과정을 거꾸로 해: 순수 노이즈에서 시작해서 네가 준 프롬프트에 맞게 노이즈가 뭔지 모델에 물어보고, 조금씩 제거해. 이걸 20~30번 반복하면 캡션에 맞는 이미지가 나타나. 이게 핵심이고, "확산(diffusion)"은 노이즈를 점점 더 넣었다가 빼는 과정을 뜻해.
원본 픽셀로 작업하면 너무 느리니까, Stable Diffusion 1.x부터는 노이즈 제거를 잠재 공간(latent)이라는 압축된 공간에서 해. VAE라는 작은 네트워크가 1024x1024 이미지를 128x128 숫자 그리드로 압축하고 마지막에 다시 확장해. 노이즈 제거기(예: SD 1.5와 SDXL의 U-Net, Flux나 Qwen, Z-Image, 비디오 모델의 트랜스포머)는 픽셀을 직접 보지 않아. 그래서 이미지 크기가 8 또는 16의 배수여야 하고, VAE 디코드 단계가 메모리를 많이 쓸 수 있어.
프롬프트는 텍스트 인코더를 거쳐 단어를 노이즈 제거기가 조건으로 쓸 수 있는 숫자 리스트로 바꿔. SD 1.5는 77토큰 제한의 CLIP 인코더 하나, SDXL은 두 개, Flux는 큰 T5 언어 모델을 추가하고, 2025년과 2026년 모델(Qwen Image, FLUX.2, Z-Image, Wan 2.2)은 완전한 LLM을 인코더로 써. 이 변화가 프롬프트 작성 방식 차이의 대부분을 설명해: CLIP 기반 모델은 태그 리스트, LLM 기반 모델은 자연스러운 문장. 마지막으로 LoRA는 노이즈 제거기 가중치(가끔 인코더도) 조정하는 작은 수정 집합으로, 새 지식을 추가하는 게 아니라 기본 모델이 이미 배운 걸 재조정하는 거야.

참고 자료

이름
타입
의미
Denoiser (U-Net / DiT)
component
주요 네트워크. 프롬프트와 스텝을 받아 잠재 공간의 노이즈를 예측해. SD 1.5와 SDXL은 U-Net, Flux, FLUX.2, Qwen, Z-Image, Wan, LTX, H3는 확산 트랜스포머(DiT / MMDiT).
VAE
component
이미지를 잠재 공간으로 압축하고 다시 복원해. 잘못된 VAE나 없으면 이미지가 흐릿하거나 보라색 빛이 돌 수 있어. Flux와 최신 모델들은 자체 16채널 VAE를 제공해.
Text encoder
component
CLIP-L, CLIP-G, T5-XXL 또는 LLM(Qwen2.5-VL, Mistral, Gemma). 프롬프트를 어떻게 이해하고 얼마나 길게 쓸 수 있는지 결정해.
Scheduler / sampler
setting
각 스텝마다 얼마나 노이즈를 제거할지와 수치적 방법을 정해. 텍스처와 수렴 속도는 바꾸지만 내용은 바꾸지 않아.
Steps
setting
노이즈 제거 반복 횟수. Turbo, Lightning, Schnell, Klein 같은 증류 모델은 1~8 스텝만 필요해.
CFG / guidance
setting
클래시파이어-프리 가이드: 프롬프트 조건 예측을 비조건 예측에서 얼마나 멀리 밀어내는지. 너무 높으면 색이 타버려; guidance-distilled 모델(Flux dev)은 단일 가이드 값만 써.
Latent size
setting
이미지 크기를 8(SD) 또는 16(Flux, Wan)으로 나눈 값. 모델은 학습한 해상도 근처에서 가장 잘 그림.
Flow matching
training method
2024년 이후 고전 확산 노이즈 스케줄 대체법(Flux, SD3, Wan, Z-Image). 같은 아이디어지만 노이즈에서 이미지로 가는 경로가 더 직선적이고, 필요한 스텝 수가 적어.

단계별 안내

  1. 노이즈 입력: 시드로부터 랜덤 숫자 잠재 그리드를 생성해. 시드를 바꾸면 이후 결과도 바뀌어.
  2. 프롬프트 입력: 텍스트 인코더가 단어를 임베딩으로 바꿔. CLIP 모델은 77토큰 넘으면 잘라내거나 버려; LLM 기반 모델은 문단도 문제없어.
  3. 각 스텝: SD와 SDXL은 노이즈 제거기를 두 번 실행(프롬프트 포함/미포함); 두 결과 차이를 CFG로 조절해 잠재 공간을 프롬프트 방향으로 움직여. Flux dev는 가이드 값이 내장된 한 번 실행.
  4. 샘플러가 스케줄(Karras, exponential, simple, beta)에 따라 예측 노이즈를 빼. 마지막 스텝 후 잠재 공간은 압축된 깨끗한 이미지.
  5. 디코드: VAE가 잠재 공간을 픽셀로 확장. 큰 이미지에선 이 단계가 8GB 카드 메모리를 초과할 수 있어 타일드 VAE 디코드가 있음.
  6. 선택적 두 번째 패스: hires-fix는 결과에 약간 노이즈를 다시 넣고 더 큰 크기로 노이즈 제거; img2img는 순수 노이즈 대신 기존 이미지에서 시작; 인페인팅은 변경을 마스크 영역으로 제한.
  7. 비디오 모델은 잠재 공간에 시간 축을 추가(5초 클립은 3D 잠재 공간 하나)하고 나머지는 같은 루프라 메모리가 10배 필요해.

예시

세 가지 아키텍처에서 같은 프롬프트

SD 1.5 (CLIP, 77 tokens): "portrait of an old sailor, grey beard, wool cap, harbour background, film photo"
SDXL (two CLIPs): same words, 1024x1024, CFG 6, 28 steps
Flux dev (CLIP-L + T5): "A weathered old sailor with a grey beard and a navy wool cap stands at a harbour railing at dusk; shallow depth of field, Kodak Portra look." guidance 3.5, 24 steps

ComfyUI 노드와 구성 요소 매핑

Load Checkpoint -> MODEL (denoiser), CLIP (text encoder), VAE
CLIP Text Encode (prompt) -> KSampler (sampler, steps, CFG, seed) -> VAE Decode -> Save Image

팁

  • 모델은 학습 데이터에 없던 걸 그릴 수 없어. 그래서 애니메이션 파인튜닝은 수천 캐릭터를 알고 사진 모델은 못 알고, 거의 모든 빈틈에 LoRA가 존재해.
  • 파인튜닝(DreamShaper, Juggernaut, Illustrious, Pony)은 기본 모델과 같은 구조에 가중치만 다름; 기본 모델용 LoRA는 보통 파인튜닝에도 작동하지만, 완전히 다른 파인튜닝(Pony)에는 안 될 때도 있어.
  • 증류 모델은 속도를 위해 유연성을 줄여. SDXL Lightning 4스텝은 초안에 적당하고, 전체 모델 28스텝은 최종에 좋아.
  • 텍스트 인코더가 보통 가장 큰 파일. Flux의 T5-XXL fp16은 인코더만 9GB 필요해서 fp8, GGUF 버전이 있음.
  • 가이드 증류(Flux dev)와 CFG는 다름. Flux dev에 CFG 7 쓰면 이미지가 타버려; 모델 페이지 설정을 써야 해.
  • 여기 설명한 모든 게 클라우드 파트너에서도 로컬과 똑같이 돌아가; 차이는 GPU 소유자가 누구냐뿐.

문제 해결

이미지가 회색빛, 흐릿하거나 보라색 빛이 돌 때

원인
VAE가 없거나 맞지 않거나 SDXL에서 fp16 VAE 오버플로우.

해결 방법
가족에 맞는 VAE를 불러와; SDXL은 fp16-fix VAE 사용.

긴 프롬프트가 일부 무시될 때

원인
SD 1.5와 SDXL의 CLIP 토큰 제한.

해결 방법
중요한 단어를 앞에 두거나 LLM 인코더가 있는 Flux, Qwen, Z-Image 모델로 바꿔.

색이 타고 대비가 너무 강할 때

원인
모델에 비해 CFG가 너무 높거나 가이드 증류 모델에 CFG 사용.

해결 방법
SDXL은 CFG 5~7로 낮추고, Flux dev는 가이드 3~4, CFG 1 사용.

큰 크기에서 타일링이나 피사체 중복

원인
잠재 공간 크기가 학습 해상도보다 훨씬 큼; 모델이 반복해서 그림.

해결 방법
원래 해상도로 생성 후 업스케일하거나 hires-fix에 0.4 노이즈 제거 사용.

마지막 단계에서만 메모리 부족

원인
전체 크기에서 VAE 디코드 단계.

해결 방법
타일드 VAE 디코드 사용하거나 작은 출력 크기 후 업스케일러 사용.

질문

모델이 학습 이미지 복사하는 건가?

가중치를 저장할 뿐 이미지 자체를 저장하거나 불러올 수 없어. 아주 자주 나온 이미지(유명 그림, 로고)와 비슷한 게 나올 수 있는데, 그래서 그런 이미지를 프롬프트에 넣지 않는 게 좋아.

아이디어는 같은데 왜 새 모델은 메모리가 더 많이 필요해?

더 큰 노이즈 제거기(Flux는 120억 파라미터, SD 1.5는 9억), 더 큰 텍스트 인코더, 더 큰 잠재 공간 때문. 양자화된 fp8, GGUF 버전이 메모리를 줄여줘.

체크포인트와 모델 차이는?

체크포인트는 모델(노이즈 제거기, 보통 인코더와 VAE 포함) 저장 파일이야. 사람들이 두 단어를 섞어 쓰기도 해.

같은 시드인데 다른 PC에서 다른 이미지가 나오는 이유?

GPU, 정밀도(fp16 vs bf16), 샘플러 구현 차이 때문. 노이즈는 같지만 계산 방식이 조금 달라. 같은 기기, 같은 설정이면 같은 이미지.

스텝 수가 많으면 항상 좋은가?

아니. 대부분 샘플러는 25~30스텝이면 수렴해; 그 이상은 시간 낭비. 증류 모델은 스텝 많으면 오히려 성능 떨어져.

이 가이드의 모델

작성자
재고를 관리합니다: 모든 LoRA, 모든 퀀트, 누군가가 final_v2_REAL.safetensors로 이름을 바꾼 모든 파일. 저녁 식사 전 몇 번의 Wan 렌더가 가능한지로 하드웨어를 평가합니다. VRAM 수치를 알려주고 크롬이 열려 있어서 틀렸다고 말할 겁니다. 가중치가 공개되지 않으면 출하되지 않은 것입니다.
Quartermaster의 모든 가이드

더 많은 가이드