Обучение модели с помощью LoRA (версия для десктопа). На примере датасета полученного из самой нейронки

TLDR: Че тут происходит вообще? Я тут делюсь своим опытом по работе с нейронками. Если тебе эта тема интересна, но ты только начал вникать загляни ко мне в профиль или в конец статьи, там есть полезные ссылки. Сейчас это может быть слишком сложным для тебя.

Это расширение уже имеющейся статьи по обучению Лоры в гугл колабе. Я периодически буду ссылаться на нее. Полезно прочитать обе статьи. Все на примере Kohya ss.

В прошлый раз я делал что-то вроде этого:

Сегодня я научу вас тренировать модель на лицах, причем я буду использовать синтетический датасет, чтобы показать что это можно делать так же как и с фото людей.

Если в ходе установки или работы у вас возникнут какие-то проблемы вы можете обратиться за помощью в наш чат.

Установка:

Зависимости:

Предоставляем доступ для оболочки PowerShell, чтобы она могла работать со скриптами:

  • Запустите PowerShell от имени администратора (ПКМ по значку Windows – Windows PowerShell administrator)
  • Запустите команду Set-ExecutionPolicy Unrestricted ответьте ‘A’
  • Закройте PowerShell

Если в ходе выдачи доступа возникает ошибка в предоставлении этого самого доступа. Что-то вроде этого:

Оболочка Windows PowerShell успешно обновила вашу политику выполнения, но данный параметр переопределяется политикой, определенной в более конкретной области. В связи с переопределением оболочка сохранит текущую политику выполнения “Unrestricted”. Для просмотра параметров политики выполнения введите “Get-ExecutionPolicy -List”. Для получения дополнительных сведений введите “Get-Help Set-ExecutionPolicy”.

Нажмите Win + R. Введите gpedit.msc. Энтер. Пройдите по пути как на скрине, дважды нажмите на “Включить выполнение сценариев”:

Далее. Ставим включить. В политике выполнения выбираем “Разрешить все сценарии”.

Закройте PowerShell.

Перейдите в папку где вы хотели бы хранить файлы скрипта. Нажмите на путь и введите вместо него PowerShell. Энтер. Так мы будем выполнять скрипты из этой папки.

Скопируйте скрипт ниже и вставьте в ваш PowerShell. Энтер.

git clone https://github.com/bmaltais/kohya_ss.git
cd kohya_ss

python -m venv venv
.\venv\Scripts\activate

pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 –extra-index-url https://download.pytorch.org/whl/cu116
pip install –use-pep517 –upgrade -r requirements.txt
pip install -U -I –no-deps https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/f/xformers-0.0.14.dev0-cp310-cp310-win_amd64.whl

cp .\bitsandbytes_windows\*.dll .\venv\Lib\site-packages\bitsandbytes\
cp .\bitsandbytes_windows\cextension.py .\venv\Lib\site-packages\bitsandbytes\cextension.py
cp .\bitsandbytes_windows\main.py .\venv\Lib\site-packages\bitsandbytes\cuda_setup\main.py

accelerate config

Ждем пока не появится вот такая строка

Нажмите энтер, начнется настройка. Что вам нужно выбирать написано на скрине ниже.

Опциональный блок для владельцев карт 30\40 серии:

Скачайте архив. Поместите папку из него (cudnn_windows) в корневую папку куда вы устанавливаете скрипты в данный момент. В командной строке, из корневой папки со скриптами выполните данные команды. По информации с гитхаба может дать значительный прирост скорости обучения.

.\venv\Scripts\activate

python .\tools\cudann_1.8_install.py

На этом установка и настройка завершены. Если вы хотите обновить скрипты. То опять же. Запуск командной строки из папки со скриптами. Вставить. Энтер

git pull

.\venv\Scripts\activate

pip install –use-pep517 –upgrade -r requirements.txt

На этом вообще можно было бы и закончить и отправить вас читать версию для коллаба, но я продолжу

Тренируем:

Запустите оболочку через gui.bat

После запуска переходим на http://127.0.0.1:7860/?__theme=dark (ну или http://127.0.0.1:7861/?__theme=dark если был запущен автоматик)

Сразу переходим во вкладку Dreamboot LoRA. Тут нужно либо выбрать модель на вашем ПК нажав на белый листик и указав путь. Либо модель из списка. Она будет скачана скриптом.

v2 – Ставите галку если тренируете на второй версии диффузии

v_parameterization – если на версии 2.1 с параметризацией то и эту

Save trained model as – в каком формате будет сохранена ваша модель. Для автоматика, на текущую дату, оставляйте safetensors.

