SORA 3 ——​模型准备、训练与出片


 本文是DataWhale开源项目Sora原理与技术实战的第三次打卡任务,简单了解视频生成模型训练所需时间和设备,利用现成开源项目进行尝试。



一.【模型前置工作】

以表格的形式呈现如下数据集信息:

数据集名称数据集描述数据集规模 采用技术 链接
VideoInstruct-100K高质量视频对话数据集,包括视频摘要、基于描述的问答和创意/生成性问题解答100,000个视频-对话对人工辅助和半自动注释魔搭社区
panda-70m包含70M高质量视频字幕对的大规模数据集,包括数据加载、视频分割和字幕模型70,000,000个视频-字幕对数据加载、视频分割、字幕模型魔搭社区
Youku-mPLUG从优酷网抓取的海量优质短视频内容数据集,包含约36TB视频和文本数据约36TB,包含千万级视频和文本数据从优酷网站抓取魔搭社区
MSR-VTT开放域视频字幕大规模数据集,由Amazon Mechanical Turk人工标注10,000个视频,每个有20个英文描述句子Amazon Mechanical Turk人工标注魔搭社区
Shot2Story视频文本基准和用于多镜头视频理解的可扩展代码,包含20k视频的详细长摘要和80k视频镜头的镜头字幕20k视频的详细长摘要,80k视频镜头的镜头字幕-魔搭社区
InternVid以视频为中心的大规模多模态数据集,包含超过700万个视频,持续近76万小时,产生2.34亿个视频剪辑,附4.1B个单词的详细描述超过700万个视频,持续近76万小时,产生2.34亿个视频剪辑,附4.1B个单词的详细描述-魔搭社区
webvid-10M从素材网站抓取的大型文本视频数据集1000万个视频文本对从素材网站抓取魔搭社区

二.【lite-sora复现】

1.环境设置

克隆Lite_Sora项目到本地

git clone https://github.com/modelscope/lite-sora

在项目文件夹内执行:

cd lite-sora
conda env create -f environment.yml

 在魔塔社区执行以上步骤时,有一定几率出错,暂不清楚原因,在本地则不会

Collecting package metadata (current_repodata.json): failed

UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel anaconda/pkgs/main <http://mirrors.aliyun.com/anaconda/pkgs/main>

The channel is not accessible or is invalid.

You will need to adjust your conda configuration to proceed.
Use `conda config --show channels` to view your configuration's current state,
and use `conda config --show-sources` to view config file locations.

下载对应模型文件到文件夹中

  • models/text_encoder/model.safetensors: Stable Diffusion XL's Text Encoder. download
  • models/denoising_model/model.safetensorsdownload
  • models/vae/model.safetensors: Stable Video Diffusion's VAE. download

注意:在魔塔社区执行以上步骤时可使用下述命令

cd  /mnt/workspace/lite-sora/models/text_encoder
wget https://hf-mirror.com/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/text_encoder_2/model.safetensors

cd  /mnt/workspace/lite-sora/models/denoising_model
wget https://hf-mirror.com/ECNU-CILab/lite-sora-v1-pixabay100/resolve/main/denoising_model/model.safetensors


cd  /mnt/workspace/lite-sora/models/vae
wget https://hf-mirror.com/stabilityai/stable-video-diffusion-img2vid-xt/resolve/main/vae/diffusion_pytorch_model.fp16.safetensors

2.再训练

下载视频数据集

git clone https://github.com/ECNU-CILAB/Pixabay100

在litesora路径内执行训练,注意lightning库

from litesora.data import TextVideoDataset  # 从litesora.data导入TextVideoDataset类
from litesora.models import SDXLTextEncoder2  # 从litesora.models导入SDXLTextEncoder2类
from litesora.trainers.v1 import LightningVideoDiT  # 从litesora.trainers.v1导入LightningVideoDiT类
import lightning as pl  # 导入lightning库并简写为pl
import torch  # 导入torch库

if __name__ == '__main__':
    # 初始化数据集和数据加载器
    dataset = TextVideoDataset("data/pixabay100", "data/pixabay100/metadata.json",
                               num_frames=64, height=64, width=64)  # 创建TextVideoDataset实例
    train_loader = torch.utils.data.DataLoader(dataset, shuffle=True, batch_size=1, num_workers=8)  # 创建训练数据加载器

    # 初始化模型
    model = LightningVideoDiT(learning_rate=1e-5)  # 创建LightningVideoDiT实例,设置学习率
    model.text_encoder.load_state_dict_from_diffusers("models/text_encoder/model.safetensors")  # 从diffusers加载文本编码器的预训练权重

    # 训练设置
    trainer = pl.Trainer(max_epochs=100000, accelerator="gpu", devices="auto", callbacks=[
        pl.pytorch.callbacks.ModelCheckpoint(save_top_k=-1)  # 配置训练过程中的模型保存策略
    ])
    trainer.fit(model=model, train_dataloaders=train_loader)  # 开始训练模型

