Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CogVideoX-5B-I2V生成更長秒數影片問題 #680

Open
Labibibidu opened this issue Jan 21, 2025 · 12 comments
Open

CogVideoX-5B-I2V生成更長秒數影片問題 #680

Labibibidu opened this issue Jan 21, 2025 · 12 comments
Assignees

Comments

@Labibibidu
Copy link

您好,我想要嘗試使用CogVideoX-5B-I2V模型生成更長的影片(6秒以上),但我修改生成的frame數,例如從49frame變成65frame,生成的影片就都會變類似下圖崩潰的情況。

Image

我看到您們新開發的CogVideoX1.5-5B-I2V模型可以生成到10秒的影片,但對於這領域還不太熟悉看不太懂詳細的Code,所以想要請問這中間是怎麼做到的,是用許多10秒的影片去對模型做finetune嗎,還是對transformer或其他架構有做甚麼調整,又或是使用了其他方法。

非常感謝!!

@zRzRzRzRzRzRzR zRzRzRzRzRzRzR self-assigned this Jan 21, 2025
@zRzRzRzRzRzRzR
Copy link
Member

对于1代模型,只能生成6秒,而且,你需要在 num_frames 参数设置成8N + 1 ,对于6秒是49.

@Labibibidu
Copy link
Author

這點我理解,但我想要請問的是1代跟1.5代之間是做了什麼處理,讓1.5代模型可以做到生成10秒的影片,謝謝!

@zRzRzRzRzRzRzR
Copy link
Member

这两个模型训练的时间长度不一样,模型结构一样的,所以1.5模型10秒模型成本巨大,推理一次要40分钟。
两个模型结构几乎一样

@Wang-pengfei
Copy link

对于1代模型,只能生成6秒,而且,你需要在 num_frames 参数设置成8N + 1 ,对于6秒是49.

请问一下这里为什么是8N + 1,而我看之前版本的代码似乎要求是4N + 1 ,这里做了什么改进吗

@zRzRzRzRzRzRzR
Copy link
Member

1.0是8N + 1。比如49帧
1.5是16N +1 。比如81帧
这在readme有提到。
你提到的4N + 1 应该是将要模型从8N + 1压缩到latent。比如49帧 要 / 4 + 1 得到的13的latent的shape

@Wang-pengfei
Copy link

1.0是8N + 1。比如49帧 1.5是16N +1。比如81帧 这在readme里有提到。 你提到的4N + 1应该要把模型从8N + 1压缩到潜在的。比如49帧/4 + 1 得到13的潜在形状

我想请教一下为什么需要+1。我想把cogvideo用于我的任务中,在我的任务里,我有48帧图像,他们呢代表90度的视角变动,每一帧是均匀转动的,有没有不需要+1的处理方式?

@zRzRzRzRzRzRzR
Copy link
Member

  • 1 是因为VAE的结构是将 8N + 1 的结构编码成 /4 + 1 后的形状。
    按照现在代码处理的方式,你准备8N的数据集是能微调的,会pad最后一帧。变成8N + 1。这时候基本不影响微调结果。

@Wang-pengfei
Copy link

如果我强制不pad最后一帧是不可行的对吗

@Wang-pengfei
Copy link

  • 1 是因为VAE的结构是将 8N + 1 的结构编码成 /4 + 1 后的形状。
    按照现在代码处理的方式,你准备8N的数据集是能微调的,会pad最后一帧。变成8N + 1。这时候基本不影响微调结果。

我再请教一个问题, cogvideo的VAE可以支持更长视频的编解码吗,比如我一次性编解码48*4帧连续的覆盖360度的视频,但是训练过程中分成4组48进行Unet的训练

@zRzRzRzRzRzRzR
Copy link
Member

这样确实没有试过,工程上这不会报错,算法上,我们没有验证过这样的正确性。

@JaywongWang
Copy link

  • 1 是因为VAE的结构是将 8N + 1 的结构编码成 /4 + 1 后的形状。
    按照现在代码处理的方式,你准备8N的数据集是能微调的,会pad最后一帧。变成8N + 1。这时候基本不影响微调结果。

if patch_size_t is not None:
ncopy = latent.shape[2] % patch_size_t
# Copy the first frame ncopy times to match patch_size_t
first_frame = latent[:, :, :1, :, :] # Get first frame [B, C, 1, H, W]
latent = torch.cat([first_frame.repeat(1, 1, ncopy, 1, 1), latent], dim=2)
assert latent.shape[2] % patch_size_t == 0

看代码pad的不是首帧吗?
@zRzRzRzRzRzRzR

@JaywongWang
Copy link

1.0是8N + 1。比如49帧 1.5是16N +1 。比如81帧 这在readme有提到。 你提到的4N + 1 应该是将要模型从8N + 1压缩到latent。比如49帧 要 / 4 + 1 得到的13的latent的shape

@zRzRzRzRzRzRzR 另外,1.5版为什么需要16N+1?latent是4倍时间压缩,transformer的patch_size_t是2,算起来应该是8N + 1,可以解释一下为什么是16N + 1吗?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants