Dreambooth로 안정적인 보급 교육
Dreambooth를 이용한 스테이블 디퓨전 트레이닝을 위한 실험에 대한 분석
Created on February 14|Last edited on February 14
Comment
Dreambooth는 미세 조정(fine-tuning)의 특화된 형태를 이용하여 스테이블 디퓨전(Stable Diffusion)에 새로운 개념을 학습시키는 기술입니다. 어떤 사람들은 환상적인 배경 속에 자신을 놓기 위해 사진 몇 장에 함께 이를 사용하는 반면, 다른 사람들은 새로운 스타일을 통합하기 위해 사용하기도 합니다. 🧨 디퓨저(Diffuser)는 Dreambooth 트레이닝 스크립트를 제공하지만, 일부 사용자들은 큰 성과를 거두기 어렵다고 보고된 바 있습니다.
저희는 스크립트를 검증하고 Dreambooth의 다양한 설정에 따른 효과를 분석하기 위해 많은 실험을 했습니다. 이 리포트는Dreambooth로 스테이블 디퓨전을 트레이닝하는 동안 여러분의 결과물을 개선하기 위한 몇 가지 팁과 결과를 제시해드릴 것입니다.
저희가 다룰 내용
요약;학습률(LR: Learning Rate)이 미치는 영향실험 설정결과 요약노이즈가 많고 품질이 저하된 이미지의 영향사전 보존(Prior Preservation)이 얼굴에 미치는 영향스케줄러(샘플러)의 효과Potato Head 데이터세트 동반스케줄러의 효과 요약텍스트 인코더 미세 조정의 효과텍스트 인코더 미세 조정 요약텍스트 반전(Textual Inversion)과 Dreambooth관련 내용 읽어보기
요약;
- Dreambooth를 사용하면 스테이블 디퓨전이 빠르게 과적합(overfit)됩니다. 데이터 세트에 적합한 학습률(LR: learning rate)과 트레이닝 단계를 찾는 것이 중요합니다. 더 적은 단계에서도 더 높은 학습률을 트레이닝하고, 더 많은 단계에서 더 낮은 학습률을 트레이닝하는 것은 매우 유사한 결과를 가져옵니다. 저희는 합리적인 이미지를 얻기 위해 주어진 학습률에 대한 가장 효율적인 트레이닝 단계를 찾아야 합니다.
- Dreambooth는 얼굴에 대한 트레이닝 단계가 더 필요합니다. 뱃치 사이즈가 2이고 LR이 1e-6인 실험에서 약 800-1200 단계가 잘 작동했습니다.
- 얼굴에 대한 트레이닝을 할 때 과적합(overfitting)을 피하기 위해 사전 보존이 중요하며, 다른 객체에 대해서는 큰 차이가 없는 것으로 보입니다.
- 생성된 이미지가 노이즈가 많거나 화질이 저하된 경우라면 이는 과적합(overfitting)되었을 가능성이 높습니다. 먼저, 이러한 상황을 피하기 위해 위의 단계들을 시도해주세요. 만일 생성된 이미지가 여전히 노이즈가 많은 경우 DDIM 스케줄러를 사용하거나 더 많은 추론(inference) 단계를 실행하세요 (저희 실험에선 약 100개 정도가 잘 작동했습니다).
- EMA를 실행한다고 해서 큰 차이를 보이지 않는 것으로 보입니다.
- 텍스트 인코더를 낮은 LR과 적절한 수의 단계들과 결합하여 미세 조정했을 때 최상의 결과를 얻었습니다. 그러나 텍스트 인코더를 미세 조정하려면 최소 24GB의 RAM이 있는 GPU가 필요합니다.
학습률(LR: Learning Rate)이 미치는 영향
Dreambooth를 사용하면 스테이블 디퓨전 모델이 굉장히 빠르게 과적합됩니다. 좋은 결과를 얻으려면 데이터 세트의 학습 속도와 교육 단계를 조정하는 것이 중요합니다. 저희는 학습률이 높고 낮은 4개의 데이터 세트에서 Dreambooth SD를 미세 조정해봤으며, 모든 경우에서 모델은 낮은 학습률로 트레이닝 되었을 때 더 나은 결과를 얻었습니다.
실험 설정
모든 실험은 2x40GB A100s에서AdamW 옵티마이저와 함께train_dreambooth.py 스크립트를 사용하여 수행되었습니다. 저희는 모두 동일한 시드를 사용했고 LR, 트레이딩 단계, 사전 보존(prior preservation)기능의 사용을 제외한 모든 하이퍼파라미터를 실행에 걸쳐 동일하게 유지했습니다.
첫 3개의 예시에선 400단계에 대해 뱃치 크기가 4(GPU당 2)인 모델을 미세 조정했습니다. 저희는 5-6의 높은 학습률과 2e-6의 낮은 학습률을 사용해봤습니다. 사전 보존(prior preservation)은 사용되지 않습니다.
얼굴 예제는 뱃치 크기 2(GPU당 1개)와 800, 1200단계에 대해 사전 보존으로 트레이닝 됩니다. 저희는 5-6의 높은 학습률과 2e-6의 낮은 학습률을 사용했습니다.
아래에서는 하이, 로우 LR로 네 개의 데이터 세트에 대한 결과를 확인하실 수 있습니다.
고양이 장난감 예제
High LR (5e-6)

