DiffusionDB
DiffusionDB 是首个大规模的文本到图像提示数据集。它包含由稳定扩散生成的1400 万张图像,使用的提示和超参数由真实用户指定。这种前所未有的规模和多样性为理解提示与生成模型之间的相互作用、检测深度伪造及设计人机交互工具以帮助用户更轻松地使用这些模型提供了令人兴奋的研究机会。
开始使用
DiffusionDB 可以在 🤗 Hugging Face 数据集 获取。
两个子集
DiffusionDB 提供两个子集(DiffusionDB 2M 和 DiffusionDB Large),以支持不同的需求。
子集 | 图片数量 | 独特提示数量 | 体积 | 图片目录 | 元数据表 |
---|---|---|---|---|---|
DiffusionDB 2M | 2M | 1.5M | 1.6TB | images/ | metadata.parquet |
DiffusionDB Large | 14M | 1.8M | 6.5TB | diffusiondb-large-part-1/ diffusiondb-large-part-2/ | metadata-large.parquet |
主要区别
- 两个子集具有相似的独特提示数量,但 DiffusionDB Large 的图像更多。DiffusionDB Large 是 DiffusionDB 2M 的超集。
- DiffusionDB 2M 中的图像存储为
png
格式;DiffusionDB Large 中的图像使用无损的webp
格式。
数据集结构
我们使用模块化的文件结构来分发 DiffusionDB。DiffusionDB 2M 中的 200 万张图像被分成 2000 个文件夹,每个文件夹包含 1000 张图像和一个 JSON 文件,该文件链接这 1000 张图像及其提示和超参数。类似地,DiffusionDB Large 中的 1400 万张图像分成 14000 个文件夹。
# DiffusionDB 2M
./
├── images
│ ├── part-000001
│ │ ├── 3bfcd9cf-26ea-4303-bbe1-b095853f5360.png
│ │ ├── 5f47c66c-51d4-4f2c-a872-a68518f44adb.png
│ │ ├── 66b428b9-55dc-4907-b116-55aaa887de30.png
│ │ ├── [...]
│ │ └── part-000001.json
│ ├── part-000002
│ ├── part-000003
│ ├── [...]
│ └── part-002000
└── metadata.parquet
# DiffusionDB Large
./
├── diffusiondb-large-part-1
│ ├── part-000001
│ │ ├── 0a8dc864-1616-4961-ac18-3fcdf76d3b08.webp
│ │ ├── 0a25cacb-5d91-4f27-b18a-bd423762f811.webp
│ │ ├── 0a52d584-4211-43a0-99ef-f5640ee2fc8c.webp
│ │ ├── [...]
│ │ └── part-000001.json
│ ├── part-000002
│ ├── part-000003
│ ├── [...]
│ └── part-010000
├── diffusiondb-large-part-2
│ ├── part-010001
│ │ ├── 0a68f671-3776-424c-91b6-c09a0dd6fc2d.webp
│ │ ├── 0a0756e9-1249-4fe2-a21a-12c43656c7a3.webp
│ │ ├── 0aa48f3d-f2d9-40a8-a800-c2c651ebba06.webp
│ │ ├── [...]
│ │ └── part-010001.json
│ ├── part-010002
│ ├── part-010003
│ ├── [...]
│ └── part-014000
└── metadata-large.parquet
这些子文件夹的名称为 part-0xxxxx
,每个图像都有一个由 UUID 版本 4 生成的唯一名称。子文件夹中的 JSON 文件与子文件夹具有相同的名称。每个图像是一个 PNG
文件 (DiffusionDB 2M) 或无损 WebP
文件 (DiffusionDB Large)。JSON 文件包含将图像文件名映射到其提示和超参数的键值对。例如,以下是 f3501e05-aef7-4225-a9e9-f516527408ac.png
的图像及其在 part-000001.json
中的键值对。
{
"f3501e05-aef7-4225-a9e9-f516527408ac.png": {
"p": "geodesic landscape, john chamberlain, christopher balaskas, tadao ando, 4 k, ",
"se": 38753269,
"c": 12.0,
"st": 50,
"sa": "k_lms"
},
}
数据字段为:
- 键:唯一图像名称
p
:提示se
:随机种子c
:CFG 量表(引导量表)st
:步数sa
:取样器
数据集元数据
为了方便您在不下载所有压缩文件的情况下轻松访问图像的提示和其他属性,我们为 DiffusionDB 2M 和 DiffusionDB Large 分别包括了两个元数据表 metadata.parquet
和 metadata-large.parquet
。
metadata.parquet
的形状是 (2000000, 13),metatable-large.parquet
的形状是 (14000000, 13)。两个表共享相同的模式,每行表示一张图像。我们以 Parquet 格式存储这些表,因为 Parquet 是基于列的:您可以高效地查询单个列(例如提示)而无需读取整个表。
以下是 metadata.parquet
中的三行随机行。
图像名称 | 提示 | part_id | seed | step | cfg | sampler | width | height | 用户名称 | 时间戳 | image_nsfw | prompt_nsfw |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0c46f719-1679-4c64-9ba9-f181e0eae811.png | a small liquid sculpture, corvette, viscous, reflective, digital art | 1050 | 2026845913 | 50 | 7 | 8 | 512 | 512 | c2f288a2ba9df65c38386ffaaf7749106fed29311835b63d578405db9dbcafdb | 2022-08-11 09:05:00+00:00 | 0.0845108 | 0.00383462 |
a00bdeaa-14eb-4f6c-a303-97732177eae9.png | human sculpture of lanky tall alien on a romantic date at italian restaurant with smiling woman, nice restaurant, photography, bokeh | 905 | 1183522603 | 50 | 10 | 8 | 512 | 768 | df778e253e6d32168eb22279a9776b3cde107cc82da05517dd6d114724918651 | 2022-08-19 17:55:00+00:00 | 0.692934 | 0.109437 |
6e5024ce-65ed-47f3-b296-edb2813e3c5b.png | portrait of barbaric spanish conquistador, symmetrical, by yoichi hatakenaka, studio ghibli and dan mumford | 286 | 1713292358 | 50 | 7 | 8 | 512 | 640 | 1c2e93cfb1430adbd956be9c690705fe295cbee7d9ac12de1953ce5e76d89906 | 2022-08-12 03:26:00+00:00 | 0.0773138 | 0.0249675 |
元数据模式
metadata.parquet
和 metatable-large.parquet
共享相同的模式。
列 | 类型 | 描述 |
---|---|---|
image_name | string | 图像 UUID 文件名。 |
prompt | string | 用来生成此图像的文本提示。 |
part_id | uint16 | 此图像的文件夹 ID。 |
seed | uint32 | 用来生成此图像的随机种子。 |
step | uint16 | 步数(超参数)。 |
cfg | float32 | 引导量表(超参数)。 |
sampler | uint8 | 取样器方法(超参数)。映射:{1: "ddim", 2: "plms", 3: "k_euler", 4: "k_euler_ancestral", 5: "k_heun", 6: "k_dpm_2", 7: "k_dpm_2_ancestral", 8: "k_lms", 9: "others"} . |
width | uint16 | 图像宽度。 |
height | uint16 | 图像高度。 |
user_name | string | 生成此图像的用户唯一 discord ID 的 SHA256 哈希。例如,xiaohk#3146 的哈希为 e285b7ef63be99e9107cecd79b280bde602f17e0ca8363cb7a0889b67f0b5ed0 。"deleted_account" 指已删除其帐户的用户。None 表示在我们第二次抓取时该图像已被删除。 |
timestamp | timestamp | 生成此图像时的 UTC 时间戳。None 表示在我们第二次抓取时该图像已被删除。请注意,对于具有相同提示、超参数、宽度和高度的重复图像,时间戳并不准确。 |
image_nsfw | float32 | 图像被认为不适宜公众查看的可能性。分数由 LAION 的先进 NSFW 检测器 预测(范围为 0 到 1)。2.0 的分数表示该图像已被标记为 NSFW,并且已被 Stable Diffusion 模糊。 |
prompt_nsfw | float32 | 提示被认为不适宜公众查看的可能性。分数由图书馆 Detoxicy 预测。每个分数代表 toxicity 和 sexual_explicit 的最大值(范围为 0 到 1)。 |
警告 虽然Stable Diffusion模型有一个NSFW过滤器,可以自动模糊用户生成的NSFW图像,但这个NSFW过滤器并不完美—DiffusionDB仍包含一些NSFW图像。因此,我们使用最先进的模型计算并提供图像和提示的NSFW分数。这些分数的分布如下图所示。在使用DiffusionDB进行项目之前,请决定一个适当的NSFW分数阈值以过滤掉NSFW图像。
加载DiffusionDB
DiffusionDB很大(1.6TB或6.5TB)!然而,通过我们的模块化文件结构,您可以轻松加载所需数量的图像及其提示和超参数。在example-loading.ipynb
笔记本中,我们演示了加载DiffusionDB子集的三种方法。以下是简短的总结。
方法1:使用Hugging Face Datasets Loader
您可以使用Hugging Face Datasets
库轻松加载DiffusionDB中的提示和图像。我们根据实例数预定义了16个DiffusionDB子集(配置)。您可以在数据集预览中查看所有子集。
注意 要使用Datasets Loader,您还需要安装
Pillow
(pip install Pillow
)
import numpy as np
from datasets import load_dataset
# 使用`large_random_1k`子集加载数据集
dataset = load_dataset('poloclub/diffusiondb', 'large_random_1k')
方法2:使用一个下载脚本
此仓库包含一个Python下载器download.py
,允许您下载和加载DiffusionDB。您可以从命令行使用它。以下是加载DiffusionDB子集的示例。
使用/示例
该脚本使用如下命令行参数运行:
-i
--index
- 要下载的文件或文件范围的下界,如果-r
也设置了。-r
--range
- 如果设置了-i
,则为要下载的文件范围的上界。-o
--output
- 自定义输出目录的名称。如果未设置,默认是当前目录。-z
--unzip
- 下载后解压文件。-l
--large
- 从Diffusion DBLarge下载。默认是Diffusion DB 2M。
下载单个文件
要下载的特定文件作为HuggingFace文件结尾的数字提供。脚本将自动填充数字并生成URL。
python download.py -i 23
下载一组文件
要下载的文件集的上下界分别由-i
和-r
标志设置。
python download.py -i 1 -r 2000
注意,此范围将下载整个数据集。脚本会要求您确认下载目的地有1.7TB的存储空间。
下载到特定目录
脚本默认定位到数据集part
.zip文件的images/
。如果您希望移动下载位置,您应该移动这些文件或使用符号链接。
python download.py -i 1 -r 2000 -o /home/$USER/datahoarding/etc
再次提示,脚本在下载时会自动在目录和文件之间添加/
。
设置文件在下载后解压
脚本设置为在所有文件下载完成后解压,因为在某些情况下,这两个过程都可能耗时较长。
python download.py -i 1 -r 2000 -z
方法3:使用metadata.parquet
(仅文本)
如果您的任务不需要图像,那么您可以轻松访问metadata.parquet
表中的所有200万个提示和超参数。
from urllib.request import urlretrieve
import pandas as pd
# 下载parquet表
table_url = f'https://huggingface.co/datasets/poloclub/diffusiondb/resolve/main/metadata.parquet'
urlretrieve(table_url, 'metadata.parquet')
# 使用Pandas读取表
metadata_df = pd.read_parquet('metadata.parquet')
数据集创建
我们从官方Stable Diffusion Discord服务器收集了所有图像。详情请阅读我们的研究论文。代码包含在./scripts/
中。
数据删除
如果您在DiffusionDB中发现任何有害图像或提示,您可以使用这个Google表单报告它们。同样,如果您是此数据集中包含的图像的创作者,并希望从DiffusionDB中删除您的图像,也可以使用同一表单告知我们。我们将密切监控此表单并定期更新DiffusionDB。
致谢
DiffusionDB由Jay Wang,Evan Montoya,David Munechika,Alex Yang,Ben Hoover,Polo Chau创建。
引用
@article{wangDiffusionDBLargescalePrompt2022,
title = "{{DiffusionDB}}: {{A}} Large-Scale Prompt Gallery Dataset for Text-to-Image Generative Models",
author = {Wang, Zijie J. and Montoya, Evan and Munechika, David and Yang, Haoyang and Hoover, Benjamin and Chau, Duen Horng},
year = {2022},
journal = {arXiv:2210.14896 [cs]},
url = {https://arxiv.org/abs/2210.14896}
}
许可
DiffusionDB数据集在CC0 1.0许可下可用。本仓库中的Python代码在MIT许可下可用。