DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation

DreamBooth: Fine Tuning Text-to-Image Diffusion Models
for Subject-Driven Generation
  • task: subject 이미지를 참고하여 텍스트 프롬프트에 맞게 이미지를 생성하는 것
    • notion image
 
  • 기존 모델들은 인풋 이미지를 충실하게 재현해내지 못 하는 문제가 있음
    • notion image
  • subject-driven하게 생성을 하는 최초 시도이다
  • 모델의 목적: 사진 몇 장만으로 특정 ‘개체’를 모델에 학습시켜서, 그 개체의 정체성은 유지하면서도, 프롬프트로 원하는 변화(배경/포즈/속성)를 준 새로운 이미지를 생성하겠다
notion image
notion image
  • reconstruction loss
    • text2image diffusion 모델에 “A [V] dog”과 같은, 인풋 이미지가 해당하는 클래스와 unique identifier [V]를 넣어줌. 즉 a [identifier] [class noun]의 형태.
      • 새로운 dictionary를 모델에 넣어주는 의미
      • [identifier]를 넣어주는 이유?
        • 인풋 이미지에 personalized된 학습을 시키기 위해서
      • [class noun]을 넣어주는 이유?
        • 모델이 이미 가지고 있는 prior 지식을 활용하기 위해서. 즉 개의 이미지에 대한 지식을 더 활용하기 위해서
      • 그럼 [identifier]는 어떻게 고를까?
        • weak prior를 고르는 것이 핵심
          • 모델이 이미 의미를 잘 알고 있는 strong prior를 identifier로 선택하면, 기존 의미에서 새로운 의미로 학습시키느라 학습이 불안정 할 수 있음
        • 이상한 단어를 랜덤으로 고르자?
          • xxy5syt00와 같은 단어를 고르는 것은 사실 좋지 않음
          • 이걸 tokenizer로 쪼개면 x, y, z와 같이 실제론 strong prior일 수도 있음
        • 따라서 vocabulary에서 희귀 토큰을 구하고, 이글 detokenizer로 원래 어떻게 인풋으로 사람들이 넣는지 확인, 그 단어를 identifier로 사용
  • class-specific prior preservation loss
    • 인풋이미지의 클래스에 해당하는 이미지와 text를 넣어서 학습시킴
    • language drift를 방지하기 위함
      • 만약 이 작업을 안 해주면 “A [V] Dog”만 학습시키게 되고, 그러면 Dog이 일반적인 개가 아니라 [V] Dog, 즉 특정적인 개를 의미하는 걸로 바뀔 수 있음
    • 포즈 등의 다양성이 증가되는 효과
      • notion image
  • 학습 방법
    • 3-5 이미지를 subject 이미지로 넣어줌 (특정 개 이미지)
    • 1000장의 subject class의 이미지를 생성 (예를 들면 그냥 개 이미지)
    • 1000번의 iteration 거침. TPUv4, A100에서 5분정도 걸림
  • 실험 결과
    • notion image
       
      notion image
    • 평가 지표
      • CLIP-I
        • CLIP 이미지 임베딩으로 생성 이미지 ↔ 실제 이미지의 cosine 유사도 구함
          • 한계: 다른 이미지여도 text 상으로 유사하면 (예를 들어 “a yellow clock”) 그럼 임베딩이 유사해질 수 있음
        • DINO
          • ViT-S/16 DINO 모델로 생성 이미지 ↔ 실제 이미지의 cosine 유사도 구함
          • CLIP은 supervised model이기 때문에, 비교하는 두 이미지의 클래스가 같다면 임베딩이 유사해질 수 있음
          • 하지만 DINO는 self-supervised 모델이기 때문에 정답 라벨이 없어서, 같은 클래스의 이미지들도 임베딩 상으로 더 달라질 수 있음
          • DINO
            • notion image
          • self supervised & knowledge distillation
            • 동일한 구조의 student, teacher 준비
            • teacher는 ema 방식으로 student의 weight를 copy & freeze
            • teacher는 global view(전체 이미지에서 일부 크롭 후 resize)를, student는 local view(global view를 크롭 후 resize)를 학습
              • notion image
          • 라벨링이 필요없어서 데이터 생성 비용이 적고, classification보다 범용적인 backbone을 얻을 수 있는 장점
        • CLIP-T
          • CLIP 모델의 프롬프트 텍스트 임베딩과 생성 이미지의 이미지 임베딩의 cosine 유사도 구함
          • 생성 이미지가 텍스트를 얼마나 잘 반영했는지를 평가함
    • 만약 class noun을 틀리게 넣는다면?
      • notion image
    • prior preservation loss를 안한다면?
      • notion image
    • 인풋 이미지 수에 따른 성능
      • notion image
  • 활용
    • notion image
  • 실패 사례들
    • notion image
      1. 프롬프트와 맞지 않게 생성 되는 경우
      1. 배경에 대한 조건이 subject에도 반영 되는 경우 (가방이 파래진다거나)
      1. training 셋에 있는 이미지와 비슷해지는 경우 (overfitting)
  • 그런데 dreambooth 방식은 재학습이 필요하기 때문에 요즘엔 이미지를 컨디션으로 주거나, LoRA와 같은 좀 더 가벼운 재학습(dreambooth는 full finetuinning이니까) 방식을 사용한다고 한다
Share article

kjyong