tensorboard --logdir .

可用于查看训练过程的损失。

3.推理

from litesora.models import SDXLTextEncoder2, VideoDiT  # 从litesora.models导入SDXLTextEncoder2和VideoDiT模型
from litesora.pipelines import PixelVideoDiTPipeline  # 从litesora.pipelines导入PixelVideoDiTPipeline管道
from litesora.data import save_video  # 从litesora.data导入save_video函数用于保存视频
import torch  # 导入torch库

# 初始化模型
text_encoder = SDXLTextEncoder2.from_diffusers("models/text_encoder/model.safetensors")  # 从diffusers加载文本编码器模型
denoising_model = VideoDiT.from_pretrained("models/denoising_model/model.safetensors")  # 从预训练模型加载去噪视频模型

# 初始化管道
pipe = PixelVideoDiTPipeline(torch_dtype=torch.float16, device="cuda")  # 创建PixelVideoDiTPipeline实例,并设置为使用float16精度在CUDA上运行
pipe.fetch_models(text_encoder, denoising_model)  # 将加载的模型传递给管道

# 生成视频
prompt = "woman, flowers, plants, field, garden"  # 定义生成视频的文本提示
video = pipe(prompt=prompt, num_inference_steps=100)  # 使用管道生成视频,设置推理步骤数量为100

# 保存视频
# 将生成的视频保存为MP4文件,原始分辨率为64*64,此处将其放大到512*512
save_video(video, "output.mp4", upscale=8)
from litesora.models import SDVAEEncoder, SVDVAEDecoder  # 从litesora.models导入SDVAEEncoder和SVDVAEDecoder模型
from litesora.data import load_video, tensor2video, concat_video, save_video  # 导入处理视频的函数
import torch  # 导入torch库
from tqdm import tqdm  # 导入tqdm库用于显示进度条

# 加载视频帧
frames = load_video("data/pixabay100/videos/168572 (Original).mp4",
                    num_frames=1024, height=1024, width=1024, random_crop=False)  # 加载指定路径视频文件的帧
frames = frames.to(dtype=torch.float16, device="cpu")  # 将视频帧转换为float16类型,并放在CPU上

# 初始化模型
encoder = SDVAEEncoder.from_diffusers("models/vae/model.safetensors").to(dtype=torch.float16, device="cuda")  # 从diffusers加载并初始化SDVAEEncoder模型,并设置为float16精度在CUDA上运行
decoder = SVDVAEDecoder.from_diffusers("models/vae/model.safetensors").to(dtype=torch.float16, device="cuda")  # 从diffusers加载并初始化SVDVAEDecoder模型,并设置为float16精度在CUDA上运行

with torch.no_grad():  # 不计算梯度以节省内存和计算资源
    print(frames.shape)  # 打印加载的视频帧的形状
    latents = encoder.encode_video(frames, progress_bar=tqdm)  # 使用编码器编码视频帧,并显示进度条
    print(latents.shape)  # 打印编码后的潜在向量的形状
    decoded_frames = decoder.decode_video(latents, progress_bar=tqdm)  # 使用解码器解码潜在向量回视频帧,并显示进度条

video = tensor2video(concat_video([frames, decoded_frames]))  # 将原始视频帧和解码后的视频帧拼接,并转换为视频格式
save_video(video, "video.mp4", fps=24)  # 保存视频文件到指定路径,设置帧率为24fps

三.【结果评价】

项目团队在Pixabay100数据集上进行了模型训练,旨在验证训练流程的有效性。该模型以64*64像素分辨率进行训练和输出,尽管取得了高训练精度,但由于数据集规模有限,模型表现出过拟合现象,缺乏泛化能力。
如:

"woman, flowers, plants, field, garden"

而其他如简单的单个单词prompts,没有有意义画面。

"ocean"

"forest"

 "city"

"mountain"

【引用】

⁣⁡‬⁣⁡⁢‍⁡‬‍⁣⁤​⁤​⁣​‌⁣⁤​‬​‬​⁣​​​‬⁤⁢⁤‍​⁤‌‌‌‍​‍⁣‬⁣⁤Sora原理与技术实战 - 飞书云文档 (feishu.cn)

https://github.com/datawhalechina/sora-tutorial/blob/main/docs/chapter3/chapter3_1/chapter3_1.md

modelscope/lite-sora: An initiative to replicate Sora (github.com)

  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值