Обучение LoRA, или поговорим о kohya_ss
Часть 1. Установка интерфейса kohya_ss.
В предыдущих гайдах я вскользь упоминала такой интерфейс как
kohya_ss, который так же доступен в
Stability Matrix в разделе
Packages - Training.
О версиях программы
Сейчас существует две основные версии, которые могут нам пригодиться:
- официальная релизная (на сегодняшний день) v24.1.7, на которой доступно обучение моделей SDXL.
- мастер-версии sd3-flux.1 и sd3-sd3.5-flux — в которых как раз появляется возможность обучать LoRA и DreamBooth для модели Flux.1. На ней же можно обучать и для модели SDXL. Конкретно я затестировала через матрикс версию sd3-flux.1 — все отлично работает и не требует каких-то дополнительных телодвижений при установке. Так что в целом вам не требуется заморачиваться с установкой через командную строку.
Мастер-версии интерфейса можно выбрать в окне установки отключив кнопку Releases и выбрав из выпадающего списка нужную вам. Будем надеяться что вскоре выпустят релизную версию с поддержкой Flux.1.
Системные требования
Обучение моделей очень прожорливое до ресурсов. Для обучения модели LoRA вам потребуется:
- Видеокарта с поддержкой CUDA, минимум 8 ГБ видеопамяти для небольших моделей, рекомендуется 16 ГБ и более (SDXL). Flux ещё более прожорлив, поэтому для него рекомендуется все же использовать видеокарту от 16 Гб. Меньше (10-12 Гб) можно, но будет уже не то качество или сильное увеличение времени на обучение. Под видеопамятью подразумевается Выделенная память графического процессора.
- Оперативная память (RAM): минимум 16 ГБ, оптимально 32 ГБ, а для обучения DreamBooth от 49 Гб.
- Место на диске: от 20 ГБ, желательно SSD.
Вообще надо сказать, что обучение модели для Флюкса даже на мощной видеокарте дело не сильно быстрое и требует действительно топовых комплектующих. Я использую для Флюкса более скоростные настройки, но даже так среднее время обучения на 4060ti с объемом видеопамяти 16 Гб занимает 5,5-6 часов. Для сравнения — SDXL - 2 часа. Но, что неоспоримо, такое долгое ожидание того стоит. Карты выше рангом (4080 например) с теми же 16 гб видеопамяти будут быстрее при тех же настройках.
Если ваши системные требования подходят, или же вы хотите всё-равно попробовать, идем дальше.
Часть 2. Подготовка Dataset.
Основные понятия
Для обучения модели нам потребуется:
- Training images — Тренировочные изображения — это основной набор изображений, которые вы используете для обучения модели. Этот набор должен содержать изображения, соответствующие теме или стилю, который вы хотите, чтобы модель смогла воспроизводить. В процессе обучения модель анализирует эти изображения, а затем применяет к ним текстовые описания, чтобы создать ассоциации, которые позволяют модели "понимать" стиль, тему или объект. В нашем случае мы будем использовать изображения вашего персонажа для того, чтобы модель могла запомнить, как он выглядит.
- Regularisation images — Регуляризационные изображения — это набор изображений, используемый для предотвращения переобучения модели. Эти изображения помогают модели не «забыть» общие черты, что делает её гибче и более универсальной. Регуляризационные изображения позволяют обученной модели сохранять способность генерировать разнообразные изображения, а не ограничиваться лишь стилем или предметом, на которых она была обучена. Например изображения женщин, мужчин, котов, для понимая, как в общем выглядят самые разные женщины, мужчины и коты в целом. Используется только при обучении модели SDXL. Flux уже умеет понимать в широком смысле кто изображен на картинке (мужчина, женщина или кот), и качественного улучшения итоговой модели за счет этого не происходит.
Для обучения SDXL:
- 13 тренировочных изображений вашего персонажа в размере 1024х1024 px. Это важно!
- 325 регуляризационных изображений общего понимания предмета, на который вы обучаете в размере 1024х1024 px. Например, если в тренировочных изображений у вас персонаж женского пола - регуляризационные изображения будут состоять из 325 фото реальных женщин. Если вы решили обучить модель изображениям своего кота - вам потребуется 325 фото разных котов.
Для обучения Flux:
- 13 тренировочных изображений вашего персонажа в размере 1024х1024 px. Можно использовать 15-16 и даже более, но каждое добавленное новое изображение будет увеличивать время обучения примерно 7,6% от исходного.
- Регуляризационные изображения не используются.
Откуда взялись эти числа?
13 - не чертова дюжина.
Обычно, для обучения на внешность одного человека/персонажа достаточно небольшого количества изображений, порядка 10–20. Эти изображения помогают модели запомнить и воспроизвести нужные черты лица, мимику и углы обзора, чтобы сформировать полный образ. Такое количество тренировочных изображений позволяет:
- Избежать избыточного запоминания (overfitting), при котором модель может перестать правильно обобщать внешность и выдавать искусственные артефакты.
- Поддерживать эффективность обучения, так как каждое изображение будет использоваться интенсивнее (особенно с повторениями), что помогает модели сфокусироваться на характерных чертах лица, не перегружаясь избыточными данными.
Важно, чтобы изображения были разнообразными по ракурсу. Если в вашем дата-сете нет изображения персонажа в профиль - скорее всего, вам будет достаточно трудно такое изображение сгенерить, потому что модель не будет знать, как именно выглядит профиль, и результат может быть далеким от требуемого.
325 регуляризационных изображений — это в первую очередь связано с тем, что в модели SDXL для улучшения качества обучения и избежания переобучения, используются
Повторения. А чисто 325 служит для баланса, чтобы модель запомнила черты лица вашего персонажа, но при этом не переобучилась и сохранила гибкость. В SDXL так же можно добавить больше тренировочных изображений, но тогда на каждое 1 новое изображение нужно добавить 25 новых регуляризационных.
25?
А 25 это как раз число повторений Тренировочных изображений, которое используется, если набор данных не очень большой. 25х13=325. Что же такое число повторений и зачем оно нужно?
Число повторений (или repeats) для тренировочных и регуляризационных изображений — это параметр, который определяет, сколько раз одно и то же изображение будет проходить через модель в процессе обучения. Повторение изображений позволяет увеличить их «вес» в обучающей выборке и усилить влияние на модель, не добавляя дополнительных уникальных изображений. Актуально для моделей SDXL, на Flux использовать повторения мы так же не будем, т.к. качество обучения будет определять совсем другой параметр.
Кажется с основными понятиями разобрались, теперь непосредственно про подготовку тренировочных изображений.
Подготовка тренировочных изображений
Основные моменты которые вам нужно проконтролировать:
- Изображение размером 1024х1024 px !!! Важно !!!
- Изображение должно быть качественным, четким, с разными ракурсами.
- При съемке в симс желательно делать изображения на белом фоне, чтобы избежать запоминания игровой графики и ненужных артефактов. Либо попробуйте заменить фон на более стилизованный и реалистичный.
- Чтобы повысить качество модели рекомендуется с помощью Fooocus перерисовать волосы, одежду и ресницы сима. Подробнее об этом ниже.
- Можно обучать модель, например, на реальных фото кота. Но для того, чтобы модель не добавляла в дальнейшем в генерации излишнюю реалистичность, рекомендуется заменить фон на белый или менее реалистичный. Актуально, если вы хотите сделать фото своего персонажа с домашним любимцем, или своего персонажа в зверо-форме.
Пример тренировочных изображений
Как только вы подготовили 13 изображений, подготовим тренировочную папку, в которую необходимо размещать тренировочные и регуляризационные изображения, и забирать готовые модели.
Структуризация тренировочной папки
Вообще в Kohya_ss есть встроенная функция автоматического создания структуры этих папок, но как и вся автоматика — эта тоже иногда дает сбой, поэтому я объясню смысл этих папок, чтобы вы могли создать конфиги с настройками обучения и больше пути не трогать, заменяя тренировочные изображения непосредственно в папке. Для меня это самый простой и наглядный метод, исключающий ошибки.
1. В любом удобном месте создайте папку
Training (или другое название, понятное вам). Не знаю есть ли в этом необходимость, я не проверяла, но чтобы исключить ошибки проследите, что весь путь до папки не содержит кириллицу и спец.символы (#$%^&* и т.д.). По опыту, в некоторых случаях это может затруднять поиск нужных файлов программам и вызывать ошибки.
2. В папке
Training создайте 4 папки
Пример содержания папки
Training
3. Внутри папки
img мы будем создавать папки с тренировочными данными. 1 папка - 1 набор данных для обучения. Для одной Lora или DreamBoot можно использовать несколько наборов данных, например набор данных для 1 персонажа и для другого персонажа, чтобы получать совместные кадры. Но, как и всегда, есть ряд тонкостей.
Как показала практика, хорошие результаты совместных кадров получаются на Flux, но нейронка упрямо "перемешивает" лица. Пока мы не нашли адекватных способов этого избежать, поэтому после генерации кадра нужно пройтись инпейнтом по лицу персонажей и "доработать" картинку с помощью обычной, не совмещенной, модели у каждого перса. Вот такой своеобразный костыль.
Добавление наборов данных
img — создайте папку (значения подставляете в зависимости от данных и обучающей модели SDXL/Flux)
ХХ_Instance Class где:
- ХХ - это число повторений. Для моделей SDXL число повторений следует установить на значение 25. Для модели Flux - 1.
- Instance - это уникальный токен или часть триггерной фразы, которую потом нужно будет вводить в промпте. Некое уникальное непереводимое сочетание символов. Например: ohwx или asd, или другие, которые вы можете придумать сами. Здесь можно найти список разных уникальных токенов, чем ниже токен в списке, тем он уникальнее. Использовать лучше те, что ближе к концу.
- Class — класс ваших изображений. Иначе говоря, изображение чего вы обучаете. Для модели мужчины используется man, для женщины woman, для кота cat, для собаки dog.
- Примеры названий папок для SDXL — 25_ohwx woman, 25_ohwx man
- Примеры названий папок для Flux — 1_ohwx woman, 1_ohwx man
- Для парных Лора: 1_ohwx woman, 1_asd man, 1_bnha man. Обучить на 3-х персонажей и более в одной лоре можно, но лица будут перемешиваться среди представителей одного пола ещё больше, чем у представителей разных полов.
Внутри папки разместите
Training images — ваши тренировочные изображения (13 штук). В каждому изображению создайте файл .txt с таким же названием, как и у изображения. В файле txt добавьте описания изображения. Я обычно пропускаю этот шаг при обучении модели на 1 персонажа. При обучении нескольких персонажей я добавляю сведения о триггерной фразе. Например "photo of asdman". Без пробела в триггерной фразе.
Пример содержания папки img/
1_ohwx woman
Пример содержания папки
img для создания лоры с 3 персонажами. Для 1 персонажа будет только 1 папка.
reg — при обучении модели на SDXL создайте в папке reg папку с 325 изображениями класса, на который вы обучаете.
1_Class
- Х - это число повторений. Для моделей SDXL число повторений следует установить на значение 1.
- Class — класс ваших изображений. Для модели мужчины используется man, для женщины woman, для кота cat, для собаки dog. Соответственно в папке вам необходимо разместить 325 изображений соответствующего класса. Ссылка на скачивание: мужчины, женщины.
- Примеры названий папок для SDXL — 1_woman, 1_man
Пример содержания папки reg
Пример содержания папки reg/
1_woman
model — из данной папки мы будем забирать обученную модель.
log — сюда будут сохраняться log-файлы обучения. Можно в целом не создавать и не указывать к ней путь.
Часть 3. Мини-обучение по улучшению скриншотов из игры в рамках подготовки Dataset.
В целом алгоритм действий достаточно прост, для этого нам понадобится Fooocus и одна из базовых моделей SDXL.
В целом вы можете попробовать доработать и на флюксе в сварме, но это будет дольше по времени и нужно будет повозиться немного с настройками. Фокус делает это немного быстрее и особой разницы на первом этапе нет. Чаще всего после получения первой модели для флюкса или фокуса для улучшения генерации нужно сделать повторное обучение, заменив тренировочные изображения на новые, уже сгенерированные во флюксе или фокусе. Это позволит избавиться от симских артефактов и получать ещё более крутые изображения. Следующий этап улучшения будет только обучение на DreamBooth, вместо LoRA, но если Лора это моделька маленькая, то Дримбут это полноценная дообученная модель, которая на флюксе весит все те же ошеломительные 11-16 Гб, но обладает лучшим качеством и креативностью в генерации.
Итак начнем.
1. Открываем Фокус и идем во вкладку
Inpaint or Outpaint. Как найти эту вкладку читаем
тут.
2. Подгружаем ваше изображение сима, предварительно скадрированное и обрезанное до размера 1024х1024
3. Можно подгрузить маску, на которой необходимо закрасить белым все, что должно подвергнуться изменениям. А именно - волосы и одежда сима. Либо можно закрасить в интерфейсе. Там есть в окошке подсказка с горячими клавишами, чтобы приблизить или отдалить изображение, а так же изменить размер кисти.
4. Выбираем
Improve Detail (face, hand, eyes, etc.) и вписываем в поле основного промпта и Inpaint Additional Prompt подсказку. Например: "black hair, brown leather jacket". Импрув может перерисовать по запросу, если там есть что то похожее по оттенкам. Например, черную футболку он может перерисовать в коричневую кожанку, и платье, а вот в белую футболку не может. Т.е. он примерно считывает общий оттенок и контур и меняет в его рамках. В основное поле промпта помимо этого можно указать woman, 8K, anti-blur, contrast, DSLR, contrast, чтобы добавить реалистичности.
В сложных случаях, если импрув не может перерисовать так, как нужно вам - попробуйте использовать Modify Content, но будьте осторожны, он перерисовывает полностью, меняет позу и масштаб тела и в результате может быть не так актуален.
Пример настроек.
5. Во вкладке Base Model выбираем любую базовую модель. Мне нравится
albedobaseXL для одежды и волос, и
juggernautXL для области вокруг глаз. Последняя модель будет доступна при установке фокуса сразу.
А теперь жмем генерацию и выбираем тот вариант, который понравится больше. При необходимости отредактируйте маску, т.к. у нее есть небольшое размытие и она может задевать и размывать контуры лица. Я обычно рисую вручную в фокусе и чуть-чуть не довожу до края, чтобы размытие затронуло край волос, и не дошло до лица (например в зоне подбородка, где есть резкий переход цвета), и слегка заезжаю на лоб, чтобы сделать более плавный переход.
Так же действуем и с глазами. Я обвожу вокруг белка, чтобы сохранить разрез глаз и заменить ресницы. Можно заменить зрачок, чтобы был, например, более естественный. Но здесь сложно добиться одинакового цвета. Если очень хочется, можно поменять в фотошопе. Флюкс оттенок глаз запоминает достаточно хорошо, поэтому от того, на сколько вы качественно подготовите датасет будет зависеть итоговый результат.
Пример обработанного изображения
Улучшайте изображения до получения приемлемых результатов.
Часть 4. Обучение модели.
- Для модели SDXL я прикрепляю конфиг, который делала сама. Он подходит для видеокарт серии 30хх, 40хх, с объемом видеопамяти 16 Гб (для тех которые поменьше вроде бы тоже подходит, если ваши параметры отличаются, посмотрите обучающее видео, чтобы внести правки и адаптировать конфиг под себя. Я не буду подробно расписывать настройки, укажу лишь те пункты, которые требуется поменять в путях.
- Для моделей Flux конфиг можно скачать, оформив подписку на Patreon у его автора. Ссылку можно найти в описании к видеоролику. По понятным соображениям выкладывать в общий доступ платный ресурс я не могу.
Там достаточно много различных конфигов, которые адаптированы под видеокарты с разным объемом памяти и протестированы на все возможные настройки, чтобы получать наилучшие результаты при обучении LoRA на флюксе. На картах с 16 Гб видеопамяти мы используем вот этот конфиг
Rank_8_15600MB_4_89_Second_IT. Для корректной работы перед началом обучения необходимо перезагрузить компьютер и закрыть все программы, которые могут съедать память. На начало обучения использование выделенной памяти должно быть в пределах 0,5-0,6 Гб, а с началом обучения использование возрастет до 15,6-15,7 Гб, но следите, чтобы не начало увеличиваться потребление общей памяти графического процессора. Обычно оно около 0. Если значения там поползли вверх, значит вам не хватило памяти и время обучения будет увеличено в несколько сотен раз. Рекомендуется проверить, закрыто ли у вас все лишнее и перезапустить обучение, либо выбрать менее требовательный конфиг. Смотреть потребление памяти можно в Диспетчере задач во вкладке Производительность.
С конфигом единственное, что вам нужно будет сделать, это обновить пути к папкам и моделям и дать название будущей модели.
Разберем на примере конфига Flux, т.к. для SDXL используются те же поля для изменения.
1. Переходим во вкладку LoRA! Не забываем про это, ведь мы обучаем LoRA.
2. Во вкладке Configuration жмем на значок папки и выбираем ваш конфиг, будь то конфиг для Флюкса или для SDXL.
3. Конфиг подгрузится, и после того, как вы обновите пути, можете нажать на значок дискеты и сохранить настройки. При следующем запуске вам останется только поменять имя вашей будущей модели.
4. Вкладка
Model:
- Pretrained model name or path - указываем путь к модели. flux1-dev.safetensors для флюкса, sd-xl_base.safetensors для SDXL
- Trained Model output name - имя модели. Указываете любое, которое поможет вам сориентироваться.
- Image folder (containing training images subfolders) - путь к папке img
5. Вкладка
Folders
- Output directory for trained model - путь к папке model
- Logging directory (Optional. to enable logging and output Tensorboard log) - путь к папке log
- Regularisation directory (Optional. containing regularisation images) - путь к папке reg, при использовании регуляризационных изображений (Только для SDXL!! При обучении на флюксе оставить пустым)
6.
Для обучения на Flux дополнительно нужно скачать и прописать путь к 3-м дополнительным моделям. Во вкладке
Parameters - Flux.1 (листаем почти в самый низ). Для SDXL это не нужно.
Все необходимые файлы можете скачать по ссылкам или найти в интерфейсе матрикса и проложить путь к ним.
Поля для изменения в конфиге.
Собственно говоря вот и вся магия. Жмем кнопку Start Training и ждем. В консоле матрикса можно следить за процессом обучения. Когда обучение завершится счетчик времени закончится и высветится надпись Training has ended. При использовании того же конфига обучение пройдет 2600 шагов при использовании 13 тренировочных изображений. Если вдруг количества шагов стало больше, то скорее всего вы сделали что-то не так.
В следующем гайде поговорим о том, какую эпоху модели выбрать после завершения обучения. В SDXL как правило мы обучаем на 8 эпохах, а во Flux, поскольку мы не используем регулировочные изображения - ставка идет на количество эпох - и их уже 200.
Эпохи (epochs) — это один из ключевых параметров при обучении нейросетей, который определяет количество полных проходов через весь тренировочный набор данных. Т.е. простыми словами, через сколько кругов
ада пройдут ваши изображения, прежде чем нейронка их запомнит.