반응형

https://huggingface.co/blog/dreambooth

 

Training Stable Diffusion with Dreambooth using Diffusers

Training Stable Diffusion with Dreambooth using 🧨 Diffusers Dreambooth is a technique to teach new concepts to Stable Diffusion using a specialized form of fine-tuning. Some people have been using it with a few of their photos to place themselves in fan

huggingface.co

원본 글은 22년 11월 07일에 작성되었습니다

 

요약: 권장 설정들

학습률이 미치는 영향

실험 설정

장난감 고양이

돼지 머리

미스터 포테이토

사람의 얼굴

초기 결과 요약

얼굴 훈련시 사전 보존 사용

스케줄러의 효과

텍스트 인코더 값의 미세 조정

에필로그: 텍스트 반전 + 드림부스

 

반응형

 

요약: 권장 설정들

  • 드림부스(Dreambooth) 는 빨리 과적합(과대적합) 되는 경향이 있습니다. 좋은 품질의 이미지를 얻으려면 학습 단계(Training Stpes) 와 학습률(Learning Rate) 사이에서 '최적점'을 찾아야 합니다. 낮은 학습률을 사용하고 결과가 만족스러울 때 까지 학습 단계 수를 점진적으로 늘리는 것이 좋습니다.
  • 드림부스는 얼굴에 대해 더 많은 학습이 필요합니다. 실험 결과 배치 크기(batch size) 를 2로 설정하고 학습률을 1e-6(0.000001) 으로 설정하고 800~1,200 단계에서 잘 작동했습니다.
  • 얼굴을 학습할 때 과적합을 방지하려면 사전 보존이 중요합니다. 다른 피사체의 경우 큰 차이가 없는 것 같습니다.
  • 생성된 이미지에 노이즈가 있거나 품질이 저하된 경우 과적합이 되었을 수도 있습니다. 먼저 위의 단계를 시도하여 과적합을 방지하십시오. 생성된 이미지에 여전히 노이즈가 있는 경우 DDIM 스케쥴러를 사용하거나 더 많은 추론 단계를 실행하세요.(실험에서 100개 까지는 잘 작동함)
  • U-Net과 텍스트 인코더(Text Encoder) 를 학습시키면 품질에 큰 영향을 미칩니다. 텍스트 인코더의 미세 조정, 낮은 학습률, 적절한 단계수를 사용하여 최상의 결과를 얻었습니다. 그러나 텍스트 인코더를 미세 조정하려면 더 많은 VRAM이 필요하고 최소 24GB 이상의 VRAM이 있는 GPU가 이상적입니다. 8bitAdam, fp16 학습 또는 구글 코랩(Google Colab) 또는 캐글(Kaggle) 에서 제공하는 것과 같은 16GB VRAM을 가진 GPU에서 학습할 수 있습니다.
  • EMA를 사용하거나 사용하지 않고 미세 조정하면 비슷한 결과가 나옵니다.
  • 드림부스를 학습시키기 위해 sks 토큰을 사용할 필요는 없습니다. 첫 번째 구현 중 하나는 어휘에서 드문 토큰이기에 사용했지만 실제로는 일종의 라이플입니다. 우리의 실험과 @nitrosocke의 실험은 대상을 설명할 때 자연스럽게 사용할 수 있는 용어를 선택해도 괜찮다는 것을 보여줍니다.

 

학습률이 미치는 영향

드림부스는 아주 빠르게 과적합됩니다. 좋은 결과를 얻으려면 데이터 세트에서 적합한 방식으로 학습률과 훈련 단계 수를 조정하십시오. 실험(후술) 에서는 학습률이 높거나 낮은 4가지 데이터 세트에 대해 미세조정하였습니다. 모든 경우에서 낮은 학습률이 더 나은 결과를 보였습니다.

 

실험 설정

