여러 종류의 scaled, distilled 모델들을 전부 코드/가중치를 공개했다.
비디오 관련 무언가를 시작하기 너무 좋은 레포
transformer-based LDM이고 Video-VAE + denoising도 썼다.
H-W/32, T/8로 압축된다. transformer단에서는 패치 안하고, 많이 압축하니 spatiotemporal 동시에 attention도 할 수 있다. 대신 latent channel을 128로 늘렸다.
근데 많이 압축하면 fine detail들이 사라질 수 있다 : 가장 문제 → VAE가 latent to pixel도 하고 pixel to clean pixel도 하게 했다. → 별개의 upsampling module을 학습할 필요가 없어진다.
H100에서 768*512, 24fpx 5초 생성에 2초 걸렸다. 속도는 거의 순전히 VAE에 의한 결과인 것 같다. 딱히 다른 내용은 없음
Sora랑 MovieGen은 second-stage diffusion 모델을 둬서 고해상도 생성
Pixel-loss pixel-level loss를 VAE-decodec latents?이게 뭐지 여기에 줬다.
뭔가 VAE가 하는게 꼭 reconstruction이 아니라 부족한 high frequency detail을 “생성!” 해야한다는걸 준 것 같다. 그래서 last denoising step은 VAE가 한다고. 사실상 특정 부분은 pixel space에서 해라 이런 느낌이네
novel loss function도 있다네
Pixart-a 아키텍처 - DiT with text condition +
- RoPE 사용 enhanced by normalized fractional coordinates
- K, Q norm 적용 for stable, robust

VAE의 압축

채널을 늘렸는데도 압축률이 2배 더 좋다. 사실 채널이 크고 spatiotemporal 압축률이 높아서 합이 같아도 이득인건데
VAE가 학습될수록 latent에서 채널간의 중복이 줄어들었다.

- Patchify 하는건 transformer가 아니라 VAE encoder의 맨 처음으로 옮겼다.
- VAE decoder가 마지막 denoising step을 수행하도록 했다.

OOD 데이터가 VAE decoder의 input으로 들어갈 수 있다. 그럼 리컨된 픽셀에 아티팩트가 생긴다.
encoder가 OOD를 뱉는건, high frequency signal이 많을 때 그런 경향이 있더라
이걸 해결하기위해 MovieGen과 Sora는 별도의 upsampler 모델을 구현했지만 이건 연산적으로도, 시간적으로도 코스트가 든다.
디테일 + 속도까지 잡고싶다 → decoding + denoising 해버리기
그럼 장점은?
- 표현력이 latent space에서 끝나지 않고 decoder에도 생기기 때문에 더 풍부한 표현이 된다.
디코더가 단순 recon 뿐만 아니라 generation 역할도 하게되니까.
- 모델 학습할 때 같이 학습되는건가?
timestep = [0, 0.2]. 꼭 한스텝도 아니네
adaLN으로 들어감
Reconstruction GAN
아 이거 VAE 학습할 때 얘기구나 원래 보통은 pixel-wise L2 loss, perceptual loss, GAN loss를 쓴다.
L2
: 압축률이 높으면 L2 loss는 종종 blurry한 효과를 만든다.lpips
: 블러리함은 줄이는데 텍스쳐 아티팩트가 생긴다?GAN
: disc에 의존하는데, recon을 위해 설계된 존재는 아니다 애초에. 아무 조건 없이 그냥 보고 판단하는 태스크기 때문에 어려울 수 밖에 없다. Patch-GAN은 조금만 보고 해서 더 어렵다.그러게 블러리한게 창문이나 멀리있어서 발생한 효과일 수 있는데 부분만 보고 어캐함
→ 그래서 Novel Reconstruction GAN Loss!

두개를 동시에 받아서 뭐가 진짜고 뭐가 가짜인지 뱉게한다? 이거 좋넹
→
greatly enhances GAN stability
and performance. 뿐만 아니라 Disc가 일종의 robust reconstruction loss처럼 동작하게 한다.Multi-layer Noise Injection
VAE latent에 noise를 좀 다양하게 더한다 - 레이어별로
Uniform log-variance
latent의 channel이 클 때 몇개의 채널은 recon이 아니라 단순히 KL Loss를 낮추는데만 사용되는 경우가 있더라(평균 0, 분산 1이 되며) - 이건 무의미하다 이래서는 안됨
그래서 모든 채널의 분산이 같도록 했다? → KL Loss의 영향을 모든 채널에 고르게 분배 → 모든 채널이 objective에 관여
DWT Loss 사용?
고주파 성분을 더 보도록 하는 느낌인데 오디오처럼 되네ㅋㅋ 3D DWT 후 L1 loss

Cross attention이 MM-DiT보다 낫더라.
Image input 구현 방법 - Open Sora를 참고
원래는 모든 토큰에 적용되는 노이즈 레벨이 같다. 근데 약간 다르게 적용되게 했다.
그리고 인퍼런스

high resolution일수록 노이즈 쪽 타임스텝을 더 많이 샘플링해야한다?
결과 비교

다른 모델들이랑 비교한걸 보고싶긴하다
Share article
Subscribe to our newsletter