Open-Sora 如何为自定义视频数据集生成训练所需的元数据?

发布时间:2026/9/12 4:18:23
Open-Sora 如何为自定义视频数据集生成训练所需的元数据?
Open-Sora 如何为自定义视频数据集生成训练所需的元数据【免费下载链接】Open-SoraOpen-Sora: Democratizing Efficient Video Production for All项目地址: https://gitcode.com/GitHub_Trending/op/Open-Sora在 Open-Sora 中用自己的视频数据集训练或微调模型时光有一个记录视频路径和文本描述的 csv 是不够的。训练配置要求数据集至少包含path,text,num_frames,height,width,aspect_ratio,resolution,fps这几列也就是每个视频的帧数、宽高、宽高比、分辨率和帧率。这篇文档说明如何使用仓库自带的 scripts/cnv/meta.py 脚本从自定义 csv 出发逐条读取视频文件并生成这些元数据列最终得到一个可以直接交给训练命令的数据集文件。完整流程见 docs/train.md。准备输入数据集Open-Sora 的数据集以csv或parquet文件呈现。meta.py脚本的输入是一个 csv 文件脚本内部通过pd.read_csv读取并只使用其中的path列逐行读取视频见 scripts/cnv/meta.py 中的df pd.read_csv(input_path)与result apply(df[path], get_video_info)。因此自定义数据集的 csv 至少需要path一列指向本机可读的视频文件文档示例中的pexels_45k.csv就是“contains only path and text”的结构即路径加文本两列。text列本身不会被脚本修改会原样保留到输出文件中。环境方面除主 README 中的安装步骤外docs/train.md 要求额外安装pip install pandarallel # for parallel processingpandarallel用于--num_workers非 0 时的并行处理。运行元数据生成脚本脚本接受三个参数--input输入 csv必填、--output输出 csv必填、--num_workers进程数整数默认None。文档给出了两种调用方式这里把输入/输出路径替换为你的数据集 csv下面的datasets/your_dataset.csv、datasets/your_dataset_nec.csv为占位需替换成你实际的 csv 路径# single process python scripts/cnv/meta.py --input datasets/your_dataset.csv --output datasets/your_dataset_nec.csv --num_workers 0 # parallel process python scripts/cnv/meta.py --input datasets/your_dataset.csv --output datasets/your_dataset_nec.csv --num_workers 64--num_workers 0走单进程progress_apply传入非 0 数值如 64时会调用pandarallel.initialize(progress_barTrue, nb_workersnum_workers)并行处理。文档同时给出了 pexels 数据集上的示例命令输入为datasets/pexels_45k.csv、输出为datasets/pexels_45k_nec.csv可直接对照。对每个视频路径脚本通过torchvision.io.video.read_video读取视频计算num_frames、height、width、fps四舍五入到 3 位小数、aspect_ratio height / width、resolution height * width然后把这 6 列追加到原 DataFrame 上写入输出 csv。数据集视频数量越多耗时越长文档明确说明这一过程“may take a while”并且它是针对任意宽高比、分辨率和帧数训练所必需的步骤。验证输出是否满足训练要求生成完成后检查输出 csv 是否同时包含训练所需的 8 列path,text,num_frames,height,width,aspect_ratio,resolution,fps。这是 docs/train.md 中给出的自定义数据集最低列要求meta.py的输出正好是在输入列基础上追加了 6 个元数据列因此只要输入 csv 自带path和text输出即满足要求。可以用下面的命令快速确认列名输出应包含上述 8 个列名python -c import pandas as pd; print(list(pd.read_csv(datasets/your_dataset_nec.csv).columns))两个来自脚本实现、值得留意的边界若视频的width为 0该行的aspect_ratio会被记为NaNfps以秒为单位读取并保留 3 位小数。将元数据文件接入训练验证无误后通过--dataset.data-path把生成的 csv 传给训练命令即可。以 256px 分辨率的 stage1 配置为例文档中的示例torchrun --nproc_per_node 8 scripts/diffusion/train.py configs/diffusion/train/stage1.py --dataset.data-path datasets/your_dataset_nec.csv如果希望从 Open-Sora v2 微调而不是从头训练在命令后追加--model.from_pretrained ckpts/Open_Sora_v2.safetensors权重按 README 的 Model Download 部分下载到ckpts。大数据集的可选分支当数据集非常大、单个csv甚至parquet装不进内存时文档提供了分片脚本 scripts/cnv/shard.pypython scripts/cnv/shard.py /path/to/dataset.parquet该命令把dataset.parquet拆分到同名目录下的多个00001.parquet等分片文件注意此脚本面向 parquet 文件且会移除num_frames,height,width,aspect_ratio,fps,resolution这些元数据列只保留其余列。随后训练时加--dataset.memory_efficient True按分片加载数据集。这一分支仅在单文件过大时才有必要使用。小结与限制这条路径的边界很明确输入必须是 csv 且包含path列视频文件路径必须在本机可读处理时长与视频数量成正比生成物是一个追加了 6 个元数据列的 csv列名满足path,text,num_frames,height,width,aspect_ratio,resolution,fps即可接入scripts/diffusion/train.py的训练命令。除此之外训练阶段的其他配置bucket_config、多机多卡等在 docs/train.md 的 Training 章节中另行说明。【免费下载链接】Open-SoraOpen-Sora: Democratizing Efficient Video Production for All项目地址: https://gitcode.com/GitHub_Trending/op/Open-Sora创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考