Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

빙글빙글 돌아가는 바람개비

[Study] Dreambooth 원리 본문

Image Generation/Study

[Study] Dreambooth 원리

바람개비은하 2026. 4. 12. 23:13

DreamBooth

DreamBooth는 특정 인물이나 사물을 Stable Diffusion에 학습시키는 방법이다. 예를 들면 내 얼굴, 우리 집 강아지, 특정 제품처럼 기존 모델이 정확히 알지 못하는 대상을 몇 장의 이미지로 추가 학습시키는 방식이다.

LoRA가 널리 쓰이기 전에는 이런 용도로 DreamBooth가 많이 사용됐다. 지금은 DreamBooth 방식 그대로 전체 모델을 다시 저장하기보다는, DreamBooth의 학습 아이디어를 LoRA와 함께 쓰는 경우가 많다.

핵심은 단순하다. 모델에게 sks dog 같은 낯선 이름을 하나 알려주고, 그 이름이 특정 강아지를 가리키도록 학습시키는 것이다.


1. 왜 필요한가

Stable Diffusion은 dog, woman, car 같은 일반적인 개념은 잘 안다. 하지만 특정한 한 사람의 얼굴이나 특정한 한 마리의 강아지는 모른다.

프롬프트로 아무리 길게 설명해도 한계가 있다. “갈색 털에 귀가 접힌 작은 강아지”라고 쓰면 비슷한 강아지는 만들 수 있지만, 실제 우리 강아지의 얼굴과 무늬를 계속 유지하기는 어렵다.

그래서 모델에 사진 몇 장을 보여주고, 그 피사체를 따로 학습시키는 방법이 필요해진다. DreamBooth는 이 문제를 다루기 위해 나온 방식이다.

그냥 파인튜닝하면 안 되나

그냥 모델을 추가 학습시키면 될 것 같지만, 실제로는 문제가 생긴다.

  • 너무 외워버린다. 사진 수가 적기 때문에 학습 이미지의 포즈, 배경, 조명까지 같이 외우기 쉽다.
  • 일반 개념이 망가질 수 있다. 특정 강아지를 dog로만 학습시키면, 이후 모델이 dog를 그릴 때 그 강아지 쪽으로 치우칠 수 있다.

DreamBooth는 이 두 문제를 줄이기 위해 고유 식별자Prior Preservation을 사용한다.


2. 고유 식별자

DreamBooth에서는 피사체에 낯선 이름을 붙인다. 논문에서는 sks 같은 문자열을 예로 든다. 그래서 학습 이미지는 보통 이런 식으로 캡션을 붙인다.

a photo of sks dog

여기서 sks는 특정 대상을 가리키는 이름이고, dog는 그 대상이 속한 종류다.

둘 다 필요하다. sks만 쓰면 모델은 이게 사람인지, 강아지인지, 물건인지 알기 어렵다. 반대로 dog만 쓰면 기존의 일반적인 강아지 개념과 섞인다.

그래서 sks dog처럼 묶어서 쓴다. 의미는 대충 이렇다.

sks = 새로 배울 특정 대상
dog = 그 대상이 속한 큰 카테고리

학습이 끝나면 sks dog는 그냥 아무 강아지가 아니라, 학습에 사용한 바로 그 강아지를 가리키게 된다.


3. Prior Preservation

DreamBooth에서 중요한 부분은 Prior Preservation이다. 이름은 어렵지만, 목적은 단순하다.

특정 강아지를 배우더라도, 모델이 일반적인 강아지 개념을 잊지 않게 만드는 것이다.

이를 위해 학습에는 두 종류의 이미지가 들어간다.

이미지 종류 프롬프트 역할
Instance 이미지 a photo of sks dog 특정 강아지의 생김새를 학습한다.
Class 이미지 a photo of a dog 일반적인 강아지 개념을 유지한다.

Class 이미지는 보통 학습 전 모델이 직접 만든다. 예를 들어 a photo of a dog로 강아지 이미지를 여러 장 생성해두고, 학습할 때 같이 넣는다.

이렇게 하면 모델은 한쪽으로만 치우치지 않는다. 한쪽에서는 sks dog를 배우고, 다른 한쪽에서는 기존의 dog 개념을 유지한다.

특정 피사체 학습
+
일반 class 유지
과적합 완화

4. 학습

실제 흐름은 복잡하지 않다.

  1. 피사체 사진을 준비한다. 보통 3~30장 정도를 사용한다. 정면, 측면, 다른 배경이 섞여 있으면 좋다.
  2. 고유 식별자를 정한다. 예를 들어 sks, ohwx처럼 평소에 잘 안 쓰는 문자열을 쓴다.
  3. 캡션을 붙인다. 학습 이미지는 a photo of sks dog처럼 작성한다.
  4. Class 이미지를 만든다. a photo of a dog 같은 프롬프트로 일반 class 이미지를 생성한다.
  5. 함께 학습한다. Instance 이미지와 Class 이미지를 같이 넣어, 특정 피사체를 배우면서 일반 개념도 유지한다.

학습이 끝나면 프롬프트에서 sks dog를 호출할 수 있다.

sks dog
+
on the beach
해변에 있는 특정 강아지
sks dog
+
oil painting
유화 스타일의 특정 강아지

 

5. 한계

DreamBooth가 만능은 아니다. 특히 이미지가 적기 때문에 과적합을 완전히 피하기 어렵다.

  • 학습 이미지와 비슷한 구도만 잘 나올 수 있다.
  • 학습을 너무 오래 하면 얼굴이나 무늬는 비슷해지지만, 포즈와 배경이 굳어질 수 있다.
  • 전체 파인튜닝 방식은 파일이 크고 관리가 불편하다.
  • 프롬프트에 따라 정체성이 약해지거나, 반대로 너무 강하게 고정될 수 있다.

그래도 특정 피사체를 모델에 학습시키는 기본 아이디어를 이해하기에는 DreamBooth가 가장 좋은 예시다. 고유 식별자로 대상을 부르고, class 이미지를 같이 넣어 기존 개념을 유지한다. 이 두 가지가 DreamBooth의 핵심이다.


정리

DreamBooth는 특정 인물이나 사물을 모델에 학습시키는 방법이다. sks dog처럼 고유 식별자를 붙이고, 그 식별자가 특정 피사체를 가리키도록 모델을 파인튜닝한다.

이때 일반적인 dog 개념이 망가지지 않도록 class 이미지도 함께 학습한다. 이것이 Prior Preservation이다.

초기에는 DreamBooth로 모델 전체를 다시 저장했지만, 지금은 같은 아이디어를 LoRA와 결합해 더 가볍게 쓰는 경우가 많다.

'Image Generation > Study' 카테고리의 다른 글

[Study] Scheduler  (0) 2026.04.15
[Study] CFG++  (0) 2026.04.06
[Study] DiT: Diffusion에 Transformer를 쓰는 방식  (0) 2026.04.01
[Study] MMDiT를 이용한 SD3  (0) 2026.03.29
[Study] SDXL 살펴보기  (0) 2026.03.26