whargarbl
693 subscribers
1.86K photos
193 videos
11 files
733 links
Последнее убежище кожанных мешков
Download Telegram
Наши люди: если уж тренят Ламку, то сразу на сайтах с проститутками.
https://huggingface.co/aeonium/Aeonium-v1-BaseWeb-1B/

Будьте как Олег, в жопу сейфити

Шучу конечно, но модель совсем анцензоред, да и недообучена еще
Full - finetune SDXL

Не так страшен черт как его малюют. Тема холиварная ввиду того что процесс этот долгий и никто по сути не ставит экспериментов - неделю потренируем с такими параметрами, а потом повторим чуть изменив один из параметров и посмотрим разницу. Парметров десятки, каждый трейн стоит времени/денег если кто то и проводит такие эксперименты делится ими не спешит. А тем что делятся в бумагах - тому доверия нет, есть мнение что там часто хрень. Только кекают важно в интернетах мол я то знаю как на самом деле надо. Да и оценка результатов - нет шкалы. Нет модели которая скажет этот результат более аестетик. Или менее переобучен. Поэтому будет субъективное описание как трейню я. Накидывайте в коменты свой опыт если пожелаете похоливарить.

Часть 1. Датасет

Все любят тренить модельки. Запустил скрипт и ждешь неделю. Чё делаешь? Я треню. На смом деле нет, ничего. Никто не любит собирать датасеты и особенно делиться ими. Есть пару проблем - катастрофик фогетинг - это когда модель выучивает что то новое, но забывает что то старое. Второе это катастрофиг меморизэйшен (сам придумал, кек), переобучение другими словами, либо запоминает ненужную специфику.

Например, если обучить на иллюстрациях какой то концепт - фотки станут похожи на рисунки и в др концептах. Или если учить на каком ть аниме - оно например часто в пастельных тонах - вымываются цвета - все становится пастельным. С этого нюанса и сатртовала моя линейка Colorful - жутко бесило все выцветшее в ранних SD. На самом деле это правится. Те можно обучить на аниме иллюстрациях, потом дообучить на фотках и сбалансировать ущерб. Но исправлять труднее (наверно), не всегда есть возможность обучить какому то концепту сразу верно, тк банально нет датасета. То же аниме или там хентай - это иллюстрации. НУ короче, собирался кратко а получается много. Вам нужно собрать сбалансированный датасет (точнее постараться, это не возможно). Пойдем от обратного - типовые ошибки.

Мои типичные ошибки.

Скачаю датасет генераций из миджорней.

Это самая плохая идея. То что публикуют это мякотка - на самом деле 90% генераций в миджорней кривое аляповатое говнище. С кривой анатомией и тп. Вы выучите все негативное в тч и даже в первую очередь - и если цвета исправить проще - то анатомию исправить сложно. Яркий пример - проект Vodka или что там еще было на MJ - все говно. Тот же Далли-3 - тоже говно (в среднем). Простите что без примеров. ЯндексАрт - только всех победил.

Возьму фотографии какого ть фотографа. Условный Skot. Фотки классные - что может пойти не так? Они классные по отдельности. У всех людей есть биас. Например он предпочитает определенное освещение - его незаметно глазом, а модель подхватит сразу. И все будет в одном стиле. Или Zena Holloway - класссно фоткает. Но тетки одни и те же и всё больше под водой - модель всех потом будет с пузыриками делать. И так далее.

Возьму синематик. Кадры из фильмов. Та же проблема что со стилем. В синематике средний кадр очень тёмный. Это как то незаметно когда фильм смотришь - а модель все затемнит. Вобщем проблема понятна, не бывает идеальных датасетов.

Возьму ка я тогда меленький датасет на 100 - 200 имаджей и на нем потренируюсь. Тоже так нельзя, модель запомнит очень сильно концепт, минимальный размер датасета от 1к.

Обучение на шакальных джипегах. Джипег не так плох как его малюют. Но когда он примерно 95 квалити пожат. Часто жмут в 75 (это дефолт) а потом пережимают с бОльшим разрегением. Формально jpg норм - пикселей гора, но внутри шакалы. Это можно увидеть только глазками.

Обучу на 1024 скриптом от диффузеров. Лютое говно. Диффузеры это базовые скрипты - они показывают как, им все равно на результат. Те учить в одном разрешении тупо нельзя, это миф что модель сама поймет как портрет скомпоновать обучившись на квадратных фотках. Если она не видела портретов она просто 2 квадрата состекает в прямоугольник - будут у вас 2-х головые Янусы.
🐳2
Итак, идеальный датасет - это сбалансированный по цветам, без повторов по стилю и персонажам, в разных разрешениях набор первокласных имаджей от каждого из элементов которого слюнки текут. В жизни таких не бывает, поэтому придется писать скрипты, обкачивать/собирать, и отсматривать вручную

Как мы уже говорили таких не бывает, поэтому я теперь собираю концепты в папки - обучаю концепту - потом смотрю можно ли исправить или проще откатиться на шаг и внести коррективы в датасет. Иттеративно.

Чтобы вам было веселей - приложу картинку с примером переобучения на иллюстрациях (пытался обучить плохому) и попыткой исправления на фотках. Несложно видеть что проще откатиться на 13 версию и продолжить с нее чем исправить перееобучение.
🐳1
Full - finetune SDXL

Допустим вы набрали имаджей и разложили их ровными рядами по папочкам. Время майнить описания картинок.

Часть 2. Каптионилка

Что то зря я это затеял, ну ладно, пока не остыл. Злые языки говорят в моих моделях лучший промпт фолоу. И это действительно так (вот она - мания величия)

Итак есть куча прог для имадж 2 текст. Популярные модели которые все советуют это: GIT, Blip и Blip2

Объединяет их одно: это всё лютое беспомощное говно. Их пишут всякие корпорации типа майкрософт или сейлзфорс - и тестируют они или на какм ть CoCo датасете или на способность мышку от компьютера отличить (чтоб в рекламу вставить).

Бесконечно далеки они от народа. Что приводит к тому, что сова летящая под дождем - превратится в черепаху плывущую под водой. Я уже молчу про medium breasts / puffy nipples и прочие нюансы - все эти модели принципиально не умеют в nsfw - короче, в топку

Есть Llava и Gpt4v - тяжелые/ платные, в топку

Есть Ofa от китайского брата (раньше ее юзал) Она получше Blip2 - но собирается тяжело и недавно появились альтернативы лучше. Первая это MoonDream, вторая старый добрый wd_tagger3 от смеющегося волка.

Мундрим не умеет в nsfw, но это взрослая модель, и ее можно подтюнить промптом - чтобы лна генерировала более плотное описание того что видит на картинке, пример промпта: «describe main idea from image , melding specified style into the narrative. For personas, spotlight distinctive feature and another feature and another feature. Infuse with atmospheric detail - weather element, time of day lighting at compact background description.»

Сам скрипт для MoonDream несложно набросать GPTшкой (не руками же писать в 2024). Ну а wd_tagger постоянно развивается. В совокупности они великолепно дополняют друг друга.

Теперь, запрыгивая вперед, важно! Не просрать все полимеры и обучать модель вместе с текст енкодером. Текст енкодер уже обучен и обучен неплохо, поэтому чтобы не испортить - я учу с на порядок меньшим LR:
--train_text_encoder --learning_rate_te1 4e-8 --learning_rate_te2 4e-8

И делаю это обычно только на претрейне (об этом ниже). Второй возможно важный момент - это поднять макс длинну токенов в один присест ( по дефолту она оч маленькая, 75) --max_token_length 225

Вообще енкодеров в SDXL два, маленький от SD1.5 - обученный на описаниях в стиле тегов, и новый-кленовый обученный на натуральном языке. В теории можно учить их раздельно, на практике - и так сойдет

ЗЫ: Параметры для sd-scripts от Mr Kohya. Об этом в след части мб

Пример ниже
🐳3
Например мы хотим чтобы модель научилась генерить открытую грудь на публике:

70% успеха это сиськи (датасет) и 30 - чтобы каптионилка подсветила «bare chest - мундрим и open_clothes - wd_tagger3»

