Negative prompt нейросетей или Немного о магии (бодихоррор, 18+)
Автор: wayerrВ продолжение предыдущего поста.
Мне там в комментариях подсказали некоторые полезные вещи, например clip skip а также покрутить vae и результат немного поменялся, но там же возник вопрос про negative propmpt (далее просто NP).
Если кто не знает, то у нейросетей семейства stable diffusion (далее просто SD) помимо обычного поля для запроса (он же prompt), есть поле для негативного запроса (NP), который позволяет исключить то что нам в результирующей картинке не нужно.
По большей части я эту штуку использовал, но результат меня редко удовлетворял, но она вполне работает, если что-то назойливое появляется на картинке.
Однако, так как нейросеть мягко говоря не очень дружит с анатомией, а "как нейросеть работает мало кто знает", то ещё во времена изначальной SD у пользователей нейросети возникла идея насовывать в NP всякого мусора а-ля "плохая анатомия, плохая! не приходи больше!", похожего на магические заговоры айтишников, дабы уберечь картинку от нейропорчи.
Почему эта хрень была популярна — ответ лежит где-то в области нюансов восприятия от компьютерной техники далёких. Поскольку NP картинку определённо меняет, а в лучшую ли сторону - вопрос субьективный. Такие вопросы проводятся каким-нибудь "слепым тестированием". С другой стороны всякий может взять и нагенерить десяток картиной с одним NP и с "бестолковым" NP и сравнить. Этим я и займусь в этом посту.
Однако, в комментариях мне заметили, что разработчики более новой модели специально обучали свою модель чтобы она понимала эти айтишные заговоры и трактовала верно.
В принципе это вполне реально, так как нейросеть обучалась на куче изображений с надписями и вотермарками, которые нетрудно автоматически выделить и сказать нейросети, что это "фу бяка". Никакой магии в этом нет, а вылезающие надписи действительно огорчают. Но вот реально ли это с пальцами?
Для эксперимента я скачал anything-v3-better-vae, настроил clip_skip=2 и долго придумывал тестовый запрос.
typing on the keyboard, hand focus, keyboard, computer, hacker, highres
Steps: 30, Sampler: DDIM, CFG scale: 12, Seed: 1958130893, Size: 512x512, Model hash: 4e232c5e8a, Batch size: 4, Batch pos: 0, Clip skip: 2
Что и ожидалось. Теперь начинаем наш конкурс.
1.
lowres, text, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry
Нет, вы видели? Видели, на второй пикче рука похожая на настоящую? Это невозможно. Магия?
2.
lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry
Ручка испортилась! Это безобразие.
Это были официальные NP со страницы novelai, на которые мне давали ссылку. Как видно, они радикально меняют стиль, и влияют на анатомию. Но так ли они влияют, как это в них написано?
Вообще, тут слишком мелкая выборка - по хорошему надо нагенерить сотню картинок по разным запросам, а потом сидеть и оценивать, причём не зная какая с каким NP (то самое слепое тестирование). Но навскидку - один фиг.
Давайте попробуем теперь придумать свои NP
3.
сarrot, antarctic, moon crater, fluffy snake, flying centaur
Слева даже больше похоже на руку, чем в предыдущих. Вторая мрачна. А в целом стиль картинки поменялся, не заметили? На деле это объяснимо.
4.
octopus, squid, tentacles, snake, worms, tail, hydra, medusa gorgona
С этим NP я я решил, что раз нейросеть "узнаёт" (а она как минимум в image2image узнает объекты, хоть и путает порой), то может сделать так? Сложно сказать есть ли эффект, но прикольно.
5.
lowres, text, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, octopus, squid, tentacles, snake, worms, tail, hydra, medusa gorgona
Тут я интересовался можно ли вернуть тот стиль, но что-то не похоже. Зато видно как исчезло размытие.
Выводы (очевидные и нудные):
- Как обычно, если множество людей что-то делают, и убеждены что это работает, то не факт, что это работает.
- NP действительно имеет смысл использовать даже просто так для некоторых моделей, поскольку это влияет на стиль.
- Магия в нашей реальности работает плохо.
- Осьминоги мешают.
Ах да, про стиль - всё просто, модель видимо действительно дообучали на каких-то картинках. Так как NP это вектор, то он исключает не только "плохая анатомия" (и даже не столько), сколько исключает картинки того стиля, на которых его и обучали. Иногда это удобно. Но если вы настраиваете промпт на тот самый стиль который исключается NP, то сами понимаете, это не то, что вам нужно.