2대의 TESLA A100 40GB에서 AdamWOptimizer을 활성화하고 train_dreambooth.py 스크립트를 사용하여 실험했습니다. 동일한 시드값을 사용했으며 학습률, 훈련 단계 수, 사전 보존 사용을 제외한 모든 하이퍼파라미터를 동일하게 사용했습니다.

처음 3개의 예제(다양한 오브젝트) 의 경우, 400단계에 대해 배치 크기를 4(GPU당 2) 로 모델을 미세 조정했습니다. 학습률은 5e-6(0.000005)의 높은 속도, 2e-6(0.000002)의 낮은 속도를 사용했습니다. 사전 보존은 사용하지 않았습니다.

마지막 실험에서는 모델에 인간 피사체를 추가하려 시도합니다. 이 경우 배치 크기를 2(GPU당 1), 800단계와 1,200단계의 사전 보존을 사용했습니다. 학습률은 5e-6(0.000005)의 높은 속도, 2e-6(0.000002)의 낮은 속도를 사용했습니다.

8-bit Adam, fp16 학습, Gradient Accumulation을 사용해 메모리 사용량을 줄이고 16GB의 VRAM을 가진 GPU에서 비슷한 실험을 할 수 있다는 점을 유의하세요.

 

장난감 고양이

높은 학습률 5e-6(0.000005)

 

낮은 학습률 2e-6(0.000002)

 

돼지 머리

높은 학습률 5e-6(0.000005)

색상 아티팩트는 노이즈 잔여물이고 추론 단계를 더 실행하면 이런 세부 사항을 해결하는데 도움이 될 수 있습니다.

 

낮은 학습률 2e-6(0.000002)

 

미스터 포테이토

높은 학습률 5e-6(0.000005)

색상 아티팩트는 노이즈 잔여물이고 추론 단계를 더 실행하면 이런 세부 사항을 해결하는데 도움이 될 수 있습니다.

 

낮은 학습률 2e-6(0.000002)

 

사람의 얼굴

우리는 시트콤 '사인필드(Seinfeld)'에 나오는 크레이머(Kramer) 캐릭터를 스테이블 디퓨전에 통합하려 했습니다. 앞서 언급한것처럼 우리는 더 작은 배치로 더 많은 단계를 훈련했습니다. 그럼에도 불구하고 결과는 좋지 않았습니다. 간결성을 위해 이러한 샘플 이미지는 생략하고 다음 부분으로 넘어가서 얼굴 훈련에 대해 집중적으로 설명하겠습니다.

 

초기 결과 요약

드림부스로 스테이블 디퓨전을 훈련하여 좋은 결과를 얻으려면 데이터 세트의 학습 속도와 훈련 단계를 조정하는 것이 중요합니다.

  • 학습률이 높고 훈련 단계가 너무 많으면 과대적합이 될 수 있습니다. 모델은 어떤 프롬프트를 사용하던 대부분을 훈련한 데이터에서 이미지를 생성합니다.
  • 학습률이 낮고 훈련 단계가 너무 낮으면 모델이 통합하려는 개념을 생성할 수 없는 과소적합으로 이어집니다.

얼굴은 훈련하기 더 어렵습니다. 실험 결과 사물의 경우 훈련 단계 400번에 2e-6(0.000002)의 학습률이 효과적이었지만 얼굴의 경우 훈련 단계 1,200번에 1e-6(0.000001) ~ 2e-6(0.000002)의 학습률이 필요했습니다.

모델이 과대적합되면 이미지 품질이 크게 떨어지고 다음과 같은 경우에 발생됩니다

  • 학습률이 너무 높은 경우
  • 훈련 단계가 너무 많은 경우
  • 얼굴의 경우 다음 부분에 있는것처럼 사전 보존이 사용되지 않은 경우

 

얼굴 훈련시 사전 보존 사용