После выбора модели идем на вкладку Folders. Я буду пробовать тренировать на Deliberate 2. Хотя обычно делаю это на SD 1.5.

Image folder – Тут указываем папку на ваш датасет, не прямо на картинки с описанием, а на папку, где эта самая папка лежит.

Как подготовить дата сет я писал в гайде по коллабу, так как эта инфа верна на 101% и для этого способа, чтобы не раздувать статью просто прочитайте часть про датасет по ссылке.

Output folder – папка куда будет сохранен файл модели

Regularisation folder – папка в регуляризационными фотографиями. Если кратко нужны, чтобы избавиться от стиля. Туда кладутся фотки без какой-то стилизации напоминающие то на что вы тренируете. Я ни разу не использовал. По идее если хотите натренировать на стилизованного персонажа можно выбрать туже папку с датасетом. Видел как так делают. Работает ли? Не знаю

Logging folder – укажите куда будут сохраняться логи.

Model output name – имя итогового файла модели. Только файла. К ключевому слову тригеру отношения не имеет. Тригер задается в датасете.

Training comment – просто комментарий который будет добавлен в метедату файла модели.

Идём на Training parameters:

Lora type – что-то новенькое. Судя по репозиторию LoCon должен обучать модель более эффективно. Но сегодня без экспериментов. (Для меня. Вы конечно попробуйте и поделитесь результатом)

LoRA network weights – указать путь к уже существующей Лора, чтобы продолжить тренировку.

Caption extension – расширение файлов подсказки. Те самые которые должны лежать у вас рядом с картинками вашем датасете. у меня это “.txt”.

Train batch size – Оставляю 1. Эта настройка может ускорить обучение, но в тоже время это происходит из за того что сеть берет сразу несколько картинок и берет как бы среднее значение между ними. Логично что жрет VRAM так что у кого мало много не выкрутить.

Epoch – сколько эпох. Если просто это кол-во проходов по вашему датасету. Например, у вас два варианта. Оставить тут 1, а папку с датасетом назвать 100_keyword, тогда сеть пройдет по картинкам 100 раз. А можно назвать папку 10_keyword. Поставить 10 эпох. Значит сеть пройдет 10 раз по 10 в итоге снова 100. Но эпохи можно сохранять в разделе Save every N epochs. Поставив например 2. У вас в итоге получится 5 файлов Лора каждый из которых натренирован на разном количестве проходов. Это удобный способ избежать недотренированности\перетренированности, вы просто проверяете все файлы и оставляете лучший.

Mixed precision и Save_precision – точность. Все ставят fp16 и я ставлю. Хотя моя карта поддерживает bf16 и она вроде как точнее и потребляет меньше памяти, но я что-то меняю когда что-то не получается. А тут все получается.

Number of CPU threads per core – количество потоков на ядро. У меня два. У вас гуглите.

Learning rate schedulerкривая обучения. Не уверен, что вы захотите это читать. Кратко, по какой кривой менять скорость обучения. Мне нравится constant. То есть, не меняется.

seed – хорошая идея его фиксировать для обучения. Потому что например вы сделали Лору, а она не ок. Как можно быть уверенным что просто не повезло с сидом? Такое бывает. Сид не лег на тренировку. Поэтому можно оставить тот же сид, но поменять параметры. Или наоборот, поменять сид не меняя параметры.

Learning rate – он перекрывается Юнит леарнинг рейтом. Не трогаю.

LR warmup (% of steps) – разминочные проходы на низкой скорости. Для константы ставлю 0

Cache latent – кэширует некоторые файлы, что ускоряет обучение.

Text Encoder learning rate – управляет тем как ИИ понимает текстовые подсказки. Если ваша модель выдает слишком много нежелательных объектов(могла нахвататься с вашего дата сета) уменьшите это значение. Если наоборот объекты плохо проявляются. Увеличьте или вместо этого увеличьте количество шагов обучения. Стандартное значение 5e-5 что равно 0.00005. Его и оставлю

Unet learning rate – что-то вроде памяти, имеет информацию о том как элементы взаимодействуют друг с другом. Первое куда стоит смотреть если обучение не получилось. Сначала рекомендую пройтись со стандартными параметрами и что-то крутить только когда вроде все должно было получиться, но не получилось. Если итоговая модель выдает визуальный шум вместо нормального изображения то значение слишком высокое. попробуйте слегка уменьшить и повторить. Тоже не трогаю

