Обучение модели LoRA для Stable Diffusion XL
Введение
Пару недель назад мы рассказали о выпуске последней модели Stable Diffusion от исследователей Stability AI. Эта модель может похвастаться обновленным дизайном VAE, расширенной архитектурой, улучшенным пониманием скрытого текста и изображения и удвоенным базовым разрешением. Эти возможности, а также постоянное превосходство в охвате широкого спектра различных стилей, форм и функций позволили Stable Diffusion XL (SDXL) за последние несколько месяцев плавно перейти к модели для синтеза текста в изображения. .
Таким образом, растет спрос на возможность использовать многие из тех же функциональных возможностей и обновлений, которые появились в версиях модели 1.x и 2.x, выпущенных в прошлом году. Эти дополнения к базовой функциональности моделей, такие как моделирование LoRA, ControlNet, EBsynth и другие популярные расширения для веб-интерфейса Automatic1111, позволили Stable Diffusion привлечь внимание более широкого мира, и пользователи готовы иметь те же возможности со Stable. Диффузия XL.
В этой статье мы рассмотрим использование удобного рабочего процесса, созданного для проекта Fast Stable Diffusion, для создания обученной модели LoRA с использованием любого стиля или темы. Мы пройдемся по этому процессу шаг за шагом, используя примеры фотографий лица автора этой статьи для обучения модели, а затем покажем, как использовать его как в веб-интерфейсе Stable Diffusion от AUTOMATIC1111, так и в ComfyUI.
Предварительные условия
Требования к оборудованию:
- Совместимый графический процессор с достаточным объемом видеопамяти (рекомендуется не менее 16 ГБ).
- Достаточное системное ОЗУ (32 ГБ или более).
Требования к программному обеспечению:
- Python (версия 3.7 или выше).
Подготовка данных:
- Набор данных, подходящий для желаемой задачи распространения, правильно отформатированный.
Знакомство:
- Базовое понимание концепций глубокого обучения и обучения моделей.
Модели адаптации низкого ранга (LoRA)
LoRA означает адаптацию низкого ранга. Эти модели позволяют использовать дополнительные модели меньшего размера для точной настройки моделей диффузии. Короче говоря, модель обучения LoRA упрощает обучение Stable Diffusion (а также многих других моделей, таких как LLaMA и другие модели GPT) на различных концепциях, таких как персонажи или определенный стиль. Эти обученные модели затем могут быть экспортированы и использованы другими людьми в их поколениях.
Мы используем LoRA со Stable Diffusion для обучения недорогих моделей, отражающих желаемый предмет или стиль, а затем можем использовать их с полной моделью Stable Diffusion для лучшей работы с этим объектом.
Быстрая стабильная диффузия
Проект Fast Stable Diffusion, возглавляемый и созданный пользователем Github TheLastBen, является одним из лучших современных средств доступа к моделям Stable Diffusion в интерфейсе, который максимизирует удобство для пользователей всех уровней квалификации. Реализация этих пользовательских интерфейсов Fast Stable Diffusion позволяет нам максимально эффективно использовать наше оборудование, чтобы оптимально сократить время генерации каждого изображения, которое мы синтезируем.
В настоящее время Fast Stable Diffusion поддерживает как веб-интерфейс AUTOMATIC1111, так и ComfyUI. Для получения более подробной информации о каждом из них используйте ссылки выше, чтобы получить доступ к их исходным веб-страницам.
Демо
Хотя в прошлый раз нам пришлось создать собственный интерфейс Gradio для модели, нам повезло, что сообщество разработчиков предоставило нам множество лучших инструментов и интерфейсов для Stable Diffusion в Stable Diffusion XL. В этой демонстрации мы сначала покажем, как настроить Stable Diffusion с помощью Jupyter Notebook. Этот процесс был автоматизирован для нас в блокноте Ipython с помощью TheLastBen, поэтому сама модель будет автоматически загружена в кеш. Этот кеш не учитывается при ограничении хранилища, поэтому не беспокойтесь о размере загрузки. Далее мы обсудим некоторые рекомендации по съемке/выбору изображений для определенной темы или стиля. Затем мы покажем, как правильно предоставлять субтитры для процесса обучения LoRA. Затем мы закончим, показав несколько примеров фотографий, которые мы сделали с использованием модели LoRA, обученной на собственном лице автора.
Настраивать
Как только ваш ноутбук заработает, просто запустите первые две ячейки кода, чтобы установить зависимости пакета и загрузить базовую модель SD XL.
# Install the dependencies
force_reinstall= False
Set to true only if you want to install the dependencies again.
#--------------------
with open('/dev/null', 'w') as devnull:import requests, os, time, importlib;open('/notebooks/sdxllorapps.py', 'wb').write(requests.get('https://huggingface.co/datasets/TheLastBen/PPS/raw/main/Scripts/sdxllorapps.py').content);os.chdir('/notebooks');import sdxllorapps;importlib.reload(sdxllorapps);from sdxllorapps import *;Deps(force_reinstall)
Эта первая ячейка фактически устанавливает все. Вы также можете заметить, что создается папка с названием Latest_Notebooks
. Здесь мы можем постоянно получать доступ к обновленным версиям блокнотов, включенных в репозиторий PPS. Следующая ячейка загружает контрольные точки модели из HuggingFace.
# Run the cell to download the model
#-------------
MODEL_NAMExl=dls_xl("", "", "")
Как только это будет завершено, мы сможем начать более сложную часть этого урока.
Выбор изображения и субтитры
Выбор изображений для модели LoRA (или встраивания текстовой инверсии, если уж на то пошло) чрезвычайно важен. Короче говоря, изображения, которые мы выбираем для обучения, окажут глубокое влияние на конечные результаты наших изображений. При обучении рабочей модели LoRA крайне важно выбирать изображения, которые действительно содержат функции желаемого объекта/стиля в различных настройках, освещении и ракурсах. Это разнообразие придаст нашему LoRA необходимую гибкость, что придаст нашим результатам желаемую универсальность и разнообразие, которые мы ожидаем от LoRA.
В этом уроке мы собираемся показать, как тренировать SD XL LoRA на собственном лице. Многие моменты, которые мы коснемся при выборе лучших фотографий, также распространяются на стилистический LoRA, так что не волнуйтесь, если это и есть цель.
Для начала давайте составим краткий список всех характеристик, которые мы ищем в наборе данных изображений для стабильной диффузии LoRA:
- Один предмет или стиль: все будет намного сложнее, если на обучающих изображениях присутствует несколько объектов. Сосредоточьтесь на одном объекте, представленном по-разному, для достижения наилучших результатов.
- Разные углы: очень важно, чтобы объект был представлен под разными углами на введенных обучающих изображениях. Это гарантирует, что LoRA не будет функционально перетренирован на одной точке зрения на предмет. Это значительно снижает конечную гибкость модели.
- Настройки: если объект всегда находится в одной и той же обстановке, т. е. фон, одежда и т. д., эти функции будут перенесены в результаты LoRA. Будьте осторожны с наборами данных, состоящими из изображений, снятых за один сеанс. В качестве альтернативы, совершенно пустой фон работает почти так же хорошо, как и их изменение.
- Освещение: наименее важная черта, о которой следует помнить, хотя она все еще актуальна. Рассмотрите возможность использования разных видов освещения для разных изображений. Это облегчит размещение объекта в разных местах созданных изображений.
Теперь, имея это в виду. Давайте сделаем несколько быстрых изображений. Мы собираемся просто сделать несколько селфи перед глухой стеной. Давайте возьмем 5 для примера. Ниже мы можем взглянуть на те, которые мы используем для этой демонстрации.
Это изображения, которые мы использовали. Как хорошо видно, это всего лишь простые селфи. Мы снимали каждую фотографию, повернув голову под немного другим углом, чтобы модель могла полностью видеть лицо объекта. Мы рекомендуем начать с небольшого набора данных, подобного этому, с использованием лица/тела субъекта в аналогичных положениях.
Remove_existing_instance_images= True
Set to False to keep the existing instance images if any.
IMAGES_FOLDER_OPTIONAL= ""
If you prefer to specify directly the folder of the pictures instead of uploading, this will add the pictures to the existing (if any) instance images. Leave EMPTY to upload.
Smart_crop_images= True
Automatically crop your input images.
Crop_size = 1024
1024 is the native resolution
Check out this example for naming : https://i.imgur.com/d2lD3rz.jpeg
#-----------------
uplder(Remove_existing_instance_images, Smart_crop_images, Crop_size, IMAGES_FOLDER_OPTIONAL, INSTANCE_DIR, CAPTIONS_DIR)
Вот фрагмент кода, который содержит наши настройки для загружаемых изображений. Они уникальны для каждого сеанса, и их можно очистить, запустив самую последнюю ячейку кода. Давайте посмотрим на процесс субтитров.
В следующей ячейке настроен графический интерфейс кода ручных субтитров. Здесь мы можем последовательно помечать наши изображения соответствующими подписями. Мы рекомендуем делать каждую подпись как можно более подробной, чтобы повысить эффективность процесса обучения. Если это слишком утомительно из-за большого набора данных, мы можем использовать вкладку «Обучение» веб-интерфейса Stable Diffusion, чтобы автоматически генерировать соответствующие подписи в текстовых файлах для каждого изображения. Затем мы можем указать путь к нему в ячейке кода и вообще пропустить создание подписей вручную.
Как только все это будет сделано, мы сможем начать обучение.
Обучение модели LoRA
Resume_Training= False
If you're not satisfied with the result, Set to True, run again the cell and it will continue training the current model.
Training_Epochs= 50
Epoch = Number of steps/images.
Learning_Rate= "3e-6"
keep it between 1e-6 and 6e-6
External_Captions= False
Load the captions from a text file for each instance image.
LoRA_Dim = 128
Dimension of the LoRa model, between 64 and 128 is good enough.
Resolution= 1024
1024 is the native resolution.
Save_VRAM = False
Use as low as 9.7GB VRAM with Dim = 64, but slightly slower training.
#-----------------
dbtrainxl(Resume_Training, Training_Epochs, Learning_Rate, LoRA_Dim, False, Resolution, MODEL_NAMExl, SESSION_DIR, INSTANCE_DIR, CAPTIONS_DIR, External_Captions, INSTANCE_NAME, Session_Name, OUTPUT_DIR, 0.03, Save_VRAM)
Здесь у нас есть ячейка кода для проведения обучения LoRA. Здесь определено несколько конкретных переменных, которые мы можем изменить, чтобы повлиять на процесс обучения. Во-первых, если мы запустили обучение и оно работает не так, как нам хотелось бы, мы можем возобновить обучение, используя переменную Resume_Training
. Далее, счетчик Training_Epochs
позволяет нам увеличить общее количество просмотров в процессе обучения каждого отдельного изображения. Мы можем корректировать скорость обучения по мере необходимости, чтобы улучшить обучение в течение более длительных или коротких тренировочных процессов, в пределах ограничений. Наконец, измените LoRA_Dim
на 128 и убедитесь, что переменная Save_VRAM
является ключевой для переключения на True
. В противном случае это будет сложно запустить на бесплатном графическом процессоре.
После того, как мы выбрали настройки, мы можем запустить ячейку. После этого контрольная точка модели будет автоматически сохранена в нужных местах для веб-интерфейса ComfyUI или AUTOMATIC1111.
Теперь, когда мы завершили обучение, мы можем перейти к ComfyUI или веб-интерфейсу Stable Diffusion, чтобы запустить LoRA. Это упростит тестирование модели и повторение нашей процедуры обучения.
Запуск модели LoRA с помощью Stable Diffusion XL
Теперь, когда мы завершили обучение, мы можем перейти к ComfyUI или веб-интерфейсу Stable Diffusion, чтобы запустить LoRA. Это упростит тестирование модели и повторение нашей процедуры обучения.
User = ""
Password= ""
Add credentials to your Gradio interface (optional).
Download_SDXL_Model= True
#-----------------
configf=test(MDLPTH, User, Password, Download_SDXL_Model)
!python /notebooks/sd/stable-diffusion-webui/webui.py $configf
В этом примере мы собираемся использовать пользовательский интерфейс AUTOMATIC1111, поэтому прокрутите вниз до предпоследней ячейки кода и запустите ее. Это автоматически настроит для нас веб-интерфейс и создаст общую ссылку, по которой мы сможем получить доступ к веб-интерфейсу из любого веб-браузера. Нажмите ссылку и откройте веб-интерфейс.
Отсюда мы можем щелкнуть маленький красно-черный символ с желтым кружком под кнопкой «Создать», чтобы открыть раскрывающийся список LoRA, и выбрать вкладку LoRA. Затем выберите наш недавно обученный LoRA («Пример-сессия», если имя сеанса не изменилось). Затем введите тестовое приглашение с LoRA в конце. Вот несколько примеров фотографий, которые мы сделали, используя подсказку «волшебник в яркой мантии и посохом, рыжеволосый мужчина с веснушками, одетый как Мерлин Лора: Пример-Сессия:.6».
Как мы видим, основные характеристики исходного субъекта сохраняются в этом новом контексте, предусмотренном моделью SD. Опробуйте множество различных учебных предметов, а затем подсказки, чтобы получить наилучшие результаты!
Заключительные мысли
Модель Stable Diffusion XL подает большие надежды. Этот проект, который позволяет нам обучать модели LoRA на SD XL, идет еще дальше, демонстрируя, как SD XL легко может заменить модели 1.5 в качестве фактической методологии моделирования диффузии изображений.