Тренировка датасета под хохлому - Apkawa/stable-diffusion-wiki-awesome GitHub Wiki
Дневникогайд. Все операции производятся на Debian/Ubuntu
Смотрим чтобы изображения не были меньше 512х512
Затем удаляем дубликаты
findimagedupes -R -i 'VIEW(){ for f in "$@";do echo $f;done }' -- /path/to/dataset/ | grep .txt -v | xargs -r -n 1 -I {} rm {}
Визуально проверяем дубликаты, т.к. поиск дубликатов может ошибаться.
Подготавливаю структуру папок датасета в формате {dataset_name}/{repeats}_{instance_prompt} {class_prompt}
.
В датасете есть еще и изображения с прозрачным фоном, поэтому проверю варианты с белым фоном и черным
khokhloma
|_ 10_khokhloma black_pattern
|_ 10_khokhloma white_pattern
Далее конвертируем изображения
Для белого фона
mogrify -resize 512x512 -format jpg -background white -alpha remove -alpha off -path "khokhloma/10_khokhloma white_pattern" /path/to/raw dataset/
Для черного фона
mogrify -resize 512x512 -format jpg -background black -alpha remove -alpha off -path "khokhloma/10_khokhloma black_pattern" /path/to/raw dataset/
Визуально проверяем что сконвертировалось без особых артефактов, неудачные удаляем
Есть несколько утилит которые помогут подготовить датасет
- BooruDatasetTagManager - к сожалению она работает только в винде, под вайном и mono выдает ошибки. (в планах мб запилить кроссплатформенный аналог на расте, как раз нужная тулза будет)
- stable-diffusion-webui-dataset-tag-editor - аддон для автоматика, им и воспользуемся
Для начала мы для всех изображений в датасете назначим:
khokhloma, traditional russian pattern
Далее либо заполняем вручную, либо воспользуемся автоматическим заполнением. Например, BLIP выдает a red and yellow floral pattern on a black background with a red background and yellow flowers on the bottom
что пока что устраивает для первых экспериментов
В итоге для каждого изображения создается одноименный txt файл с содержимым вида
khokhloma, traditional russian pattern, a black and yellow floral pattern with red flowers on it's side and green leaves on the top
Для начала пробуем обучить LoRa как самый быстрый способ. Используем bmaltais/kohya_ss
- Базовая модель -
sd-v15-pruned-emaonly
-
Lora Type
- Standard -
Epoch
- 20, сохраняем каждые 5 эпох -
network rank (dim)
- 32 -
network alpha
- 16 -
train batch size
- 1 (больше не получается для 6Гб ноутбучной видеокарты, сваливается в ООМ) -
save_precision
,mixed_precision
- fp16 -
learning rate
- 0.0001 -
LR scheduler
- cosine -
Optimizer
-AdamW
Для введем сокращенную запись основных параметров в тексте:
n{network rank}a{network alpha}e{epoch}
Например: n32a16e3
Общий шаблон именования модели:
{subj}_{base_model}_n{network rank}a{network alpha}
(хорошо было бы если оно само бы автоматом подставлялось, а то постоянно забываешь переименовать и возникает путаница)
Выбираем подходящий промпт, например:
(masterpiece), (high detail),(ultra-detailed), featuring flowers and circles, blue background, multiple scattered and arranged flowers, blue and red and yellow and green color scheme, with square symmetrical composition,(1girl,white hair), khokhloma, traditional russian pattern
Negative prompt: ng_deepnegative_v1_75t, EasyNegative
Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 793734237, Size: 512x512, Model hash: 61e23e57ea, Model: mixProV4_v4
Тыкаем в нужную lora, устанавливаем силу в 0.7 и смотрим что вышло.
Делаем матрицу для оценки работы lora и выбора подходящей модели
- Нужно иметь расширение sd-webui-additional-networks
- В настройках расширения не забудьте указать путь к Lora
Открываем Additional Network и указываем все наши lora, в том числе и промежуточные, но не включаем
Включаем скрипт X/Y/Z plot
, выбираем AddNet Model 1, нажимаем кнопку рефреш и дописываем None
AddNet Weight 1
пишем 0.3-1.1 [5]
--- перебор от первого числа до второго, 5 чисел.
SPOILER
Получаем вот такую матрицу:
SPOILER
Можно еще проверить на multiple scattered and arranged flowers, featuring flowers and circles, black background, black and red and yellow and green color scheme, (masterpiece), (high detail),(ultra-detailed), (khokhloma:1.1), traditional russian pattern
и включеным tiling
SPOILER
Тут мы видим что самая оптимальная лора оказалась на 5 эпохе, 5 эпох*10 проходов*89 изображений=4450 шагов оптимизации
. Выше уже оказались перетренированы. Удаляем остальные лоры кроме 5, остальные плохие получились.
Следующий вариант пробуем сохранить от 1 до 7 эпох, возьмем другие значения сети, остальные значения не трогаем
-
network rank (dim)
- 32 -
network alpha
- 32
SPOILER
multiple scattered and arranged flowers, featuring flowers and circles, black background, black and red and yellow and green color scheme, (masterpiece), (high detail),(ultra-detailed), (khokhloma:1.1), traditional russian pattern
Negative prompt: ng_deepnegative_v1_75t, EasyNegative
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 2806774085, Size: 512x512, Model hash: 9aba26abdf, Model: deliberate_v2
SPOILER
(masterpiece), (high detail),(ultra-detailed), featuring flowers and circles, white background, multiple scattered and arranged flowers, black and red and yellow and green color scheme, with square symmetrical composition,(1girl,white hair), (khokhloma:1.1), traditional russian pattern
Negative prompt: ng_deepnegative_v1_75t, EasyNegative
Steps: 10, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 2006828274, Size: 512x512, Model hash: 61e23e57ea, Model: mixProV4_v4
SPOILER
(masterpiece), (high detail),(ultra-detailed), featuring flowers and circles, white background, multiple scattered and arranged flowers, black and red and yellow and green color scheme, with square symmetrical composition,(1girl,white hair), (khokhloma:1.1), traditional russian pattern
Negative prompt: ng_deepnegative_v1_75t, EasyNegative
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 2534330414, Size: 512x512, Model hash: 6ce0161689, Model: v1-5-pruned-emaonly
Делаю вывод что 2 эпоха наиболее оптимальная
При повышении силы выше 1 картинка не разваливается и все еще остается нормальной. В данном примере использовалась сила 1.7
1girl, reading book under tree, flowers and berries, black background, full body portrait , (khokhloma:1.5), traditional russian pattern, <lora:khokhloma_sd15_s64_v1.1-000002:1.7>
Negative prompt: EasyNegative,Doge comics,blush,doge,Doge comics
Steps: 30, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 677295882, Size: 512x512, Model hash: 61e23e57ea, Model: mixProV4_v4
-
network rank (dim)
- 64 -
network alpha
- 32 -
Optimizer
- Adafactor - без этого параметра модель получается битой с loss > 1
Вывод - оптимальная модель - вторая эпоха, выше смотреть нет смысла.
SPOILER
1girl, white hair, reading book under tree, flowers and berries, black background, full body portrait , (khokhloma:1.5), traditional russian pattern
Negative prompt: EasyNegative,Doge comics,blush,doge,Doge comics
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 677295882, Size: 512x512, Model hash: 61e23e57ea, Model: mixProV4_v4
-
network rank (dim)
- 64 -
network alpha
- 64 -
Optimizer
- Adafactor - без этого параметра модель получается битой с loss > 1. + OOM
сделал 3 эпохи, обнаружил что потенциал не исчерпан, нужно проверить дальше. пока что 1 эпоха выглядит интересно, но и остальные тоже норм
SPOILER
1girl, white hair, reading book under tree, flowers and berries, black background, full body portrait , (khokhloma:1.5), traditional russian pattern
Negative prompt: EasyNegative,Doge comics,blush,doge,Doge comics
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 677295882, Size: 512x512, Model hash: 61e23e57ea, Model: mixProV4_v4
-
network rank (dim)
- 128 -
network alpha
- 128 -
Optimizer
- Adafactor - без этого параметра модель получается битой с loss > 1. + OOM
Натренировать не удалось, не хватает VRAM
Пробуем другие типы LoRa
-
network rank (dim)
- 32 -
network alpha
- 1
Остальные параметры те же
SPOILER
2 и 3 выглядит интересно и трудно отдать предпочтение каждой из них.
-
network rank (dim)
- 16 -
network alpha
- 0.3
4 эпоха выглядит наиболее оптимальной. Общую стилистику примерно передает, но детали уже потерялись.
SPOILER
Запустить не удалось, все время упирается в нехватку vram
-
network rank (dim)
- 4 -
network alpha
- 1 -
Learning rate
- 0.005
Остальные параметры те же
SPOILER
Выводы следующие:
- Наиболее предпочтительная модель - SD1.5 pruned. Остальные не очень. Большие надежды возлагал на anyLora.
- Обычная LoRa лучше всего получается с параметром n32a32 (в названии закралась ошибка). С понижением
network alpha
до 16 теряются детали. Попробую еще n64a32 и n64a64 - LoCon в основном сохраняет стилистику но не сам узор, трудно отдать предпочтение, но наиболее близкая по духу получается
n32a1e2
Выкидываем все попытки с другими моделями, оставляем SD15 и обучаем еще с другими параметрами выше dim 32
SPOILER
Отдельно протестируем возможность передать стиль через TI, возможно паттерны уже есть в модели, но она еще не знает что это такое.
-
Token string
- khokhloma -
Init world
- khokhloma, traditional russian pattern, russian folk pattern -
Vectors
- 42 (на самом деле хз как правильно считать вектор) -
Template
- style template -
Epoch
- 20
Остальные параметры такие же
- Традиционные китайские узоры - LoRA - На китайском, но в целом через гугл-переводчик все понятно. Изначально вдохновлен этим гайдом
- Lora Complete Idiot Guide
- Гайд по LoRA от anon
- Текстуальная инверсия и Dreambooth SD Optimised
- https://rentry.org/sdg-link#lora