Hugging Face SDXL Dreambooth LoRA 고급 훈련 가이드
Hugging Face는 Stable Diffusion XL (SDXL) Dreambooth LoRA용 고급 훈련 스크립트를 공개했으며, Replicate의 Cog 트레이너에서 가져온 Pivotal Tuning 기법과 Kohya 트레이너의 Prodigy 옵티마이저를 결합했습니다. 이 통합은 최소한의 이미지로 고품질 개념 캡처를 달성하면서 기본 SDXL 모델의 미적 품질을 유지하는 것을 목표로 합니다.
개념 표현을 위한 Pivotal Tuning
Pivotal Tuning은 Textual Inversion과 표준 diffusion 미세 조정을 결합하여 기존 토큰으로 인한 의미 간섭을 방지합니다. 모델의 임베딩 공간에 사전 연관성이 있을 수 있는 희귀 토큰(예: "sks")을 재사용하는 대신, Pivotal Tuning은 텍스트 인코더에 새로운 토큰을 삽입합니다.
이 새로운 토큰들은 새로운 개념을 나타내도록 최적화됩니다. 훈련 과정은 일반적으로 훈련 에포크의 전반부에 텍스트 인버전을 수행(--train_text_encoder_ti_frac 로 제어)한 뒤 UNet 최적화를 계속 진행합니다. 이는 가중치를 미세 조정하기 전에 모델이 개념의 깨끗한 표현을 학습하도록 보장합니다.
Adaptive Optimizers와 Prodigy
학습률 및 가중치 감쇠와 같은 하이퍼파라미터를 수동으로 조정할 필요성을 줄이기 위해, Hugging Face는 adaptive optimizer를 권장합니다. Adafactor도 옵션이지만, 이 가이드에서는 Dreambooth LoRA 훈련에 특히 유용한 Prodigy를 강조합니다.
Prodigy는 과거 그래디언트를 기반으로 각 파라미터에 대한 학습률을 동적으로 조정합니다. Prodigy를 사용할 때 다음 설정을 권장합니다:
- Learning Rate:
1.0로 설정합니다. - Additional Settings:
--prodigy_safeguard_warmup및--prodigy_use_bias_correction를 활성화하고,adam_beta2를0.99로,adam_weight_decay를0.01로 설정합니다.
고급 훈련 실천법
diffusers 훈련 스크립트에 여러 추가 기술이 통합되어 LoRA 품질을 향상시킵니다:
독립적인 학습률
텍스트 인코더에 UNet보다 낮은 학습률을 설정하면 텍스트 인코더가 너무 빨리 과적합되는 것을 방지할 수 있습니다. 그러나 Prodigy와 같은 adaptive optimizer를 사용할 경우, 옵티마이저가 동일한 초기 학습률에서 자동으로 이러한 조정을 관리합니다.
맞춤 캡션
모든 이미지에 단일 인스턴스 프롬프트를 사용하는 것은 최적이 아닐 수 있습니다. 스크립트는 datasets 라이브러리를 통해 맞춤 캡션을 지원하여 사용자가 각 이미지에 고유한 프롬프트를 제공할 수 있게 합니다. 이는 Hugging Face Hub에서 데이터셋을 사용하거나 메타데이터가 포함된 로컬 ImageFolder를 생성함으로써 구현할 수 있습니다.
Min-SNR Gamma 가중치
Min-SNR gamma 가중치는 클램프된 신호 대 잡음 비율에 기반해 손실 가중치를 조정함으로써 훈련 중 타임스텝 간 충돌을 균형 잡습니다. 이는 특히 대규모 데이터셋에 효과적이며, 권장 값은 --snr_gamma=5.0 입니다.
훈련 데이터셋 관리
고품질, 다양한 데이터는 LoRA 성능에 필수적입니다. 주요 권장 사항은 다음과 같습니다:
- Faces: 고해상도 이미지를 사용하고, 훈련 세트에 다른 얼굴이 포함되지 않도록 하며, 클로즈업과 전신 샷을 혼합하고 먼 거리 샷은 피합니다.
- Variety: 조명, 포즈, 배경, 얼굴 표정의 다양성을 확보하여 일반화를 향상시킵니다.
- Prior Preservation Loss: 모델이 생성한 이미지 대신 실제 초상화 이미지를 정규화에 사용하면 언어 드리프트를 감소시키고 사실성을 유지하는 것으로 확인되었습니다.
실험 결과 및 벤치마크
Hugging Face는 이러한 기술을 검증하기 위해 세 가지 카테고리에서 실험을 수행했습니다:
- Style and Character (Huggy LoRA): Pivotal Tuning은 전체 텍스트 인코더 훈련과 경쟁하거나 더 나은 것으로 나타났습니다.
snr_gamma=5.0와 Prodigy 옵티마이저를 사용하면 AdamW보다 결과가 향상됩니다. - Style (Y2K Webpage LoRA): 이 실험은 스타일 LoRA가 캐릭터 LoRA보다 과적합되기 쉽다는 것을 보여줍니다.
max_train_steps,repeats,train_batch_size를 조정하여 개념 캡처와 유연성 사이의 균형을 찾아야 했습니다. - Faces (Face LoRA): 실험 결과 rank 32가 최적이며, 더 높은 rank(예: 64)는 종종 덜 현실적인 피부 질감을 가진 "에어브러시" 같은 외관을 초래합니다. 다양한 데이터셋에 대해 이미지 수의 120배 훈련 배수를 적용하는 것이 효과적인 것으로 확인되었습니다.
추론 및 호환성
Pivotal Tuning으로 훈련된 모델은 LoRA 가중치(*.safetensors)와 훈련된 텍스트 임베딩(*.safetensors) 모두가 필요합니다.
Diffusers 추론
diffusers에서 사용자는 pipe.load_textual_inversion 을 사용해 두 텍스트 인코더(CLIP ViT-L/14 및 CLIP ViT-G/14)에 임베딩을 먼저 로드한 뒤 pipe.load_lora_weights 로 LoRA 가중치를 로드해야 합니다.
ComfyUI와 AUTOMATIC1111
훈련 스크립트는 WebUI와 호환되는 LoRA와 임베딩을 생성합니다. AUTOMATIC1111에서는 사용자가 임베딩 토큰과 LoRA 태그(예: a y2k_emb webpage <lora:y2k:0.9>)를 사용해 프롬프트할 수 있습니다. ComfyUI에서는 LoRALoader 노드를 통해 LoRA를 로드하고, 임베딩은 models/embeddings 디렉터리에 배치합니다.
SUMMARY: Hugging Face는 SDXL Dreambooth LoRA용 고급 훈련 스크립트를 소개하며, Pivotal Tuning과 Prodigy 옵티마이저를 결합해 개념 캡처와 이미지 품질을 향상시킵니다.
TITLE: Hugging Face SDXL Dreambooth LoRA 고급 훈련 가이드