SANA: EFFICIENT HIGH-RESOLUTION IMAGE SYNTHESIS WITH LINEAR DIFFUSION TRANSFORMERS 논문 리뷰

SANA by NVIDIA paper review 논문 리뷰
김호진's avatar
Oct 24, 2024
SANA: EFFICIENT HIGH-RESOLUTION IMAGE SYNTHESIS WITH LINEAR DIFFUSION TRANSFORMERS 논문 리뷰
요약
Nvidia에서 낸 Text-to-image 모델, 4096의 resolution의 이미지 생성.
결과물부터
notion image
 
 
 
성과
  1. 매우 빠른 속도
    1. 4096 기준 100배, 1024는 25배 빠른 속도
      notion image
      notion image
  1. 매우 작은 모델
    1. 위에서 비교한 Flux-dev는 12B, SANA는 1.6B랑 0.6B
  1. 속도, 크기 대비 좋은 성능
    1. notion image
      일반적으로 이미지 생성에서 보는 5가지 metric
      FID 좋고, CLIP은 4,5위
      GenEval - Object에 집중, DPG - 긴 프롬프트
 
 
제가 생각하는 contribution
32x compression Auto Encoder
기존의 압축에 영향을 주는 값들이라고하면
  • Down-sample factor
  • Channel
  • DiT의 Patch size
notion image
결론적으로는 SDXL, Flux 등에서 보통 사용하는 F8C4P2보다 2배 더 압축하는 AE 구현 : F32C32P1
DiT에 Patchify를 시키지 않고, 채널은 32로 하는게 제일 좋았다.
Decoder-only LLM Text Encoder
기존에 사용하는 Text encoder : T5, CLIP
SANA에서 사용 : Gemma-2
  1. image-text alignment와 reasoning 능력이 더 좋고, 인코딩 속도도 동일 성능을 보이는 T5-XXL대비 6배 더 빠르다.
    1. notion image
  1. prompt를 LLM에 바로 태워서 마지막 layer의 feature를 썼더니 불안정했다(loss NaN)
    1. 그래서 봤더니 T5의 분산이 훨씬(10, 100배?) 작았다 → feature를 분산 1로 normalize하고, 학습가능한 scaling factor를 0.01로 초기화해서 사용
  1. prompt를 바로 LLM에 태우는게 아니라, instruction을 설계한다.
    1. from Exploring the role of large language models in prompt encoding for diffusion models
      이 프롬프트에 맞는 이미지를 자세히(위치, 컬러, 구도 등) 묘사해봐 → 출력값을 사용
      notion image
      notion image
 
Linear Attention :
notion image
 
2020년 논문(Transformers are rnns: Fast autoregressive transformers with linear attention)에서 제시한 개념
아주 간단하게 이해한 바로는..
  1. 기존에는 attention 연산을 위해 Q와 K를 matmul하고 softmax를 적용해서 weight score를 구한다음 V에 곱한다.
    1. 여기서 Q, K 연산이 time complexity N제곱
  1. 근데 꼭 softmax를 적용해야하나? 가중합인게 중요한거지
    1. → Q와 K에 각각 비선형 함수를 적용하고(ReLU) 둘을 곱하는 형태로 분해
  1. 그럼 ReLU(Q) ReLU(K) V가 되는데, 이럼 matrix 결합법칙 때문에 뒤의 K, V 계산부터 해도 된다. 그리고 이건 dot product, O(N)
    1. 그거랑 앞의 Q와의 연산도 O(N)
최종적으로 O(N)이 된다. 2N인건 안중요함?
약 1.7배 속도가 빨라졌다.
 
notion image
 
궁금한 것 : 이게 그렇게 좋다면 왜 진작에 다른 연구들에서 안썼을까? 분명히 이유는 있을 것.
 
여기서 말하는건 결국 softmax가 없어짐으로 인해 sub-optimal 성능을 보이고 최종적으로 성능이 비슷하더라도 수렴 속도가 오래 걸린다고 함.
→ 대체하더라도 토큰간의 상관관계를 파악하는 능력이 softmax보다는 떨어진다.
Mix-FFN
→ 그렇다면 FeedForward 연산에서, linear layer말고 토큰끼리 서로의 정보를 참고할 수 있게 설계해서 그 단점을 보완하자 : Conv layer 사용
위의 문제를 해결하기위해 Mix-FFN 사용. linear layer대신에 3*3 convolution을 Gated로 적용한다. local 정보를 파악하는 능력이 올라가니까.
 
→ 근데 이렇게 Conv를 적용해서 토큰끼리 상관관계도 학습할 수 있게하니, position 정보도 학습해서 positional encoding을 쓰지 않아도 성능하락이 없었다.
원래도 여기에 관한 연구가 있음(How much position information do convolutional neural networks encode?)
예상해볼 수 있는 단점이라고하면 길이가 계속해서 달라질 때 성능이 유지되지 못할 것 같다는 점인데, 최근의 LLM쪽 연구(The impact of positional encoding on length generalization in transformers)에 따르면 generalization ability도 좋다고 합니다.
Flow Matching objective, Flow-DPM-Solver sampling
Flow-based training, sampling을 사용해서 속도향상(SD3에서 차용)
v-objective, EDM도 테스트 해봤다고 하는듯
 
짧게 이해한 바로는
두개만 비교 : DDPM의 noise prediction과 Rectified flow - flow matching
  • DDPM
    • 를 사용한 공식에 따라서 timestep t에서의 noise-perturbed x_t, t, x를 사용해서 이 때 더해진 noise를 예측
      즉, 모델의 출력값(예측하고자 하는 것)은 timestep t에서 더해진 noise
  • Rectified flow
    • 이 원본, 이 noise (t는 0~1)
      notion image
      noise 이 되기위해서 어느방향으로 얼마나 이동해야하는지를 나타내는 벡터 그 자체 = flow?
      그리고 이 flow를 직선이라고 단순하게 모델링한다. 즉 target은 이고, t와 무관하게 구해진다.
      는, 당연하게도 x0과 1을 사용하여 순수한 interpolation 계산으로 얻는 값.
      = t + (1-t)
       
      모델은 (, t, condition)을 입력으로 받아서 위 target을 예측하도록 학습된다.
 
학습은 위의 objective로 하고,
샘플링은 Flow-DPM-Solver를 사용
notion image
Flow-DPM-Solver를 사용하니 sampling step이 14~20이어도 성능이 좋았다. 기존의 Flow-Euler는 28~50. 약 2배 빨라졌다고 볼 수 있을듯
 
추가
  • 데이터 처리 : 4개의 VLM모델로 이미지를 captioning하고, 그중에 CLIP score가 높은 텍스트가 학습 과정에서 더 많이 선택되도록 했다.
  • DiT를 썼을 때 Block layer 수가 20 ~ 30 사이인게 제일 좋다. 모델을 키울 때도 depth를 늘려서 키우지 않음.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Share article
Subscribe to our newsletter

Kim Hojin