Набор инструментов для создания и обучения стабильной диффузии 1.x, стабильная диффузия 2.x и стабильная диффузия XL -модели с пользовательскими наборами данных.
С этим инструментом вы можете:
>=3.8>=22.0.0 Ниже приводится сводка каждого шага в процессе генерации наборов данных. Для полного примера производственного качества см. E621-Rising-Configs (NSFW).
# install DatasetRising
pip3 install DatasetRising
# start MongoDB database; use `dr-db-down` to stop
dr-db-up Наборы данных Rising имеют Crawler ( dr-crawl ) для загрузки метаданных (= посты и тегов) с досок изображений в стиле буру.
Вы должны выбрать уникальную строку агента пользователя для вашего Crawler ( --agent AGENT_STRING ). Эта строка будет передана на доску изображений с каждым HTTP -запросом. Если вы не выберете пользовательского агента, который уникально идентифицирует вас, платы изображений, вероятно, заблокируют ваши запросы. Например:
--agent 'my-imageboard-crawler/1.0 (user @my-username-on-the-imageboard)'
Crawler автоматически управляет ограничениями и повторными показателями. Если вы хотите автоматически возобновить предыдущий (неудачный) ползание, используйте --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 , --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.
После того, как метаданные были импортированы в базу данных, вы можете использовать селекторные файлы для выбора подмножества сообщений в наборе данных.
Ваша цель - не включать все изображения, а создавать набор высококачественных образцов. Селекторы являются механизмом для этого.
Каждый селектор содержит положительный и отрицательный список тегов. Сообщение будет включено селектором, если он содержит хотя бы один тег из положительного списка и ни один из тегов в отрицательном списке.
Обратите внимание, что отличный набор данных будет содержать положительные и отрицательные примеры. Если вы тренируете свой набор данных только с положительными образцами, ваша модель не сможет хорошо использовать отрицательные подсказки. Вот почему примеры ниже включают четыре различных типа селекторов.
Набор данных 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 .
Добавление процента в конце A --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 теперь готов использоваться для обучения. Набор данных Rising использует Aggingface Accelerate для обучения стабильных диффузионных моделей.
Чтобы тренировать модель, вам нужно будет выбрать базовую модель для начала. --base-model может быть любой диффузоры, совместимой с такими, как:
Обратите внимание, что ваши результаты обучения будут значительно улучшены, если вы установите --image-width и --image-height чтобы соответствовать разрешению, с которой была обучена базовая модель.
Обратите внимание, что этап обучения предполагает, что вы уже загрузили свой набор данных в HuggingFace.
Этот пример не масштабируется до нескольких графических процессоров. См. Раздел «Расширенные темы» для обучения мульти-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-create Сценарий append позволяет импортировать сообщения из дополнительных источников.
Используйте import , чтобы импортировать первый источник и определить пространство имен тегов, а затем использовать append для импорта дополнительных источников.
# main sources and tags
dr-import ...
# additional sources
dr-append --input /tmp/gelbooru-posts.jsonl --source gelbooruОбучение мульти-GPU может быть проведено с помощью библиотеки Aggingface Accelerate.
Перед тренировкой запустите 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 чтобы управлять, где Hurgingface сохраняет свои кеш -файлы
export HF_DATASETS_CACHE=/workspace/cache/huggingface/datasets
export HF_MODULES_CACHE=/workspace/cache/huggingface/modules
dr-train-xl ...Создает виртуальную среду, устанавливает пакеты и устанавливает базу данных MongoDB на Docker.
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
Crawl [Crawl/Download Posts, теги и псевдонимы тегов] -jsonl -> import
Импорт [импортные сообщения, теги и псевдонимы тегов] -> Магазин
Приложение [добавление дополнительных сообщений] -> Магазин
Хранить [базу данных] -> Предварительный просмотр
Магазин -> select1
Магазин -> select2
Магазин -> select3
Предварительный просмотр [Предварительный просмотр Selectors] -> HTML (HTML)
SELECT1 [Выберите образцы] -JSONL -> JOIN
SELECT2 [Выберите образцы] -JSONL -> JOIN
SELECT3 [Выберите образцы] -JSONL -> JOIN
Присоединяйтесь [присоединиться и привлекать образцы] -jsonl -> build
Создайте [набор данных построения] -набор данных HF/Parquet -> Train
Поезда [модель поезда] -> Модель [Модель]