moondream:
A woman in a short skirt and a white jacket is standing on a street, posing for a picture. She has a bare chest and is wearing a necklace. In the background, there are a few other people and cars, including a car parked on the side of the street..

wd tagger:
realistic, jewelry, motor_vehicle, nipples, car, breasts, denim_skirt, skirt, photorealistic, 1girl, open_clothes, necklace, brown_hair, denim, outdoors, earrings, open_shirt, shirt, long_hair, navel, tree, solo_focus, medium_breasts, looking_at_viewer, no_bra, day, photo_background, pencil_skirt, road, blue_skirt, miniskirt, jacket, brown_eyes
🐳2
Full - finetune SDXL

Часть 3. Трейн

Есть скрипт от диффузеров. Он тренит квадраты в 1024 - даже не рассматриваем всерьез. Есть OneTrainer от Negorar - его многие хвалят, но по моему мнению он вторичен. Есть куча хипстерского типа easytrain и тп - не ведитесь. Все профессионалы контрибутят в скрипт от Mr Kohya - там самая мякотка на острие инноваций. А также абсолютно упоротая документация наполовину на японском. Есть еще UI для него, но это уже не хардкорно

1. Пулим репу https://github.com/kohya-ss/sd-scripts

Недавно привезли совмещение форвард/бэквард пасс - экономит четверть GPU:

git ls-remote --refs origin
git fetch origin refs/pull/1259/head:1259
git checkout 1259

2. Делаем json со списком картинка описание (в папке лежит txt с таким же именем)

python3 ~/sd-scripts/finetune/merge_captions_to_metadata.py ~/dataset/nsfw_3d_loldamz ~/dataset/nsfw_3d_loldamz.json --caption_extention .txt --recursive --full_path

Результат: ~/dataset/nsfw_3d_loldamz.json

3. Генерим латенты. Он пропустит картинку через вае и сделает файл в латентном пространстве. Нет времени объяснять. Также скрипт пожмет на бакеты по разрешениям с шагом 64

python3 ~/sd-scripts/finetune/prepare_buckets_latents.py ~/dataset/nsfw_3d_loldamz ~/dataset/nsfw_3d_loldamz.json ~/dataset/nsfw_3d_loldamz_lat.json ~/auto1111/stable-diffusion-webui/models/Stable-diffusion/animatrixxl_v12.safetensors --batch_size 4 --max_data_loader_n_workers 4 --max_resolution 576,1280 --min_bucket_reso 576 --max_bucket_reso 1280 --bucket_reso_steps 64 --full_path --recursive

Результат: ~/dataset/nsfw_3d_loldamz_lat.json

4. Запускаем трейн

python3 ~/sd-scripts/sdxl_train.py --gradient_checkpointing --gradient_accumulation_steps=1 --cache_latents --cache_latents_to_disk --lr_scheduler=constant_with_warmup --optimizer_type=adafactor --optimizer_args scale_parameter=False relative_step=False warmup_init=False --save_precision=fp16 --save_model_as=safetensors --output_dir=model --sdpa --metadata_title=animatrix --metadata_author=recoilme --min_snr_gamma=5 --adaptive_noise_scale=0.02 --learning_rate=8e-7 --noise_offset=0.1 --logging_dir=log --output_name animatrixxl_v13 --save_every_n_epochs=1 --max_train_epochs=8 --sample_sampler=euler_a --seed=42 --sample_prompts=prompt.txt --sample_every_n_epochs=100 --pretrained_model_name_or_path ~/auto1111/stable-diffusion-webui/models/Stable-diffusion/animatrixxl_v12.safetensors --train_data_dir ~/dataset/nsfw_3d_loldamz --min_bucket_reso 576 --max_bucket_reso 1280 --bucket_reso_steps 64 --resolution 1024 --in_json ~/dataset/nsfw_3d_loldamz_lat.json --sample_at_first --max_token_length 225 --train_text_encoder --learning_rate_te1 4e-8 --learning_rate_te2 4e-8 --fused_backward_pass --train_batch_size 10 --log_with=wandb --save_last_n_epochs 2 --full_bf16 --mixed_precision=bf16

