尧图精选

Diffusers 训练数据集构建实战:本地 ImageFolder 与 Hub 数据集两种方案全解析

🕒 发布时间:2026/9/10 9:43:03 📁 来源:尧图网络
Diffusers 训练数据集构建实战本地 ImageFolder 与 Hub 数据集两种方案全解析【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusers本篇指南基于 Diffusers 官方文档 Create a dataset for training 展开讲清楚如何为扩散模型微调准备训练数据你可以选择把本地图片目录直接传给训练脚本的--train_data_dir参数也可以用 Datasets 库把数据集上传到 Hub 后通过--dataset_name参数引用。读完本文你将掌握数据集目录结构的组织方式、load_dataset(imagefolder)的各种加载姿势以及两条路径在 train_text_to_image.py 和 train_unconditional.py 中的真实数据加载链路。数据集结构取决于训练任务Diffusers 支持多种训练范式不同范式对数据集的要求不同。官方文档给出了两种最基本的数据集组织形态无监督unconditional图像生成最简单只需一个图片目录目录下直接存放图片文件文生图text-to-image生成需要图片目录加上一个存放对应文本描述captions的文本文件如metadata.jsonl让每张图片与它的描述文字关联起来。也就是说数据集的骨架由你要训练的任务决定纯图片目录服务于无监督训练图片 文本描述对服务于条件生成训练。方案一把本地文件夹直接交给训练脚本目录结构要求以无监督生成为例你的数据目录结构应当形如data_dir/xxx.png data_dir/xxy.png data_dir/[...]/xxz.png即图片可以平铺在data_dir下也可以放在其子目录中。训练脚本会调用 Datasets 的ImageFolderbuilder 自动把文件夹构建成数据集你不需要手动写任何数据读取代码。从源码看这一行为发生在 train_unconditional.pydataset load_dataset(imagefolder, data_dirargs.train_data_dir, cache_dirargs.cache_dir, splittrain)--train_data_dir参数的帮助文本train_unconditional.py明确要求文件夹内容遵循ImageFolder规范对于文生图脚本 train_text_to_image.py帮助文本进一步指出该目录下必须存在一个metadata.jsonl文件来提供图片的文本描述且当--dataset_name已指定时该参数会被忽略。启动训练把数据集目录路径传给--train_data_dir即可开始训练例如摘自 unconditional_image_generation/README.mdaccelerate launch train_unconditional.py \ --train_data_dir path-to-train-directory \ other-arguments加载之后脚本会对数据集挂上一套预处理 transform。以 train_unconditional.py 为例流程是按--resolution做 Resize默认 64根据--center_crop/--random_flip选择 CenterCrop 或 RandomCrop、是否水平翻转随后ToTensor并用Normalize([0.5], [0.5])把像素值归一化到[-1, 1]区间最后通过dataset.set_transform(transform_images)在 DataLoader 取样时动态应用。方案二上传数据集到 Hub 后按名称引用用 ImageFolder 特性构建数据集对于文生图这类带文本描述的任务推荐用 Datasets 的ImageFolder特性来构建数据集——它会生成一个包含 PIL 编码图像的image列。构建时可以通过data_dir或data_files参数指定数据位置。其中data_files支持把具体文件映射到train、test等数据集 split也支持 tar、gzip、zip、xz、rar、zstd 等压缩格式from datasets import load_dataset # example 1: local folder dataset load_dataset(imagefolder, data_dirpath_to_your_folder) # example 2: local files (supported formats are tar, gzip, zip, xz, rar, zstd) dataset load_dataset(imagefolder, data_filespath_to_zip_file) # example 3: remote files (supported formats are tar, gzip, zip, xz, rar, zstd) dataset load_dataset( imagefolder, data_fileshttps://download.microsoft.com/download/3/E/1/3E1C3F21-ECDB-4869-8368-6DEBA77B919F/kagglecatsanddogs_3367a.zip, ) # example 4: providing several splits dataset load_dataset( imagefolder, data_files{train: [path/to/file1, path/to/file2], test: [path/to/file3, path/to/file4]} )上传到 Hub构建好之后用push_to_hub方法上传前提是在终端执行过hf auth login完成认证# assuming you have ran the hf auth login command in a terminal dataset.push_to_hub(name_of_your_dataset) # if you want to push to a private repo, simply pass privateTrue: dataset.push_to_hub(name_of_your_dataset, privateTrue)私有仓库同样受支持只需传入privateTrue。用 --dataset_name 启动训练数据集上传后把仓库 ID 传给--dataset_name参数即可在训练时自动下载并使用accelerate launch --mixed_precisionfp16 train_text_to_image.py \ --pretrained_model_name_or_pathstable-diffusion-v1-5/stable-diffusion-v1-5 \ --dataset_namename_of_your_dataset \ other-arguments从源码看--dataset_name的取值范围比Hub 仓库 ID更宽train_text_to_image.py 的帮助文本说明它既可以是 HuggingFace Hub 上的数据集名可以是自己的、甚至私有的也可以是指向本地文件系统数据集副本的路径或指向 Datasets 库能理解的文件夹。源码深读两条加载路径如何分流理解训练脚本内部的数据加载逻辑有助于排查数据集相关问题。train_text_to_image.py 中的分流逻辑如下if args.dataset_name is not None: # Downloading and loading a dataset from the hub. dataset load_dataset( args.dataset_name, args.dataset_config_name, cache_dirargs.cache_dir, data_dirargs.train_data_dir, ) else: data_files {} if args.train_data_dir is not None: data_files[train] os.path.join(args.train_data_dir, **) dataset load_dataset( imagefolder, data_filesdata_files, cache_dirargs.cache_dir, )可以确认几个关键行为--dataset_name优先级更高一旦指定--train_data_dir会被作为该数据集的data_dir子目录传入而不是独立的图片目录本地路径走 imagefolder未指定--dataset_name时脚本把--train_data_dir下所有内容**通配映射到trainsplit再交给imagefolderbuilder 解析两者都没给会直接报错train_text_to_image.py 处有if args.dataset_name is None and args.train_data_dir is None的参数校验无监督脚本 train_unconditional.py 同样如此。列名的确定与校验数据集加载后脚本还要定位图片列和文本列。train_text_to_image.py 内置了一个映射表处理知名数据集DATASET_NAME_MAPPING { lambdalabs/naruto-blip-captions: (image, text), }其后的处理逻辑第 761-778 行如果你显式传了--image_column/--caption_column默认分别是image和text且该列名不存在于数据集列中脚本会抛出ValueError并列出所有可用列名——这是数据集列名不匹配时报错信息的主要来源。若未显式指定则依次回退到DATASET_NAME_MAPPING和按列顺序取第一、第二列。文本描述的 tokenization 细节对于文生图训练tokenize_captions 函数处理 caption 列字符串直接使用如果某张图片对应多条描述list训练时会随机抽取一条非训练场景则取第一条。图片侧则统一经过Resize → (Center/Random)Crop → 可选 RandomHorizontalFlip → ToTensor → Normalize([0.5], [0.5])的 transform 链第 807-815 行--resolution默认 512。测试用例中的真实用法参考如果你想要一个可直接运行的最小参数组合仓库的示例测试 test_unconditional.py 展示了用 Hub 上的 dummy 数据集做冒烟训练的方式examples/unconditional_image_generation/train_unconditional.py \ --dataset_name hf-internal-testing/dummy_image_class_data \ --model_config_name_or_path diffusers/ddpm_dummy \ --resolution 64 \ --train_batch_size 2 \ --num_epochs 1它验证了--dataset_name路径训练完成后输出目录中应生成unet/diffusion_pytorch_model.safetensors与scheduler/scheduler_config.json可作为数据集是否被正确加载并跑通训练的验收标准。前置准备与依赖安装按 unconditional_image_generation/README.md 的说明运行示例训练脚本前建议从源码安装 diffusers 并保持更新再安装示例目录的依赖并初始化 Accelerate 环境pip install . # 在 diffusers 源码根目录下 cd examples/unconditional_image_generation pip install -r requirements.txt accelerate config下一步数据集就绪后就可以按数据所在位置选择接入方式本地数据集传--train_data_dirHub 上的数据集传--dataset_name。随后可以参考官方教程继续训练——无监督生成见 Unconditional diffusion training文生图微调见 Text-to-image training。【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →