干爆 Sora ,Open-Sora 横空出世普渡众生!

Sora 最新动态

Sora 最近发布了一条 Blog ,里面介绍了最新的进展,团队声称已经从创意社区获得了很多宝贵的反馈建议,并且与视觉艺术家、设计师、创意总监和电影制作人等合作,将内测的一些创意视频公布了出来,大家可以欣赏一下。

但是仍然是只能看,不能用!

Open-Sora

Sora 是等不到了,但是难不住我们开源社区的同志,这不是,开源项目 Open-Sora 横空出世,Open-Sora 实现了先进文生视频技术,并且将源代码、预训练模型、数据处理过程、安装和推理说明、训练过程都进行了详细的介绍,可谓是功德无量。 2024.03.18 发布了 Open-Sora 1.0 ,支持 2s512x512 分辨率的文生视频,目前该项目仍然是早期阶段,还在积极的开发过程中。Open-Sora 为扩散模型提供了高速训练框架,在 64 帧 512x512 视频上训练时,可以实现 55% 的训练速度加速,并且该框架支持训练 1 分钟 1080p 视频

按照现在技术这么快的发展速度,我觉得如果 Sora 再继续狗着不开放,那应该最后免不了被 Open-Sora 挤掉,成为束之高阁得历史展品。下面是 Open-Sora 生成得夜景马路得短视频,我们先睹为快。

项目整体目录结构

rust 复制代码
Open-Sora
├── README.md
├── docs
│   ├── acceleration.md            -> Acceleration & Speed benchmark
│   ├── command.md                 -> Commands for training & inference
│   ├── datasets.md                -> Datasets used in this project
│   ├── structure.md               -> This file
│   └── report_v1.md               -> Report for Open-Sora v1
├── scripts
│   ├── train.py                   -> diffusion training script
│   └── inference.py               -> Report for Open-Sora v1
├── configs                        -> Configs for training & inference
├── opensora
│   ├── __init__.py
│   ├── registry.py                -> Registry helper
│   ├── acceleration               -> Acceleration related code
│   ├── dataset                    -> Dataset related code
│   ├── models
│   │   ├── layers                 -> Common layers
│   │   ├── vae                    -> VAE as image encoder
│   │   ├── text_encoder           -> Text encoder
│   │   │   ├── classes.py         -> Class id encoder (inference only)
│   │   │   ├── clip.py            -> CLIP encoder
│   │   │   └── t5.py              -> T5 encoder
│   │   ├── dit
│   │   ├── latte
│   │   ├── pixart
│   │   └── stdit                  -> Our STDiT related code
│   ├── schedulers                 -> Diffusion schedulers
│   │   ├── iddpm                  -> IDDPM for training and inference
│   │   └── dpms                   -> DPM-Solver for fast inference
│   └── utils
└── tools                          -> Tools for data processing and more

训练和推理的配置目录如下:

rust 复制代码
Open-Sora
└── configs                        -> Configs for training & inference
    ├── opensora                   -> STDiT related configs
    │   ├── inference
    │   │   ├── 16x256x256.py      -> Sample videos 16 frames 256x256
    │   │   ├── 16x512x512.py      -> Sample videos 16 frames 512x512
    │   │   └── 64x512x512.py      -> Sample videos 64 frames 512x512
    │   └── train
    │       ├── 16x256x256.py      -> Train on videos 16 frames 256x256
    │       ├── 16x256x256.py      -> Train on videos 16 frames 256x256
    │       └── 64x512x512.py      -> Train on videos 64 frames 512x512
    ├── dit                        -> DiT related configs
    │   ├── inference
    │   │   ├── 1x256x256-class.py -> Sample images with ckpts from DiT
    │   │   ├── 1x256x256.py       -> Sample images with clip condition
    │   │   └── 16x256x256.py      -> Sample videos
    │   └── train
    │       ├── 1x256x256.py       -> Train on images with clip condition
    │       └── 16x256x256.py      -> Train on videos
    ├── latte                      -> Latte related configs
    └── pixart                     -> PixArt related configs

模型