Некотрые параметры (тут все субъективно - это те к которым я пришел)

gradient 1, тк мы юзаем fused_backward_pass (экономим память)
adafactor, тк мы юзаем fused_backward_pass (экономим память)
bf16 - (экономим память)
sdpa - (экономим память)
learning_rate=8e-7 - первый прогон - первые 8 эпох, делаем «с грубым LR», дефолтный 4e-7
snr_gamma, noise - тк надо корректировать ошибку с чистотой цветов
text_encoder - иногда треню только на пристрелочном прогоне или если есть новые концепты (слова)

train_batch_size - 10 влазит на 16 GPU в 1280 резолюшен, но отключаю превью, sample_every_n_epochs=100, тк превью жрет GPU - треним вслепую. Можно убрать батч сайз до 1, и включить превьюшки, но дольше ждать. Также можно убрать bf16 - и тренить в fp32 - но с батч 1 и без превью на 16 GPU

in_json ~/dataset/nsfw_3d_loldamz_lat.json - json с латентами

Треню обычно 24 эпохи. Дальше по обстоятельствам. Лучше недотренить чем перетренить. 8 - можно зажечь быстро/грубо на 8e-7, следующие 16 - на 4e-7. Финалочкой можно полирнуть на 1e-7 эпох на 8 - чтобы засосать все детальки из датасета. Глазки/ручки/губки

За первые 8 эпох схватывает концепт кмк. Стиль, формы, цвета. Но это всё не точно
Так, ну вроде всё. С вас 300к
👀2🐳1🌚1
🗿2
POV: найди ошибку округления
Забавное, под капотом StoryDiffusion, кучка if’ов и старый добрый ip-adapter

# Attention processor for IP-Adapater for PyTorch 2.0.
…
# skip in early step
if cur_step < 5:
hidden_states = self.__call2__(
attn, hidden_states, encoder_hidden_states, attention_mask, temb
)
else: # 256 1024 4096
random_number = random.random()
if cur_step < 20:
rand_num = 0.3
else:
rand_num = 0.1

Помоги Даше найти где байтденс спрятал магию:
https://github.com/HVision-NKU/StoryDiffusion

Хотя.. Шашлык сам себя не замаринует. Отличной среды и хорошо отдохнуть!
🐳1
У-е, фигачу мульт на конкурс, естимейт 3 часа

Задание: «Создать красочный музыкальный клип»

эээ.. ну.. красочни..? Ну, для ночи..
🐳2
Вечером расскажу как превратить Deforum в StoryDiffusion при помощи простой советской…
Media is too big
VIEW IN TELEGRAM
Итак, сторидиффужен своими руками.

Немножко скликбейтил, не совсем тоже самое, потому, что:
- дефорум каждый раз будет извлекать эмбединги из предыдущего изображения, тратя бесценные ресурсы/время, можно сделать лучше (но надо кодить)
- сторидиффужен это не просто ip adapter, там есть еще немного магии с тем с каких слоев снимать этеншен
- байтденс обещает выложить веса модели для консистентной видеогенерации (пока нет) - скорее всего это будет еще один слой контроля а-ля темпоралнет

Но. В дефорум уже сейчас можно сделать:
- более консистентное лицо
- решить проблему с выцветанием цветов при img2img

Обоих зайцев можно завалить добавив модель ip-adapter_sdxl_vit-h с препроцессором ip-adapter_clip_sdxl_plus_vith

Я ставлю вес 0.65 и применяю степ с 0.7 до 0.8 потому что наркоман люблю красочные/расслабленные генерации

Тк Lightning модель на 10 шагов - айпи адаптер применяется только на 7 шаге

Модель ставим в луп фидбек. Генерация замедлится в 2 раза. Это видео собиралось 4 часа вместо 2. Заток какие сиськи краски!

В комменты положу настройки.

Ну и чтоб два раза не вствать - набрел на стендэлон нормальный тайлед апскейлер с нормальными моделями для нищебродов работающий на ЦПУ
https://www.upscayl.org/
🐳1
Быстрей. Дешевле. Человечней.
🐳1