Процес навчання з підкріпленням, який OpenAI використовує для вдосконалення моделі, неявно зменшує негативну поведінку від позитивної людської взаємодії.
У цій статті автори використовують новий практичний підхід: використовують негативні людські взаємодії (тобто навмисно вибирають зображення низької якості) для неявного посилення позитивної поведінки.
З Dreambooth LoRA для досягнення цієї мети фактично немає потреби готувати таку кількість вхідних даних, як навчання великої мовної моделі.
"Бургер у формі прибульця ()" з різними рівнями оптимізації
Автор представляє дві основні функції, випущені Stable Diffusion XL 1.0: оперативне зважування слів і навчання та міркування Dreambooth LoRA, а також поєднує метод Textual Inversion (інвертування тексту) для навчання Lora, роблячи Lora розумнішою та простішою у використанні.
Про автора: Макс Вулф (@minimaxir) — спеціаліст із обробки даних у BuzzFeed, працює над інструментами AI/ML і різними проектами з відкритим кодом.
Оригінальне посилання:
Нижче подано зміст статті за редакцією Founder Park.
Короткий вступ до SDXL
Минулого місяця Stability AI випустив Stable Diffusion XL 1.0 (SDXL) і зробив його відкритим кодом, дозволяючи користувачам отримувати до нього доступ без будь-яких спеціальних дозволів.
Приклад виводу SDXL 1.0
SDXL – це фактично дві моделі: базова модель і додаткова вдосконалена модель, яка може значно покращити представлення деталей без накладних витрат на швидкість.
Порівняння відносної якості між моделями різних версій Stable Diffusion
Зверніть увагу на значне покращення якості після використання стоншеної моделі
Функції SDXL 1.0
Варто зазначити, що ця версія (SDXL 1.0) є однією з перших моделей з відкритим вихідним кодом, яка може нативно генерувати зображення з роздільною здатністю 1024x1024 без спеціальних заходів, і створені зображення більш деталізовані.
Розсіювачі Hugging Face Бібліотека Python тепер повністю підтримує модель із деякими оптимізаціями продуктивності.
У той же час дифузори також реалізували підтримку двох нових функцій: швидке зважування слів і навчання та висновок Dreambooth LoRA. Тому я планую спробувати (демо-код SDXL в дифузорах можна переглянути в кінці статті).
Підтримка оперативного зважування слів для розсіювачів використовує бібліотеку Python під назвою compel для зважування термінів у більш математичний спосіб. Ви можете додати будь-яку кількість + або - до даного слова, щоб збільшити або зменшити його «важливість» у створеному позиційному вбудованому тексті та таким чином вплинути на кінцевий результат.
За таким же принципом ви також можете обтікати фрази: наприклад, якщо ви створили «Пейзаж Сан-Франциско Сальвадора Далі, олія на полотні», і це згенерувало реалістичну фотографію Сан-Франциско, тоді ви могли б обрамити художню форму та стати Введіть «Пейзаж Сан-Франциско, Сальвадор Далі, (полотно, олія)+++», дозвольте програмі Stable Diffusion отримати очікуваний ефект.
Підготовка середовища
Я запустив хмарну віртуальну машину, забезпечив її новим графічним процесором Nvidia L4 середнього класу (0,24 дол. США на годину за екземпляр Spot на Google Cloud Platform) і взявся за роботу.
З одним графічним процесором L4 потрібно приблизно 22 секунди, щоб створити кожне зображення 1024x1024; і на відміну від попереднього режиму Stable Diffusion, тепер графічний процесор середнього класу може генерувати лише одне зображення за раз, оскільки використання його графічного процесора вже повне, тож ви просто маєте бути більш терплячим. Зниження роздільної здатності може пришвидшити збірку, але я настійно не рекомендую цього робити, оскільки результат буде жахливим.
** Трохи персоналізована конфігурація **
Під час мого тестування він вирішив більшість проблем зі словом підказки, які з’явилися після Stable Diffusion 2.0, особливо з вищими значеннями вказівок без класифікатора (guiding_scale за замовчуванням становить 7,5; мені подобається змінити його на 13 )
Орієнтовна_шкала становить 13 для всіх прикладів, згенерованих моделлю LoRA в цій статті.
Початок роботи丨Дослідіть LoRA
Найважливішим оновленням SDXL 1.0 є підтримка Dreambooth LoRA, яка дозволяє нам налаштовувати модель Stable Diffusion.
Dreambooth — це техніка для тонкого налаштування Stable Diffusion на основі дуже невеликого набору вихідних зображень і ключового слова тригера, щоб «концепції» в цих зображеннях можна було використовувати в інших контекстах, заданих ключовим словом.
Схематична схема принципу роботи Dreambooth
Переваги LoRA: специфічні для домену «малі моделі»
Під час навчання самої стабільної дифузії навіть маленька модель вимагає багатогодинного навчання на багатьох дорогих графічних процесорах.
Ось тут і стає в нагоді LoRA: він тренує невелику підмножину моделі бачення так, що для виведення результатів за 10 хвилин потрібен лише дешевий графічний процесор, а якість кінцевої моделі + LoRA можна порівняти з повністю налаштованою моделлю. (Загалом, коли люди мають на увазі тонке налаштування стабільної дифузії, вони часто мають на увазі створення LoRA).
Навчений LoRA — це невеликий самостійний двійковий файл, яким можна легко поділитися з іншими або завантажити в репозиторій, наприклад Civitai.
Невеликим недоліком LoRA є те, що одночасно може бути активним лише один: ми можемо об’єднати кілька LoRA, щоб поєднати їхні переваги, але на практиці це не так просто.
До того, як Stable Diffusion LoRA став широко популярним, існував метод під назвою текстова інверсія, який дозволяв кодувальникам тексту вивчати концепції, але для навчання знадобилося багато годин, і результати могли бути неприємними.
Я навчив інверсію тексту в попередній публікації блогу: Ugly Sonic (Sonic), і оскільки її не було у вихідному наборі даних для Stable Diffusion, результати були унікальними. Отримано наведені нижче результати зі змішаними результатами.
(Потворний) Соник, але потворний як пекло
Цього разу я вважаю, що використання Ugly Sonic для навчання LoRA було б гарним випадком для перевірки потенціалу SDXL.
Трапляється, що Hugging Face надає скрипт train_dreambooth_lora_sdxl.py, який може використовувати базову модель SDXL для навчання LoRA; цей скрипт поки що не встановлюється, але я трохи налаштував параметри.
Не буде перебільшенням сказати, що зображення Ugly Sonic, створені навченим LoRA під різними підказками, виглядають краще та організованіше.
Соник, але цього разу з зубами
Advanced 丨 Поглиблена текстова інверсія
Після успіху цього експерименту я вирішив повторити інший експеримент, який проводив раніше з інверсією тексту: додавши ключове слово неправильно, щоб створити кращі зображення.
Цього разу метод полягає в тому, щоб навчити LoRA з деякими сильно спотвореними низькоякісними зображеннями, а надане слово підказки неправильне. Я сподіваюся, що LoRA зможе розглядати неправильне як «негативне підказка» та уникнути цієї ситуації, генеруючи зображення з меншими спотвореннями.
Я написав Jupyter Notebook і використовував SDXL, щоб самостійно створити багато «неправильних» складених зображень, цього разу також використовуючи різні ваги підказок для створення більш очевидних випадків невдалих зображень, таких як розмиті (розмиті) і погані руки (неправильний малюнок) руки) .
За іронією долі, нам потрібно використовувати SDXL для створення невдалих зображень високої роздільної здатності.
Вище наведено кілька прикладів синтетичних неправильних зображень
Він ненавмисно містить елементи обкладинок панк-рок альбомів 2000-х років
Я навчив цей LoRA та завантажив його в базову модель Stable Diffusion XL (LoRA не потрібен для точного налаштування моделі), а також написав записник Jupyter для порівняння наступних результатів для заданих слів підказки:
Базова модель + конвеєр без LoRA. (основний)
Немає конвеєра LoRA, використовуйте неправильне як негативну підказку (додайте негативну підказку)
Використовуйте конвеєр LoRA, використовуйте неправильне як негативний натяк (ідеальна мета)
Основи кожного згенерованого результату однакові, тому композиція трьох вихідних фотографій має бути подібною, а різниця між ефектом неправильних негативних підказок і LoRA та конвеєром базової моделі має бути дуже очевидною.
Тестовий приклад SDXL 0.9
Давайте використаємо SDXL 0.9, щоб продемонструвати просту підказку для початку тестування:
「Вовк у національному парку Йосеміті, холодна природа, документальна фотозйомка」
Уважно подивившись на наведене вище зображення, неважко виявити, що неправильна підказка на базовій моделі додає трохи листя та глибини фоновому лісу, але LoRA додає більше речей: потужніше освітлення та тіні, більш детальне листя та зміни в як виглядають вовки Ракурс виглядає цікавіше.
Потім я додав «надзвичайно крупний план (дуже крупний план)» до слова підказки, і після повторного використання попередніх початкових значень я отримав різні перспективні крупні плани вовків під подібною фотокомпозицією.
「Надзвичайно крупний план вовка в Йосемітському національному парку, холодна природа документальний фільм」
Наразі текстура та чіткість LoRA набагато кращі, ніж у інших моделей, а зображення яскравіше. Зауважте, однак, що додавання лише одного неправильного слова-підказки змінить перспективу.
Ще одним хорошим тестом є фотографія їжі, і дивні знімки їжі, які я зробив за допомогою DALL-E 2, особливо гарні. Чи може SDXL + неправильний LoRA генерувати дивні неевклідові бургери з певним зважуванням підказки?
「великий смачний гамбургер (у формі п’ятивимірної інопланетної геометрії)++++, професійна фотозйомка їжі」
«Смачний великий бургер (5D інопланетна геометрія)++++, професійна фотозйомка їжі»
Відповідь полягає в тому, що не може, навіть якщо слово підказки змінюється багато разів. Тим не менш, результат цікавий: базовий SDXL, здається, сприймає «інопланетну» частину підказки більш буквально, ніж я думав (і дав йому милий казанок!), але LoRA працює краще. Він чітко зрозумів значення підказок і зробив «інопланетний» бургер, який важко їсти людям, а стиль іміджу став більш яскравим.
Що буде з малярем? Чи може LoRA помилково вирішити горезвісну проблему штучного інтелекту, яка не тягне руки? І ми також включили багато таких прикладів до навчальних даних LoRA. Давайте змінимо підказку, яку я використав, коли вперше спробував Stable Diffusion 2.0 намалювати президента Тейлор Свіфт:
「Президент США Тейлор Свіфт (підписує документи)++++, фото зроблено Associated Press」
"Президент США Тейлор Свіфт (підписує документ)++++, фото AP"
Подивіться на праву руку Тейлора: модель SDXL за замовчуванням дає шалені результати, а з неправильною – насправді гірше, але в LoRA це виправлено! Кольори LoRA набагато кращі, її куртка стала більш помітною білою замість жовто-білої. Але її руки все ще не видно уважно: малювати символи за допомогою SDXL 1.0 все ще громіздко та ненадійно!
Тепер висновок очевидний, результат неправильного + LoRA в кожному випадку більш цікавий, ніж результат простого додавання неправильних негативних сигналів, тому ми порівнюємо лише базовий результат і результат LoRA нижче. Ось приклад базової моделі в порівнянні з неправильним LoRA:
「реалістичний людський Шрек веде блог за комп’ютером, гіперреалістична фотографія, яка отримала нагороди для ярмарку марнославства」
*(Реалістичний людський Шрек, який веде блог на комп’ютерній робочій станції, сюрреалістичні фотографії, відзначені нагородами з Vanity Fair) – намальоване від руки LoRA та краще освітлення. Костюми деталізовані, а фон цікавіший. *
「Піца пепероні у формі серця, гіперреалістична професійна фотографія їжі, відзначена нагородами」
(піца з пепероні у формі серця, ультрареалістична професійна фотографія їжі, відзначена нагородами) - більш детальні пепероні, гарячі бульбашки, менше пепероні на краях піци, скоринка виглядає жорсткішою
LoRA з помилкою доступна тут, але я не можу ручатися за її продуктивність на інших інтерфейсах, окрім дифузорів.
Усі Ноутбуки, які використовувалися для створення цих зображень, знаходяться в цьому сховищі GitHub, у тому числі стандартний SDXL 1.0 + модель тонкого налаштування + Блокноти LoRA Colab з помилкою, ви можете запускати ці Ноутбуки на безкоштовному графічному процесорі T4. Якщо ви хочете побачити версію згенерованих зображень у цій статті у вищій роздільній здатності, ви можете переглянути вихідний код статті.
Неправильно Що в біса відбувається?
LoRA з неправильним Цей трюк лише покращує якість і чіткість створеного зображення, але LoRA, здається, змушує SDXL поводитися розумніше та більше відображає дух підказок.
На технічному рівні ця негативна підказка встановлює область латентного простору, в якій дифузія генерує зображення; ця область є однаковою як для неправильної базової моделі, так і для LoRA.
Моя інтуїція полягає в тому, що LoRA змінює цю небажану область у величезному високовимірному латентному просторі, щоб вона була більш схожою на початкову область, тому ймовірність того, що нормальні результати генерації потраплять у цю область, стає меншою, а якість нижчою. Це було покращено. (Див. процес зміни Alien Burger вище)
Навчання SDXL із зображеннями низької якості для його покращення технічно є формою навчання з підкріпленням із зворотним зв’язком людини (RLHF): цей підхід також є шляхом до успіху ChatGPT. Процес навчання підкріплення, який використовується OpenAI для вдосконалення моделі, полягає в тому, щоб неявно зменшити негативну поведінку від позитивної взаємодії користувача, тоді як тут я використовую негативну взаємодію користувача (тобто навмисно вибираю зображення низької якості), щоб неявно збільшити позитивну поведінку.
Але з Dreambooth LoRA вам не потрібно готувати стільки вхідних даних, скільки тренувати велику мовну модель.
Потенціал для «Негативного LoRA» все ще великий: мої параметри генерації синтетичного набору даних мають багато можливостей для вдосконалення, і LoRA також можна навчати протягом більш тривалого періоду часу. Але поки що я дуже задоволений результатами, і хотів би провести більше тестів із негативним LoRA, наприклад об’єднати з іншими LoRA, щоб побачити, чи можна покращити останні (особливо неправильний LoRA + Ugly Sonic LoRA!)
Додаток: демонстрація SDXL у дифузорах
імпортний факел
з дифузорів імпорт DiffusionPipeline, AutoencoderKL
покоління з використанням обох моделей (суміш експертів)
високий_шум_frac = 0,8
= "космонавт верхи на коні"
негативний_ = "розмиті, погані руки"
зображення = основа(
=,
негативний_=негативний_,
шумозаглушення_end=високий_шум_frac,
вихід_type="латентний",
).зображення
зображення = уточнення(
=,
негативний_=негативний_,
шумозаглушення_start=високий_шум_frac,
image=зображення,
).зображення [0]
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
Погані зображення, створені штучним інтелектом, насправді можуть «налаштувати модель» навпаки?
Оригінал: Макс Вулф
**Джерело: **Засновник Парк
Процес навчання з підкріпленням, який OpenAI використовує для вдосконалення моделі, неявно зменшує негативну поведінку від позитивної людської взаємодії.
У цій статті автори використовують новий практичний підхід: використовують негативні людські взаємодії (тобто навмисно вибирають зображення низької якості) для неявного посилення позитивної поведінки.
З Dreambooth LoRA для досягнення цієї мети фактично немає потреби готувати таку кількість вхідних даних, як навчання великої мовної моделі.
Автор представляє дві основні функції, випущені Stable Diffusion XL 1.0: оперативне зважування слів і навчання та міркування Dreambooth LoRA, а також поєднує метод Textual Inversion (інвертування тексту) для навчання Lora, роблячи Lora розумнішою та простішою у використанні.
Про автора: Макс Вулф (@minimaxir) — спеціаліст із обробки даних у BuzzFeed, працює над інструментами AI/ML і різними проектами з відкритим кодом.
Оригінальне посилання:
Нижче подано зміст статті за редакцією Founder Park.
Короткий вступ до SDXL
Минулого місяця Stability AI випустив Stable Diffusion XL 1.0 (SDXL) і зробив його відкритим кодом, дозволяючи користувачам отримувати до нього доступ без будь-яких спеціальних дозволів.
SDXL – це фактично дві моделі: базова модель і додаткова вдосконалена модель, яка може значно покращити представлення деталей без накладних витрат на швидкість.
Зверніть увагу на значне покращення якості після використання стоншеної моделі
Функції SDXL 1.0
Варто зазначити, що ця версія (SDXL 1.0) є однією з перших моделей з відкритим вихідним кодом, яка може нативно генерувати зображення з роздільною здатністю 1024x1024 без спеціальних заходів, і створені зображення більш деталізовані.
Розсіювачі Hugging Face Бібліотека Python тепер повністю підтримує модель із деякими оптимізаціями продуктивності.
У той же час дифузори також реалізували підтримку двох нових функцій: швидке зважування слів і навчання та висновок Dreambooth LoRA. Тому я планую спробувати (демо-код SDXL в дифузорах можна переглянути в кінці статті).
Підтримка оперативного зважування слів для розсіювачів використовує бібліотеку Python під назвою compel для зважування термінів у більш математичний спосіб. Ви можете додати будь-яку кількість + або - до даного слова, щоб збільшити або зменшити його «важливість» у створеному позиційному вбудованому тексті та таким чином вплинути на кінцевий результат.
За таким же принципом ви також можете обтікати фрази: наприклад, якщо ви створили «Пейзаж Сан-Франциско Сальвадора Далі, олія на полотні», і це згенерувало реалістичну фотографію Сан-Франциско, тоді ви могли б обрамити художню форму та стати Введіть «Пейзаж Сан-Франциско, Сальвадор Далі, (полотно, олія)+++», дозвольте програмі Stable Diffusion отримати очікуваний ефект.
Підготовка середовища
Я запустив хмарну віртуальну машину, забезпечив її новим графічним процесором Nvidia L4 середнього класу (0,24 дол. США на годину за екземпляр Spot на Google Cloud Platform) і взявся за роботу.
З одним графічним процесором L4 потрібно приблизно 22 секунди, щоб створити кожне зображення 1024x1024; і на відміну від попереднього режиму Stable Diffusion, тепер графічний процесор середнього класу може генерувати лише одне зображення за раз, оскільки використання його графічного процесора вже повне, тож ви просто маєте бути більш терплячим. Зниження роздільної здатності може пришвидшити збірку, але я настійно не рекомендую цього робити, оскільки результат буде жахливим.
** Трохи персоналізована конфігурація **
Під час мого тестування він вирішив більшість проблем зі словом підказки, які з’явилися після Stable Diffusion 2.0, особливо з вищими значеннями вказівок без класифікатора (guiding_scale за замовчуванням становить 7,5; мені подобається змінити його на 13 )
Орієнтовна_шкала становить 13 для всіх прикладів, згенерованих моделлю LoRA в цій статті.
Початок роботи丨Дослідіть LoRA
Найважливішим оновленням SDXL 1.0 є підтримка Dreambooth LoRA, яка дозволяє нам налаштовувати модель Stable Diffusion.
Dreambooth — це техніка для тонкого налаштування Stable Diffusion на основі дуже невеликого набору вихідних зображень і ключового слова тригера, щоб «концепції» в цих зображеннях можна було використовувати в інших контекстах, заданих ключовим словом.
Переваги LoRA: специфічні для домену «малі моделі»
Під час навчання самої стабільної дифузії навіть маленька модель вимагає багатогодинного навчання на багатьох дорогих графічних процесорах.
Ось тут і стає в нагоді LoRA: він тренує невелику підмножину моделі бачення так, що для виведення результатів за 10 хвилин потрібен лише дешевий графічний процесор, а якість кінцевої моделі + LoRA можна порівняти з повністю налаштованою моделлю. (Загалом, коли люди мають на увазі тонке налаштування стабільної дифузії, вони часто мають на увазі створення LoRA).
Навчений LoRA — це невеликий самостійний двійковий файл, яким можна легко поділитися з іншими або завантажити в репозиторій, наприклад Civitai.
Невеликим недоліком LoRA є те, що одночасно може бути активним лише один: ми можемо об’єднати кілька LoRA, щоб поєднати їхні переваги, але на практиці це не так просто.
Текстова інверсія Фактичний бій: Текстова інверсія
До того, як Stable Diffusion LoRA став широко популярним, існував метод під назвою текстова інверсія, який дозволяв кодувальникам тексту вивчати концепції, але для навчання знадобилося багато годин, і результати могли бути неприємними.
Я навчив інверсію тексту в попередній публікації блогу: Ugly Sonic (Sonic), і оскільки її не було у вихідному наборі даних для Stable Diffusion, результати були унікальними. Отримано наведені нижче результати зі змішаними результатами.
Цього разу я вважаю, що використання Ugly Sonic для навчання LoRA було б гарним випадком для перевірки потенціалу SDXL.
Трапляється, що Hugging Face надає скрипт train_dreambooth_lora_sdxl.py, який може використовувати базову модель SDXL для навчання LoRA; цей скрипт поки що не встановлюється, але я трохи налаштував параметри.
Не буде перебільшенням сказати, що зображення Ugly Sonic, створені навченим LoRA під різними підказками, виглядають краще та організованіше.
Advanced 丨 Поглиблена текстова інверсія
Після успіху цього експерименту я вирішив повторити інший експеримент, який проводив раніше з інверсією тексту: додавши ключове слово неправильно, щоб створити кращі зображення.
Цього разу метод полягає в тому, щоб навчити LoRA з деякими сильно спотвореними низькоякісними зображеннями, а надане слово підказки неправильне. Я сподіваюся, що LoRA зможе розглядати неправильне як «негативне підказка» та уникнути цієї ситуації, генеруючи зображення з меншими спотвореннями.
Я написав Jupyter Notebook і використовував SDXL, щоб самостійно створити багато «неправильних» складених зображень, цього разу також використовуючи різні ваги підказок для створення більш очевидних випадків невдалих зображень, таких як розмиті (розмиті) і погані руки (неправильний малюнок) руки) .
За іронією долі, нам потрібно використовувати SDXL для створення невдалих зображень високої роздільної здатності.
Вище наведено кілька прикладів синтетичних неправильних зображень
Він ненавмисно містить елементи обкладинок панк-рок альбомів 2000-х років
Я навчив цей LoRA та завантажив його в базову модель Stable Diffusion XL (LoRA не потрібен для точного налаштування моделі), а також написав записник Jupyter для порівняння наступних результатів для заданих слів підказки:
Базова модель + конвеєр без LoRA. (основний)
Немає конвеєра LoRA, використовуйте неправильне як негативну підказку (додайте негативну підказку)
Використовуйте конвеєр LoRA, використовуйте неправильне як негативний натяк (ідеальна мета)
Основи кожного згенерованого результату однакові, тому композиція трьох вихідних фотографій має бути подібною, а різниця між ефектом неправильних негативних підказок і LoRA та конвеєром базової моделі має бути дуже очевидною.
Тестовий приклад SDXL 0.9
Давайте використаємо SDXL 0.9, щоб продемонструвати просту підказку для початку тестування:
「Вовк у національному парку Йосеміті, холодна природа, документальна фотозйомка」
Уважно подивившись на наведене вище зображення, неважко виявити, що неправильна підказка на базовій моделі додає трохи листя та глибини фоновому лісу, але LoRA додає більше речей: потужніше освітлення та тіні, більш детальне листя та зміни в як виглядають вовки Ракурс виглядає цікавіше.
Потім я додав «надзвичайно крупний план (дуже крупний план)» до слова підказки, і після повторного використання попередніх початкових значень я отримав різні перспективні крупні плани вовків під подібною фотокомпозицією.
Наразі текстура та чіткість LoRA набагато кращі, ніж у інших моделей, а зображення яскравіше. Зауважте, однак, що додавання лише одного неправильного слова-підказки змінить перспективу.
Ще одним хорошим тестом є фотографія їжі, і дивні знімки їжі, які я зробив за допомогою DALL-E 2, особливо гарні. Чи може SDXL + неправильний LoRA генерувати дивні неевклідові бургери з певним зважуванням підказки?
«Смачний великий бургер (5D інопланетна геометрія)++++, професійна фотозйомка їжі»
Відповідь полягає в тому, що не може, навіть якщо слово підказки змінюється багато разів. Тим не менш, результат цікавий: базовий SDXL, здається, сприймає «інопланетну» частину підказки більш буквально, ніж я думав (і дав йому милий казанок!), але LoRA працює краще. Він чітко зрозумів значення підказок і зробив «інопланетний» бургер, який важко їсти людям, а стиль іміджу став більш яскравим.
Що буде з малярем? Чи може LoRA помилково вирішити горезвісну проблему штучного інтелекту, яка не тягне руки? І ми також включили багато таких прикладів до навчальних даних LoRA. Давайте змінимо підказку, яку я використав, коли вперше спробував Stable Diffusion 2.0 намалювати президента Тейлор Свіфт:
"Президент США Тейлор Свіфт (підписує документ)++++, фото AP"
Подивіться на праву руку Тейлора: модель SDXL за замовчуванням дає шалені результати, а з неправильною – насправді гірше, але в LoRA це виправлено! Кольори LoRA набагато кращі, її куртка стала більш помітною білою замість жовто-білої. Але її руки все ще не видно уважно: малювати символи за допомогою SDXL 1.0 все ще громіздко та ненадійно!
Тепер висновок очевидний, результат неправильного + LoRA в кожному випадку більш цікавий, ніж результат простого додавання неправильних негативних сигналів, тому ми порівнюємо лише базовий результат і результат LoRA нижче. Ось приклад базової моделі в порівнянні з неправильним LoRA:
*(Реалістичний людський Шрек, який веде блог на комп’ютерній робочій станції, сюрреалістичні фотографії, відзначені нагородами з Vanity Fair) – намальоване від руки LoRA та краще освітлення. Костюми деталізовані, а фон цікавіший. *
(піца з пепероні у формі серця, ультрареалістична професійна фотографія їжі, відзначена нагородами) - більш детальні пепероні, гарячі бульбашки, менше пепероні на краях піци, скоринка виглядає жорсткішою
LoRA з помилкою доступна тут, але я не можу ручатися за її продуктивність на інших інтерфейсах, окрім дифузорів.
Усі Ноутбуки, які використовувалися для створення цих зображень, знаходяться в цьому сховищі GitHub, у тому числі стандартний SDXL 1.0 + модель тонкого налаштування + Блокноти LoRA Colab з помилкою, ви можете запускати ці Ноутбуки на безкоштовному графічному процесорі T4. Якщо ви хочете побачити версію згенерованих зображень у цій статті у вищій роздільній здатності, ви можете переглянути вихідний код статті.
Неправильно Що в біса відбувається?
LoRA з неправильним Цей трюк лише покращує якість і чіткість створеного зображення, але LoRA, здається, змушує SDXL поводитися розумніше та більше відображає дух підказок.
На технічному рівні ця негативна підказка встановлює область латентного простору, в якій дифузія генерує зображення; ця область є однаковою як для неправильної базової моделі, так і для LoRA.
Моя інтуїція полягає в тому, що LoRA змінює цю небажану область у величезному високовимірному латентному просторі, щоб вона була більш схожою на початкову область, тому ймовірність того, що нормальні результати генерації потраплять у цю область, стає меншою, а якість нижчою. Це було покращено. (Див. процес зміни Alien Burger вище)
Навчання SDXL із зображеннями низької якості для його покращення технічно є формою навчання з підкріпленням із зворотним зв’язком людини (RLHF): цей підхід також є шляхом до успіху ChatGPT. Процес навчання підкріплення, який використовується OpenAI для вдосконалення моделі, полягає в тому, щоб неявно зменшити негативну поведінку від позитивної взаємодії користувача, тоді як тут я використовую негативну взаємодію користувача (тобто навмисно вибираю зображення низької якості), щоб неявно збільшити позитивну поведінку.
Але з Dreambooth LoRA вам не потрібно готувати стільки вхідних даних, скільки тренувати велику мовну модель.
Потенціал для «Негативного LoRA» все ще великий: мої параметри генерації синтетичного набору даних мають багато можливостей для вдосконалення, і LoRA також можна навчати протягом більш тривалого періоду часу. Але поки що я дуже задоволений результатами, і хотів би провести більше тестів із негативним LoRA, наприклад об’єднати з іншими LoRA, щоб побачити, чи можна покращити останні (особливо неправильний LoRA + Ugly Sonic LoRA!)
Додаток: демонстрація SDXL у дифузорах
імпортний факел
з дифузорів імпорт DiffusionPipeline, AutoencoderKL
навантажувальна база SDXL і рафінер
vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix",
torch_dtype=torch.float16)
база = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
ноги = ноги,
torch_dtype=torch.float16,
iant="fp16",
use_safetensors=Правда,
)
_ = base.to("cuda")
refiner = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-refiner-1.0",
text_encoder_2=base.text_encoder_2,
нога=основа.нога,
torch_dtype=torch.float16,
iant="fp16",
use_safetensors=Правда,
)
_ = refiner.to("cuda")
покоління з використанням обох моделей (суміш експертів)
високий_шум_frac = 0,8
= "космонавт верхи на коні"
негативний_ = "розмиті, погані руки"
зображення = основа(
=,
негативний_=негативний_,
шумозаглушення_end=високий_шум_frac,
вихід_type="латентний",
).зображення
зображення = уточнення(
=,
негативний_=негативний_,
шумозаглушення_start=високий_шум_frac,
image=зображення,
).зображення [0]