Network Rank (Dimension) – ****во первых это повлияет на итоговый размер вашего файла Лора, примерно 1 за 1 мегабайт. Во вторых чем выше значение тем выше выразительность вашего обучения. 128 как по мне является хорошим соотношением. Его оставляем, но если вашей итоговой модели этой самой выразительности не хватает попробуйте увеличить. Быстрая скорость обучения развязывает руки для экспериментов.

Network Alpha – во первых это значение должно быть ниже либо равным network_dim и нужно для предотвращения ошибок точности. Чем ниже значение тем сильнее замедляет обучение. Зачем замедлять обучение? Это точно в другой раз, иначе эта статья не кончится 😅. Я ставлю равным Network Rank (Dimension).

Max resolution – Максимальное разрешение

Stop text encoder training – когда остановить кодер. Никогда не использовал и не видел чтобы кто-то как-то применял.

Enable buckets – даст возможность использовать изображения не квадратным соотношением сторон, обрезав их. Но лучше готовить датасет нормально.

Дополнительные настройки:

Flip augmentation – Если набор совсем маленький можно попробовать включить. Дополнительно создаст отраженные версии картинок

Clip skip – Нейросеть работает слоями. Эта цифра означает сколько последних слоев мы хотим пропустить, обычно она выбирает в зависимости от модели. Тут стоит два так как колаб был рассчитан на аниме модель. Чем раньше остановились тем меньше слоев нейросети обработали подсказку. Комментарий с вики: Некоторые модели были обучены с использованием такого рода настроек, поэтому установка этого значения помогает добиться лучших результатов на этих моделях. Я поставлю 1. Я не тренил на делиберейт и не знаю что тут на самом деле лучше.

Memory efficient attention – если не хватает памяти

Noise offset – Если коротко дает диффузии больше простора для внесения изменений. В основном влияет на яркость\затемненность картинки. Длинно тут. В прошлом гайде ставил 0, с того момента кое-что почитал, ставлю 0.1. Сможем делать более темные и светлые картинки чем по дефолту.

Resume from saved training state – если тренировка по какой-то причине была прервана тут вы можете ее продолжить. Чтобы такая возможность была, поставьте галку на Save training state.

Optimizer – В подробном объяснение будут такие слова как квантование, стохастические градиенты и так далее. Оставляем по умолчанию. Я видел тесты людей, и этот показывал себя хорошо. Думаю ничего не изменилось.

Все настройки можно сохранить чтобы не вбивать заново. В самом верху раскройте меню. Укажите папку куда хотите сохранить, имя файла и расширение json. Save

Итоговые настройки у меня будут такие(дополнительные по умолчанию):

Мой датасет выглядит вот так(выложил на своем бусти, 768х768). Он синтетический, то есть сгенерирован, я натренирую так чтобы бы это лицо я мог вызывать по желанию на разных моделях. Рекомендуется использовать 25-30 фотографий если речь о лице. Для стиля можно и 100, но их можно и не описывать. Посмотрим чего можно добиться с 8ю и с неидеально совпадающей внешностью.

Как видите моя версия файла настройки и название будущего файла Лора совпадает, рекомендую делать так же.

Колличество проходов по папке установлено в 20*5 эпох 100 проходов. Это по каждой картинке, а картинок у нас 8 итого получим 800 проходов. Для лица это нормальная цифра.

Процесс пошел:

Через несколько минут наши лора готовы. У меня они сразу лежат где надо так как я указал сохранять их в папку с лора.

Генерируем:

Rev Animated

Deliberate:

Модели разные, а лицо одинаковое. Чтд. Идеальны ли они? Конечно нет. Перечислю ошибки которые вам лучше не допускать чтобы результаты были лучше.

Подход к датасету. У меня он синтетический(это не плохо, просто я не готовил его специально, а взял первое попавшееся), они не супер похожи, он очень маленький и так же важно то что разрешение было 512, а лица на фото мелкие, для лица лучше тренировать на фотографиях примерно от верхней части груди это самое близкое и по пояс самое далекое. (Примерно!).

Тренировка на разрешении 768 чуть улучшило бы ситуацию. Но я этого делать не буду. Это был урок, о том как тренировать на ПК, так как многим не удобно пользоваться коллабом. Как это делать хорошо и на разных вещах таких как предметы, персонажи целиком, стили и тд. В следующих гайдах. Подписывайтесь 🙄.

Поделиться результатом или задать вопрос вы можете в нашем комьюнити.

Больше гайдов на моем канале, подписывайтесь чтобы не пропустить:

На моем бусти вы сможете найти датасеты для обучения, доп материалы к гайдам.

 

Источник

Читайте также