
DifusãoDB é o primeiro conjunto de dados de prompt de imagem em larga escala. Ele contém 14 milhões de imagens geradas por difusão estável usando prompts e hiperparâmetros especificados por usuários reais. A escala e a diversidade sem precedentes desse conjunto de dados acionados pelo ser humano oferecem oportunidades de pesquisa interessantes para entender a interação entre prompts e modelos generativos, detectar os deepfakes e projetar ferramentas de interação humano-AI para ajudar os usuários a usar mais facilmente esses modelos.
DifusãoDB está disponível? Abraçando conjuntos de dados de rosto.
O DiffusionDB fornece dois subconjuntos (DiffusionDB 2M e DiffusionDB Large) para suportar diferentes necessidades.
| Subconjunto | Número de imagens | Número de avisos exclusivos | Tamanho | Diretório de imagem | Tabela de metadados |
|---|---|---|---|---|---|
| DifusãoDB 2M | 2m | 1,5m | 1.6TB | images/ | metadata.parquet |
| DifusãoDB grande | 14m | 1,8m | 6.5TB | diffusiondb-large-part-1/ diffusiondb-large-part-2/ | metadata-large.parquet |
png ; Imagens no difusãoDB Large Use um formato webp sem perdas. Usamos uma estrutura de arquivo modularizada para distribuir DiffusionDB. As 2 milhões de imagens no DiffusionDB 2M são divididas em 2.000 pastas, onde cada pasta contém 1.000 imagens e um arquivo JSON que vincula essas 1.000 imagens a seus avisos e hiperparâmetros. Da mesma forma, as 14 milhões de imagens no DiffusionDB grandes são divididas em 14.000 pastas.
# 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 Esses sub-folders possuem nomes part-0xxxxx e cada imagem tem um nome exclusivo gerado pela versão 4 UUID. O arquivo json em um sub-dobrador tem o mesmo nome que o subpasta. Cada imagem é um arquivo PNG (DiffusionDB 2M) ou um arquivo WebP sem perdas (DiffusionDB grande). O arquivo JSON contém nomes de arquivos de imagem de mapeamento de pares de valor-chave para seus prompts e hiperparâmetros. Por exemplo, abaixo está a imagem de f3501e05-aef7-4225-a9e9-f516527408ac.png e seu par de valores-chave na 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 "
},
}Os campos de dados são:
p : Promptse : semente aleatóriac : Escala CFG (Escala de Orientação)st : Etapassa : Sampler Para ajudá-lo a acessar facilmente os avisos e outros atributos de imagens sem baixar todos os arquivos ZIP, incluímos dois metadados de tabelas de metadata.parquet e metadata-large.parquet para difusãoDB 2M e difusãoDB Large, respectivamente.
A forma de metadata.parquet é (2000000, 13) e a forma de metatable-large.parquet é (14000000, 13). Duas tabelas compartilham o mesmo esquema e cada linha representa uma imagem. Armazenamos essas tabelas no formato Parquet porque o Parquet é baseado em colunas: você pode consultar com eficiência colunas individuais (por exemplo, avisos) sem ler a tabela inteira.
Abaixo estão três linhas aleatórias de metadata.parquet .
| image_name | incitar | parte_id | semente | etapa | cfg | amostrador | largura | altura | nome de usuário | Timestamp | image_nsfw | Prompt_NSfw |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0C46F719-1679-4C64-9BA9-F181E0EAE811.png | Uma pequena escultura líquida, Corvette, viscosa, reflexiva, arte digital | 1050 | 2026845913 | 50 | 7 | 8 | 512 | 512 | C2F288A2BA9DF65C38386FFAAF7749106FED29311835B63D578405DB9DBCAFDB | 2022-08-11 09: 05: 00+00: 00 | 0.0845108 | 0,00383462 |
| A00BDEAA-14EB-4F6C-A303-977321777EAE9.png | Escultura humana de Alien All Alien Lanky em um encontro romântico no restaurante italiano com mulher sorridente, restaurante agradável, fotografia, 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 | Retrato de conquistador espanhol bárbaro, simétrico, por Yoichi Hatakenaka, Studio Ghibli e Dan Mumford | 286 | 1713292358 | 50 | 7 | 8 | 512 | 640 | 1C2E93CFB1430ADBD956BE9C690705FE295CBEE7D9AC12DE1953CE5E76D89906 | 2022-08-12 03: 26: 00+00: 00 | 0,0773138 | 0,0249675 |
metadata.parquet e metatable-large.parquet compartilham o mesmo esquema.
| Coluna | Tipo | Descrição |
|---|---|---|
image_name | string | Imagem uuid nome do arquivo. |
prompt | string | O prompt de texto usado para gerar esta imagem. |
part_id | uint16 | Pasta ID desta imagem. |
seed | uint32 | Semente aleatória usada para gerar esta imagem. |
step | uint16 | Contagem de etapas (hiperparâmetro). |
cfg | float32 | Escala de orientação (hiperparâmetro). |
sampler | uint8 | Método do amostrador (hiperparâmetro). Mapping: {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 | Largura da imagem. |
height | uint16 | Altura da imagem. |
user_name | string | O hash sha256 do Discord ID exclusivo do usuário que gerou essa imagem. Por exemplo, o hash para xiaohk#3146 é e285b7ef63be99e9107cecd79b280bde602f17e0ca8363cb7a0889b67f0b5ed0 . "Deleted_Account" refere -se a usuários que excluíram suas contas. No entanto, a imagem foi excluída antes de raspar a segunda vez. |
timestamp | timestamp | Timestamp UTC quando essa imagem foi gerada. No entanto, a imagem foi excluída antes de raspar a segunda vez. Observe que o registro de data e hora não é preciso para imagens duplicadas que possuem o mesmo prompt, hypareparameters, largura, altura. |
image_nsfw | float32 | Probabilidade de uma imagem ser NSFW. As pontuações são previstas pelo detector NSFW de última geração de Laion (varia de 0 a 1). Uma pontuação de 2,0 significa que a imagem já foi sinalizada como NSFW e embaçada pela difusão estável. |
prompt_nsfw | float32 | Probabilidade de um rápido ser NSFW. As pontuações são previstas pela desintoxica da biblioteca. Cada pontuação representa o máximo de toxicity e sexual_explicit (variam de 0 a 1). |
Aviso , embora o modelo de difusão estável tenha um filtro NSFW que obscurece automaticamente as imagens NSFW geradas pelo usuário, este filtro NSFW não é perfeito-o DiffusionDB ainda contém algumas imagens NSFW. Portanto, calculamos e fornecemos as pontuações do NSFW para imagens e instruções usando os modelos de ponta. A distribuição dessas pontuações é mostrada abaixo. Decida um limite de pontuação NSFW apropriado para filtrar as imagens do NSFW antes de usar o DiffusionDB em seus projetos.
DifusãoDB é grande (1,6 TB ou 6,5 TB)! No entanto, com a nossa estrutura de arquivos modularizada, você pode carregar facilmente um número desejável de imagens e seus avisos e hiperparâmetros. No Notebook example-loading.ipynb , demonstramos três métodos para carregar um subconjunto de difusãoDB. Abaixo está um breve resumo.
Você pode usar a biblioteca Datasets de face abraçando para carregar facilmente prompts e imagens do DiffusionDB. Nós predefinimos 16 subconjuntos de difusãoDB (configurações) com base no número de instâncias. Você pode ver todos os subconjuntos na visualização do conjunto de dados.
Nota Para usar o carregador de conjuntos de dados, você também precisa instalar
Pillow(pip install Pillow)
import numpy as np
from datasets import load_dataset
# Load the dataset with the `large_random_1k` subset
dataset = load_dataset ( 'poloclub/diffusiondb' , 'large_random_1k' ) Este repositório inclui um download do Python download.py que permite baixar e carregar difusãoDB. Você pode usá -lo na sua linha de comando. Abaixo está um exemplo de carregar um subconjunto de difusãoDB.
O script é executado usando argumentos da linha de comando da seguinte forma:
-i --index -Arquivo para baixar ou inferior ao limite de uma variedade de arquivos se -r também estiver definido.-r --range -Limite superior do intervalo de arquivos para baixar se -i estiver definido.-o --output -Nome do diretório de saída personalizado. Padrões no diretório atual se não estiverem definidos.-z --unzip -descompactar o arquivo/arquivos após o download-l --large -Download do db de difusão grande. Padrões de difusão db 2m. O arquivo específico para download é fornecido como o número no final do arquivo no huggingface. O script preencherá automaticamente o número e gerará o URL.
python download.py -i 23 Os limites superior e inferior do conjunto de arquivos a serem baixados são definidos pelos sinalizadores -i e -r respectivamente.
python download.py -i 1 -r 2000Observe que esse intervalo baixará todo o conjunto de dados. O script solicitará que você confirme que você tem 1,7 TB gratuito no destino de download.
O script será padrão para o local da part do conjunto de dados .zip arquivos em images/ . Se você deseja mover o local de download, também mova esses arquivos ou use um link simbólico.
python download.py -i 1 -r 2000 -o /home/ $USER /datahoarding/etc Novamente, o script adicionará automaticamente o / entre o diretório e o arquivo quando o download.
O script está definido como descompactar os arquivos depois que todos os arquivos são baixados, pois ambos podem ser processos longos em determinadas circunstâncias.
python download.py -i 1 -r 2000 -zmetadata.parquet (somente texto) Se sua tarefa não exigir imagens, você poderá acessar facilmente todos os 2 milhões de avisos e hiperparâmetros na tabela metadata.parquet .
from urllib . request import urlretrieve
import pandas as pd
# Download the parquet table
table_url = f'https://huggingface.co/datasets/poloclub/diffusiondb/resolve/main/metadata.parquet'
urlretrieve ( table_url , 'metadata.parquet' )
# Read the table using Pandas
metadata_df = pd . read_parquet ( 'metadata.parquet' ) Coletamos todas as imagens do servidor oficial de discussão estável de difusão. Leia nosso trabalho de pesquisa para obter detalhes. O código está incluído em ./scripts/ .
Se você encontrar imagens ou avisos nocivos no DiffusionDB, poderá usar este formulário do Google para relatá -las. Da mesma forma, se você é um criador de uma imagem incluída neste conjunto de dados, poderá usar o mesmo formulário para nos informar se deseja remover sua imagem do DiffusionDB. Monitoraremos de perto este formulário e atualizaremos o DiffusionDB periodicamente.
DifusãoDB é criado por 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 }
}O conjunto de dados DiffusionDB está disponível na licença CC0 1.0. O código Python neste repositório está disponível sob a licença do MIT.
Se você tiver alguma dúvida, sinta -se à vontade para abrir um problema ou entre em contato com Jay Wang.