本项目还不忘 diss 了 openai 的"闭源"精神,为了让 AI 更加开放,Open-Sora 致力于打造 Sora 的开源版本,并在报告中详细描述了首次尝试训练基于 Transformer 的视频扩散模型,主要内容如下:

  • 使用 Stability-AI 的 2D VAE
  • 视频训练涉及大量的 token ,考虑到 24 帧1 分钟视频共有 1440 帧。 通过 VAE 的 4 倍下采样和 patch 大小的 2 倍下采样 ,一共约有有 1440x1024≈1.5M token 。 计算 150 万个 token 的全注意力会导致巨大的计算成本,因此改用 spatial-temporal attention 来降低 Latte (Latent Diffusion Transformer for Video Generation)的成本。
  • 下图是经过测试的四种模型,出于效率考虑选择 STDiT(Sequential),具体的报告可以看这里。
  • 本项目基于有效训练的高质量文生图模型框架 PixArt-α 为底座,它具有 T5 条件DiT 结构。用 PixArt-α 初始化模型,并将插入的时间注意力的投影层初始化为零。这种初始化保留了模型在开始时生成图像的能力,与同样使用空间-时间注意力机制的 Latte 模型相比,STDiT 可以更好的利用已经预训练好的图像 DiT 的权重,从而在视频数据上继续训练。插入的 attention 使参数数量从 580M 增加到 724M 。具体来说整个架构包括一个预训练好的 VAE,一个文本编码器和一个利用空间-时间注意力机制的 STDiT (Spatial Temporal Diffusion Transformer) 模型。其中 STDiT 每层的结构如下图所示。它采用串行的方式在二维的空间注意力模块上叠加一维的时间注意力模块,用于建模时序关系。在时间注意力模块之后,交叉注意力模块用于对齐文本的语意。与全注意力机制相比,这样的结构大大降低了训练和推理开销。
  • 借鉴 PixArt-α 和 Stable Video Diffusion 的成功经验,主要分为三个阶段,第一阶段是进行图像预训练,初始化一个图像生成模型。第二阶段是在已经构建的大规模视频数据集上进行视频预训练,学习运动表征。第三阶段是在一个小规模的高质量视频数据集上进行微调。本项目采用渐进式训练策略:在 366K 预训练数据集上训练 16x256x256 分辨率,然后在 20K 数据集上训练 16x256x256 、16x512x512 和 64x512x512 三种分辨率。 使用 scaled position embedding ,能够该策略大大降低了计算成本。
  • 尝试在 DiT 中使用 3D 补丁嵌入器,目前在 16 帧训练中每 3 帧采样一次,在 64 帧训练中每 2 帧采样一次。
  • 本项目开放出来 3 个预训练模型,分辨有 512×512256×256 ,其中标识 HQ 表示使用的是高质量数据。但是需要注意的是,这些模型是在有限的预算下进行训练的。 质量和文本对齐相对较差。 该模型表现不佳,尤其是在生成人的样子,并且无法遵循详细的指令。开发人员仍然在努力提高质量和文本对齐方式。
Resolution Data iterations Batch Size GPU days (H800) URL
16×512×512 20K HQ 20k 2×64 35 🔗
16×256×256 20K HQ 24k 8×64 45 🔗
16×256×256 366K 80k 8×64 117 🔗

数据

高质量的数据是高质量模型的关键。本项目使用的数据集如下,不仅提供了代码,还提供了处理视频数据的思路。

数据集准备

训练数据应以 CSV 文件形式提供,格式如下:

bash 复制代码
/absolute/path/to/image1.jpg,标题 1,帧数
/absolute/path/to/image2.jpg,标题2,帧数

本项目中用到的数据集有 HD-VG-130MInter4kPexels.com,后续还会视情况考虑使用以下数据集。

Name Size Description
Panda-70M 70M videos High quality video-text pairs
WebVid-10M 10M videos Low quality
InternVid-10M-FLT 10M videos
EGO4D 3670 hours
OpenDV-YouTube 1700 hours
VidProM 6.69M videos

将视频分割成片段

来自互联网的原始视频对于训练来说还是太长了, 因此本项目给出脚本检测原始视频中的场景,并根据场景将它们分割成短片,可以安装下面的包来并运行 scene_detect.py 来进行高效处理,需要注意的是运行代码的时候要指定自己的数据集路径。

pip install sceneDetect moviepy opencv-python 

生成视频字幕

人工为视频添加描述既昂贵又耗时,所以本项目采用强大的 image captioning 模型来生成视频字幕。虽然 GPT-4V 表现更好,但其 20s/sample 的速度太慢了,而是改为了用 LLaVA 实现 3s/sample 的速度,并且生成质量相当。LLaVAMMMU 中第二好的开源模型,可以接受任何分辨率。

如果使用GPT-4V 模型,可以运行以下命令为使用 GPT-4V 的视频生成字幕,每个 3 帧的视频成本约为 0.01 美元,输出结果是带有路径和标题描述的 CSV 文件。

lua 复制代码
python -m tools.caption.caption_gpt4 FOLDER_WITH_VIDEOS output.csv --key $OPENAI_API_KEY

如果使用 LLaVA 模型,要先按照官方说明安装 LLaVA ,本项目使用的是 liuhaotian/llava-v1.6-34b 模型来制作视频描述,然后运行以下命令可以获得带有路径和标题的 CSV 文件。

ini 复制代码
CUDA_VISIBLE_DEVICES=0,1 python -m tools.caption.caption_llava samples output.csv

其他

至于安装部署说明、训练指令说明、推理指令说明等内容请详见 github 项目介绍。

效果展示

参考

相关推荐
矢量赛奇几秒前
比ChatGPT更酷的AI工具
人工智能·ai·ai写作·视频
KuaFuAI8 分钟前
微软推出的AI无代码编程微应用平台GitHub Spark和国产AI原生无代码工具CodeFlying比到底咋样?
人工智能·github·aigc·ai编程·codeflying·github spark·自然语言开发软件
Make_magic18 分钟前
Git学习教程(更新中)
大数据·人工智能·git·elasticsearch·计算机视觉
shelly聊AI22 分钟前
语音识别原理:AI 是如何听懂人类声音的
人工智能·语音识别
源于花海25 分钟前
论文学习(四) | 基于数据驱动的锂离子电池健康状态估计和剩余使用寿命预测
论文阅读·人工智能·学习·论文笔记
雷龙发展:Leah25 分钟前
离线语音识别自定义功能怎么用?
人工智能·音频·语音识别·信号处理·模块测试
4v1d29 分钟前
边缘计算的学习
人工智能·学习·边缘计算
风之馨技术录33 分钟前
智谱AI清影升级:引领AI视频进入音效新时代
人工智能·音视频
sniper_fandc43 分钟前
深度学习基础—Seq2Seq模型
人工智能·深度学习
goomind1 小时前
深度学习模型评价指标介绍
人工智能·python·深度学习·计算机视觉