사전 보존은 미세 조정 과정의 일부로 훈련하려는 동일한 클래스의 추가 이미지를 사용하는 기술입니다. 예를 들어서 새로운 사람을 모델에 통합하려고 할 때 보존하려는 클래스는 사람일 수도 있습니다. 사전 보존은 새로운 사람의 사진과 다른 사람의 사진을 결합하여 과대적합을 줄이려고 합니다. 좋은 점으로는 안정 확살 모델 자체를 사용하여 이러한 추가 클래스 이미지를 생성할 수 있다는 것입니다! 원하는 경우 훈련 스크립트가 자동으로 처리하지만 사용자가 직접 사전 보존 이미지가 포함된 폴더를 제공할 수 있습니다.

 

사전 보존을 사용한 경우, 1,200단계, 학습률 2e-6(0.000002)

 

사전 보존을 사용하지 않는 경우, 1,200단계, 학습률 2e-6(0.000002)

보이는것처럼 사전 보존을 사용하면 결과가 더 좋아지지만 여전히 노이즈와 같은 얼룩들이 보입니다. 이제 몇가지 트릭들을 사용할 차례입니다!

 

스케줄러의 효과

이전 예제에서는 추론 프로세스 중에 PNDM 스케줄러를 사용하여 이미지를 샘플링했습니다. 모델이 과대적합일 때 DDIM이 일반적으로 PNDM, LMSDiscrete보다 훨씬 더 잘 작동하는 것을 관찰했습니다. 또한 더 많은 단계에 대해 추론을 실행하면 품질이 향상될 수 있고 100단계가 좋은 선택인 것 같습니다. 추가 단계는 일부 노이즈 패치를 이미지 디테일로 해결하는데 도움이 됩니다.

 

PNDM을 이용한 크레이머 훈련

 

LMSDiscrete을 이용한 크레이머 훈련, 결과는 아주 거지같습니다

 

DDIM을 이용한 크레이머 훈련, 훨씬 낫습니다

차이는 덜하지만 다른 사물들도 비슷한 결과를 보였습니다.

 

PDPM을 이용한 미스터 포테이토 훈련

 

LMSDiscrete을 이용한 미스터 포테이토 훈련

 

DDIM을 이용한 미스터 포테이토 훈련

 

텍스트 인코더 값의 미세 조정

원본 드림부스 논문은 모델의 U-Net 구성 요소를 미세 조정하는 방법을 설명하지만 텍스트 인코더 값은 유지합니다. 하지만 텍스트 인코더 값을 미세 조정하면 더 나은 결과를 얻을 수 있다는 것을 확인했습니다. 다른 드림부스 구현에서 사용되는 것을 보고 이 접근 방식을 실험했는데 결과는 놀라웠습니다!

 

텍스트 인코더 고정

 

텍스트 인코더 미세 조정

텍스트 인코더를 미세 조정하면 특히 얼굴에서 최상의 결과를 얻을 수 있습니다. 더 사실적인 이미지를 생성하고 과대적합이 덜 발생하고 더 나은 프롬프트 해석 가능성을 달성하여 더 복잡한 프롬프트를 처리할 수 있습니다.

 

에필로그: 텍스트 반전 + 드림부스

또한 텍스트 반전(Textual Inversion) 과 드림부스를 결합한 최종 실험을 진행했습니다. 두 기술 모두 유사한 목표를 갖고 있지만 접근 방식은 다릅니다.

이 실험에서 먼저 텍스트 반전 2,000단계에 대해 실행했습니다. 그런 다음 이 모델에서 학습률 1e-6을 사용해 추가 500단계 만큼의 드림부스를 실행했습니다. 결과는 다음과 같습니다.

일반 드림부스를 사용하는 것보다 결과가 훨씬 좋지만 전체 텍스트 인코더를 미세 조정하는 것만큼 좋지 않다고 생각합니다. 훈련 이미지의 스타일을 조금 더 복사하는 것 같아서 이미지에 과도하게 맞출 수 있습니다. 이 조합을 더 자세히 살펴보지 않았지만 프림부스를 개선하면서 16GB의 VRAM을 가진 GPU에 프로세스를 맞출 수 있는 흥미로운 대안이 될 수 있습니다.

반응형

+ Recent posts