Low-lr (2e-6)

Pighead Example
High LR (5e-6)

Low LR (2e-6)

포테이토헤드 예제
High LR (5e-6)

Low LR (2e-6)

페이스 예제 (확장하려면 클릭)
결과 요약
보시다시피Dreambooth를 사용한 스테이블 디퓨저 트레이닝을 통해 좋은 결과를 얻기 위해서는 다음을 수행하는 것이 중요합니다:
- • 데이터 세트의 학습률과 트레이딩 단계 조정
- 높은 학습률과 너무 많은 트레이닝 단계는 과적합을 초래할 수 있습니다 (즉, 모델은 프롬프트에 관계없이 트레이닝 데이터에서만 이미지를 생성할 수 있습니다).
- 낮은 학습률과 너무 적은 트레이닝 단계는 적합하지 않은 모델을 초래할 수 있으며, 이는 모델이 트레이닝 된 개념을 생성할 수 없는 경우입니다.
- 저희 실험에선 400개의 트레이닝 단계가 있는 객체의 경우에는 2e-6, 1200개 정도의 단계가 있는 얼굴의 경우에는 1e-6 또는 2e-6이 잘 작동하는 것으로 보입니다.
노이즈가 많고 품질이 저하된 이미지의 영향
모델이 과적합될 경우 이미지 품질이 상당히 저하되며 이는 다음과 같은 경우에 발생합니다:
- 위에서 설명한 것처럼 학습률이 너무 높은 경우
- 위에서 설명한 것처럼 교육 단계가 너무 많이 실행된 경우
- 얼굴의 경우 사전 보존을 하지 않은 경우
사전 보존(Prior Preservation)이 얼굴에 미치는 영향
사전 보존 기능을 사용할 시, 1,200단계, 로우 LR(2e-6)

사전 보존 기능을 사용하지 않을 시, 1,200단계, 로우 (2e-6)

스케줄러(샘플러)의 효과
위의 모든 결과는 PNDM 스케줄러(일명 PLMS )를 사용하여 생성되며, 스케줄러마다 다른 효과가 있다는 것도 흥미롭습니다.
과적합 시 PNDM 및 LMSDiscrete (klms) 스케줄러에서 이미지 품질이 가장 크게 저하됩니다. 추론을 위해 DDIM을 사용하는 것이 더 탄탄한 선택지로 보입니다. 디퓨전 단계를 더 많이 수행하여 품질을 향상시킬 수도 있습니다 (~100은 잘 작동하는 것으로 보입니다).
PNDM

LMSDiscrete

DDIM

Potato Head 데이터세트 동반
PNDM

LMSDiscrete

DDIM

