一种用于创建和训练稳定扩散1.x,稳定扩散2.x的工具链和具有自定义数据集的稳定扩散XL模型。
使用此工具链,您可以:
>=3.8>=22.0.0 以下是数据集生成过程中每个步骤的摘要。有关完整的生产质量示例,请参见E621升起的组合(NSFW)。
# install DatasetRising
pip3 install DatasetRising
# start MongoDB database; use `dr-db-down` to stop
dr-db-up DataTet Rising有一个轨道( dr-crawl ),可从Booru式图像板下载元数据(=帖子和标签)。
您必须为您的crawler( --agent AGENT_STRING )选择一个唯一的用户代理字符串。每个HTTP请求将将此字符串传递给图像板。如果您不选择唯一标识您的用户代理,则图像板可能会阻止您的请求。例如:
--agent 'my-imageboard-crawler/1.0 (user @my-username-on-the-imageboard)'
爬虫将自动管理速率限制并进行重试。如果您想自动恢复以前的(失败)爬网,请使用--recover 。
# # download tag metadata to /tmp/tags.jsonl
dr-crawl --output /tmp/e962-tags.jsonl --type tags --source e926 --recover --agent ' <AGENT_STRING> '
# # download posts metadata to /tmp/e926.net-posts.jsonl
dr-crawl --output /tmp/e926.net-posts.jsonl --type posts --source e926 --recover --agent ' <AGENT_STRING> '本节需要一个运行的mongoDB数据库,您可以从
dr-db-up命令开始。
一旦您有足够的帖子和标记元数据,就该将数据导入到数据库中了。
数据集Rising使用MongoDB作为帖子和标签元数据的商店。使用dr-import将下载的元数据导入到MongoDB中。
如果您想调整导入期间对TAG元数据进行处理的处理方式,请在<dataset-rising>/examples/tag_normalizer中查看文件,并设置可选参数--prefilter FILE , --rewrites FILE , --aspect-ratios FILE , - atepectory file, --category-weights FILE和--symbols FILE 。
dr-import --tags /tmp/e926.net-tags.jsonl --posts /tmp/e926.net-posts.jsonl --source e926本节需要一个运行的mongoDB数据库,您可以从
dr-db-up命令开始。
将元数据导入到数据库中后,您可以使用Selector文件在数据集中选择帖子的子集。
您的目标不是包括所有图像,而是制作一组高质量的样品。选择器是这样的机制。
每个选择器都包含标签的正面和负面列表。如果选择器包含至少一个来自正面列表的标签,而否定列表中的标签中没有一个标签,则将包含一个帖子。
请注意,一个很棒的数据集将包含正面和负面的例子。如果您仅使用正面样本训练数据集,则您的模型将无法很好地使用负面提示。这就是为什么下面的示例包括四种不同类型的选择器。
DataSet Rising在<dataset-rising>/examples/select中都有可用的示例选择器。
为了确保您的选择器生成所需的样本类型,请使用dr-preview脚本:
# generate a HTML preview of how the selector will perform (note: --aggregate is required):
dr-preview --selector ./examples/select/tier-1/tier-1.yaml --output /tmp/preview/tier-1 --limit 1000 --output --aggregate
# generate a HTML preview of how each sub-selector will perform:
dr-preview --selector ./examples/select/tier-1/helpers/artists.yaml --output /tmp/preview/tier-1-artists本节需要一个运行的mongoDB数据库,您可以从
dr-db-up命令开始。
当您确信选择器正在制作正确的样本时,是时候选择构建数据集的帖子了。使用dr-select从数据库中选择帖子,然后将其存储在JSONL文件中。
cd < dataset-rising > /database
dr-select --selector ./examples/select/tier-1/tier-1.yaml --output /tmp/tier-1.jsonl
dr-select --selector ./examples/select/tier-2/tier-2.yaml --output /tmp/tier-2.jsonl选择数据集的帖子后,使用dr-join结合选择并dr-build图像并构建实际数据集。
默认情况下,构建脚本修剪所有少于100个样本的标签。要调整此限制,请使用--min-posts-per-tag LIMIT 。
构建脚本还将修剪所有少于10个标签的图像。要调整此限制,请使用--min-tags-per-post LIMIT 。
在--source的末尾添加一个百分比,告诉构建脚本,从给定源(例如--source ./my.jsonl:50%中选择总数据集中的许多样本。
dr-join
--samples ' /tmp/tier-1.jsonl:80% '
--samples ' /tmp/tier-2.jsonl:20% '
--output ' /tmp/joined.jsonl '
dr-build
--source ' /tmp/joined.jsonl '
--output ' /tmp/my-dataset ' 构建数据集后,将其上传到HuggingFace。
dr-build脚本构建的数据集现在可以用于培训。数据集上升使用拥抱面加速训练稳定的扩散模型。
要训练模型,您将需要选择一个基本模型。 --base-model可以是任何扩散器兼容模型,例如:
请注意,如果您设置了--image-width和--image-height ,以匹配基本模型的培训,则您的培训结果将得到显着改善。
请注意,训练阶段假定您已经将数据集上传到了拥抱面。
此示例不扩展到多个GPU。有关多GPU培训的高级主题部分。
该示例使用
dr-train-xl,该示例专为训练稳定的扩散XL模型而设计。如果要训练稳定的扩散1.x或稳定的扩散2.x模型,请改用dr-train。
dr-train-xl
--pretrained-model-name-or-path ' stabilityai/stable-diffusion-xl-base-1.0 '
--dataset-name ' username/dataset-name '
--output ' /tmp/dataset-rising-v3-model '
--resolution 1024
--maintain-aspect-ratio
--reshuffle-tags
--tag-separator ' '
--random-flip
--train-batch-size 32
--learning-rate 4e-6
--use-ema
--max-grad-norm 1
--checkpointing-steps 1000
--lr-scheduler constant
--lr-warmup-steps 0此步骤尚未实施。跳过此步骤是安全的。
训练后,您可以使用dr-generate脚本来验证该模型是否按预期工作。
dr-generate
--model ' /tmp/dataset-rising-v3-model '
--output ' /tmp/samples '
--prompt ' cat playing chess with a horse '
--samples 100 为了将模型与稳定的扩散WebUI一起使用,必须将其转换为safetensors格式。
# Stable Diffusion XL models:
dr-convert-sdxl
--model_path ' /tmp/dataset-rising-v3-model '
--checkpoint_path ' /tmp/dataset-rising-v3-model.safetensors '
--use_safetensors
# Other Stable Diffusion models:
dr-convert-sd
--model_path ' /tmp/dataset-rising-v3-model '
--checkpoint_path ' /tmp/dataset-rising-v3-model.safetensors '
--use_safetensors
# Copy the model to the WebUI models directory:
cp ' /tmp/dataset-rising-v3-model.safetensors ' ' <webui-root>/models/Stable-diffusion ' 需要卸载的数据集崛起的唯一部分是MongoDB数据库。您可以使用以下命令卸载数据库:
# Shut down MongoDB instance
dr-db-down
# Remove MongoDB container and its data -- warning! data loss will occur
dr-db-uninstall要重置数据库,请运行以下命令。
警告:您将丢失数据库中的所有数据。
dr-db-uninstall && dr-db-up && dr-db-createappend脚本允许您从其他来源导入帖子。
使用import以导入第一个源并定义标签名称空间,然后使用append来导入其他资源。
# main sources and tags
dr-import ...
# additional sources
dr-append --input /tmp/gelbooru-posts.jsonl --source gelbooru可以通过拥抱面加速库进行多GPU培训。
训练之前,运行accelerate config以设置您的多GPU环境。
cd < dataset-rising > /train
# set up environment
accelerate config
# run training
accelerate launch
--multi_gpu
--mixed_precision= ${PRECISION}
dr_train.py
--pretrained-model-name-or-path ' stabilityai/stable-diffusion-xl-base-1.0 '
--dataset-name ' username/dataset-name '
--resolution 1024
--maintain-aspect-ratio
--reshuffle-tags
--tag-separator ' '
--random-flip
--train-batch-size 32
--learning-rate 4e-6
--use-ema
--max-grad-norm 1
--checkpointing-steps 1000
--lr-scheduler constant
--lr-warmup-steps 0dataset-risinghuggingface-cli login )accelerate config )aws configure )某些配置将需要NCCL_P2P_DISABLE=1和/或NCCL_IB_DISABLE=1要设置的环境变量。
export NCCL_P2P_DISABLE=1
export NCCL_IB_DISABLE=1
dr-train-xl ...使用HF_DATASETS_CACHE和HF_MODULES_CACHE控制HuggingFace存储其缓存文件
export HF_DATASETS_CACHE=/workspace/cache/huggingface/datasets
export HF_MODULES_CACHE=/workspace/cache/huggingface/modules
dr-train-xl ...创建虚拟环境,安装软件包,并在Docker上设置MongoDB数据库。
cd < dataset-rising >
./up.sh停止MongoDB数据库容器。可以再次运行./up.sh重新启动数据库。
cd < dataset-rising >
./down.sh警告:此步骤删除了MongoDB数据库容器及其存储在其上的所有数据。
cd < dataset-rising >
./uninstall.shpython3 -m pip install --upgrade build twine
python3 -m build
python3 -m twine upload dist/ *流程图TD
爬网[爬网/下载帖子,标签和标签别名] - jsonl->导入
导入[导入帖子,标签和标签别名] - >存储
附加[附加其他帖子] - >存储
存储[数据库] - >预览
存储 - > Select1
存储 - > select2
存储 - > Select3
预览[预览选择器] - > HTML(HTML)
Select1 [选择样本] -JSONL->加入
select2 [选择样本] - jsonl->加入
select3 [选择样本] - jsonl->加入
加入[加入和修剪样品] - jsonl->构建
构建[构建数据集] - HF数据集/parquet->火车
火车[火车模型] - >模型[模型]