Этот репозиторий предоставляет реализацию DreamBooth с использованием KerasCV и TensorFlow. Реализация во многом основана на примере diffusers
Hugging Face.
DreamBooth — это способ быстрого обучения (тонкой настройки) Stable Diffusion новым визуальным концепциям. Для получения более подробной информации обратитесь к этому документу.
Код, представленный в этом репозитории, предназначен только для исследовательских целей . Пожалуйста, посетите этот раздел, чтобы узнать больше о потенциальных вариантах использования и ограничениях.
Загружая эту модель, вы принимаете лицензию CreativeML Open RAIL-M по адресу https://raw.githubusercontent.com/CompVis/stable-diffusion/main/LICENSE.
Если вы просто ищете сопутствующие ресурсы этого репозитория, вот ссылки:
Обновление от 15 февраля 2023 г .: Спасибо Сумику Ракшиту; теперь у нас есть лучшие утилиты для поддержки весов и смещений (см. № 22).
Установите необходимые компоненты: pip install -r requirements.txt
.
Сначала вам нужно выбрать класс, к которому добавляется уникальный идентификатор. Кодовая база этого репозитория была протестирована с использованием sks
в качестве уникального идентификатора и dog
в качестве класса.
Затем генерируются два типа подсказок:
(a) подсказка экземпляра : f"фотография {self.unique_id} {self.class_category}" (b) подсказка класса : f"фотография {self.class_category}"
Образы экземпляров
Получите несколько изображений (3–10), отражающих концепцию, в соответствии с которой будет дорабатываться модель. Эти изображения будут связаны с instance_prompt
. Эти изображения в базе кода называются instance_images
. Заархивируйте эти изображения и разместите их где-нибудь в Интернете, чтобы архив можно было загрузить с помощью внутренней функции tf.keras.utils.get_file()
.
Изображения классов
DreamBooth использует потерю предварительного сохранения для упорядочения обучения. Короче говоря, потеря предварительного сохранения помогает модели медленно адаптироваться к новой рассматриваемой концепции на основе любых предшествующих знаний, которые она могла иметь об этой концепции. Чтобы использовать потерю предварительного сохранения, нам нужно приглашение класса, как показано выше. Приглашение класса используется для создания заранее определенного количества изображений, которые используются для расчета итоговых потерь, используемых для обучения DreamBooth.
Согласно этому ресурсу, в большинстве случаев хорошо подходят 200–300 изображений, созданных с использованием подсказки класса.
Итак, после того, как вы определились instance_prompt
и class_prompt
, используйте этот блокнот Colab для создания нескольких изображений, которые будут использоваться для обучения с потерей предварительного сохранения. Затем заархивируйте сгенерированные изображения как один архив и разместите его в Интернете, чтобы его можно было загрузить с помощью внутренней функции tf.keras.utils.get_file()
. В базе кода мы просто называем эти изображения class_images
.
Обучение DreamBooth можно провести БЕЗ использования предварительной потери сохранения. Этот репозиторий всегда использует его. Чтобы люди могли легко протестировать эту кодовую базу, мы разместили здесь образы экземпляров и классов.
Запускаем обучение! Существует ряд гиперпараметров, с которыми вы можете поиграть. Чтобы узнать о них больше, обратитесь к сценарию train_dreambooth.py
. Вот команда, которая запускает обучение со смешанной точностью и другими значениями по умолчанию:
python train_dreambooth.py --mp
Вы также можете точно настроить кодировщик текста, указав параметр --train_text_encoder
.
Кроме того, скрипт поддерживает интеграцию с Weights and Biases ( wandb
). Если вы укажете --log_wandb
,
wandb
с помощью обратного вызова WandbMetricsLogger
.wandb
в качестве артефактов для управления версиями модели. Это делается с помощью DreamBoothCheckpointCallback
, который был создан с использованием обратного вызова WandbModelCheckpoint
.wandb.Table
на панели управления wandb
. Это делается с помощью QualitativeValidationCallback
, который также записывает сгенерированные изображения на медиа-панель на панели управления wandb
в конце обучения.Вот команда, которая запускает обучение и записывает показатели обучения и сгенерированные изображения в ваше рабочее пространство Weights & Biases:
python train_dreambooth.py
--log_wandb
--validation_prompts
" a photo of sks dog with a cat "
" a photo of sks dog riding a bicycle "
" a photo of sks dog peeing "
" a photo of sks dog playing cricket "
" a photo of sks dog as an astronaut "
Вот пример запуска wandb
, где вы можете найти сгенерированные изображения, а также контрольные точки модели.
Мы протестировали нашу реализацию двумя разными методами: (а) точная настройка только модели распространения (UNet), (б) точная настройка модели распространения вместе с кодировщиком текста. Эксперименты проводились с широким диапазоном гиперпараметров для learning rate
и training steps
во время обучения, а также для number of steps
и unconditional guidance scale
(ugs) во время вывода. Но сюда включены только наиболее существенные результаты (с нашей точки зрения). Если вам интересно, как различные гиперпараметры влияют на качество создаваемого изображения, найдите ссылку на полные отчеты в каждом разделе.
Обратите внимание, что наши эксперименты основывались на этой публикации в блоге Hugging Face.
Вот несколько избранных результатов различных экспериментов, которые мы провели. Наши экспериментальные журналы для этого параметра доступны здесь. Дополнительные изображения визуализации (созданные с помощью контрольных точек этих экспериментов) доступны здесь.
Изображения | Шаги | ПХГ | Параметр |
---|---|---|---|
50 | 30 | LR: 1e-6 Тренировочные шаги: 800 (Вес) | |
25 | 15 | LR: 1e-6 Тренировочные шаги: 1000 (Вес) | |
75 | 15 | LR: 3e-6 Тренировочные шаги: 1200 (Вес) |
Изображения | Шаги | угу |
---|---|---|
75 | 15 | |
75 | 30 |
со скоростью обучения = 9e-06, максимальное количество шагов поезда = 200 (веса | отчеты)
Изображения | Шаги | угу |
---|---|---|
150 | 15 | |
75 | 30 |
со скоростью обучения = 9e-06, максимальное количество шагов поезда = 200 (наборы данных | отчеты)
Библиотека diffusers
предоставляет самые современные инструменты для экспериментов с различными моделями диффузии, включая стабильную диффузию. Он включает в себя различные методы оптимизации, которые можно использовать для эффективного вывода с помощью diffusers
при использовании больших контрольных точек стабильной диффузии. Одной из особенно полезных функций diffusers
является поддержка различных планировщиков, которые можно настроить во время выполнения и интегрировать в любую совместимую модель Diffusion.
После того, как вы получили точно настроенные контрольные точки DreamBooth с использованием этой базы кода, вы можете экспортировать их в удобный StableDiffusionPipeline
и использовать его напрямую из библиотеки diffusers
.
Рассмотрим этот репозиторий: chansung/dreambooth-dog. Вы можете использовать контрольные точки этого репозитория в StableDiffusionPipeline
после выполнения нескольких небольших шагов:
from diffusers import StableDiffusionPipeline
# checkpoint of the converted Stable Diffusion from KerasCV
model_ckpt = "sayakpaul/text-unet-dogs-kerascv_sd_diffusers_pipeline"
pipeline = StableDiffusionPipeline . from_pretrained ( model_ckpt )
pipeline . to ( "cuda" )
unique_id = "sks"
class_label = "dog"
prompt = f"A photo of { unique_id } { class_label } in a bucket"
image = pipeline ( prompt , num_inference_steps = 50 ). images [ 0 ]
Следуйте этому руководству, чтобы узнать больше.
Мы преобразовали точно настроенную контрольную точку для изображений собак в совместимый с Diffusers StableDiffusionPipeline и провели различные эксперименты с различными настройками планировщика. Например, следующие параметры DDIMScheduler
тестируются на другом наборе guidance_scale
и num_inference_steps
.
num_inference_steps_list = [ 25 , 50 , 75 , 100 ]
guidance_scale_list = [ 7.5 , 15 , 30 ]
scheduler_configs = {
"DDIMScheduler" : {
"beta_value" : [
[ 0.000001 , 0.02 ],
[ 0.000005 , 0.02 ],
[ 0.00001 , 0.02 ],
[ 0.00005 , 0.02 ],
[ 0.0001 , 0.02 ],
[ 0.0005 , 0.02 ]
],
"beta_schedule" : [
"linear" ,
"scaled_linear" ,
"squaredcos_cap_v2"
],
"clip_sample" : [ True , False ],
"set_alpha_to_one" : [ True , False ],
"prediction_type" : [
"epsilon" ,
"sample" ,
"v_prediction"
]
}
}
Ниже приведено сравнение различных значений параметров beta_schedule
в то время как для других установлены значения по умолчанию. Взгляните на исходный отчет, который включает результаты других планировщиков, таких как PNDMScheduler
и LMSDiscreteScheduler
.
Часто наблюдается, что настройки по умолчанию гарантируют создание изображений более высокого качества. Например, значения по умолчанию guidance_scale
и beta_schedule
установлены на 7,5 и linear
. Однако, когда для guidance_scale
установлено значение 7,5, scaled_linear
из beta_schedule
похоже, работает лучше. Или, когда для beta_schedule
установлено linear
, более высокое значение guidance_scale
похоже, работает лучше.
Мы провели 4800 экспериментов, в результате которых было получено 38 400 изображений. Эти эксперименты регистрируются в разделе «Вес и предвзятость». Если вам интересно, ознакомьтесь с ними здесь, а также со сценарием, который использовался для проведения экспериментов.
В дополнение к советам и рекомендациям, изложенным в этом сообщении в блоге, мы руководствовались следующими вещами при подготовке экземпляров для проведения обучения DreamBooth на человеческих лицах:
Спасибо Абхишеку Тхакуру за то, что поделился этими советами.