스케줄러의 효과 요약
생성된 이미지가 노이즈가 많거나 품질이 저하된 것이 확인되면, 과적합 상태일 수 있습니다. 이를 방지하려면 다음에 따라주세요:
- 낮은 학습률 또는 적은 교육 단계 사용
- 사전 보존 사용
이러한 변경 후에도 이미지 품질이 계속 저하되면 다음을 수행합니다:
- 다른 스케줄러의 사용
- 더 많은 추론 단계 이용
텍스트 인코더 미세 조정의 효과
몇몇 분들은 디퓨저를 사용한 결과가 특히 얼굴에의 경우에선 다른 Dreambooth 사용자들의 결과보다 좋지 않다는 것을 관찰한 바 있습니다. 조사를 조금 해보고 난 뒤 CompVis 사용자들 또한 텍스트 인코더가 미세 조정하고 있다는 것을 발견했습니다! 그리고 텍스트 인코더를 미세 조정(fine-tuning)한 효과가 눈에 띕니다.
직접 확인해 보세요:
고정된(frozen) 텍스트 인코더

미세 조정된 텍스트 인코더

텍스트 인코더 미세 조정 요약
텍스트 인코더를 미세 조정(fine-tuning)하면 특히 얼굴에서 최상의 결과를 얻을 수 있는 것으로 보입니다.
- 보다 사실적인 이미지를 생성합니다.
- 과적합이 적습니다.
- 보다 신속한 영상해석능력(interpretability)이 가능합니다. 즉, 더 복잡한 프롬프트를 처리할 수 있습니다.
텍스트 인코더 미세 조정의 유일한 단점은 16GB GPU로는 더 이상 트레이닝을 수행할 수 없다는 것이며, 최소한 24GB 카드가 필요하다는 것입니다. DeepSpeed 를 사용하면 16GB에서도 아마 이 기능을 지원할 수 있지만, 이렇게 하면 트레이닝 시간이 늘어날 것입니다.
텍스트 반전(Textual Inversion)과 Dreambooth
저희는 또한 처음에 2000 단계에 대해 텍스트 반전 (textual inversion)을 실행한 다음 해당 모델을 사용하여 LR 1e-6 으로 500 단계에 대해 Dreambooth를 실행하는 실험을 했습니다.

보시다시피, 결과물은Dreambooth를 수행하는 것보다 훨씬 낫지만, 전체 텍스트 인코더를 미세 조정할 때만큼 좋지는 않습니다. 트레이닝 이미지의 스타일을 조금 더 복사하는 것처럼 보이기 때문입니다. 하지만 이 경우 과적합 되었을 수도 있기 때문일 수도 있습니다. 저희는 이 경우를 자세히 알아보진 않았지만, 텍스트 반전과Dreambooth 모두 16GB GPU에 적합하고 훨씬 짧은 시간에 트레이닝될 수 있기 때문에 텍스트 인코더 미세 조정을 대신할 좋은 대안이 될 수 있습니다. 이 부분에 대하여 좀 더 탐구하는 것을 커뮤니티에 맡기겠습니다.
이 분석은 완벽하진 않으며 Dreambooth를 개선할 수 있는 다른 많은 방법이 있을 수 있습니다. 오류나 개선사항이 있으면 알려주세요. 읽어주셔서 감사합니다!
관련 내용 읽어보기
Making My Kid a Jedi Master With Stable Diffusion and Dreambooth
In this article, we'll explore how to teach and fine-tune Stable Diffusion to transform my son into his favorite Star Wars character using Dreambooth.
Speed Up Stable Diffusion on Your M1Pro Macbook Pro
How to speed up your Stable Diffusion inference and get it running as fast as possible on your M1Pro Macbook Pro laptop.
Improving Generative Images with Instructions: Prompt-to-Prompt Image Editing with Cross Attention Control
A primer on text-driven image editing for large-scale text-based image synthesis models like Stable Diffusion & Imagen
Running Stable Diffusion on an Apple M1 Mac With HuggingFace Diffusers
In this article, we look at running Stable Diffusion on an M1 Mac with HuggingFace diffusers, highlighting the advantages — and the things to watch out for.
Add a comment
Thanks for such an insightful article. Do you happen to know a good tutorial on fine-tuning the text encoder ? I can't seem to find anywhere.
Reply