Проблема, ймовірно, пов’язана з тим, що Stable Diffusion 1 & 2 тренувалися на квадратних обрізках зображень:
Синтезовані об’єкти можна обрізати, як-от відрізану голову кота в лівих прикладах для SD 1-5 і SD 2-1. Інтуїтивно зрозумілим поясненням такої поведінки є використання випадкового обрізання під час навчання моделі: оскільки зіставлення пакету в фреймворках DL, таких як PyTorch [32], потребує тензорів однакового розміру, типовий конвеєр обробки полягає в (i) зміні розміру зображення таким чином, щоб найкоротший розмір відповідав бажаному цільовому розміру, а потім (ii) випадковому обрізанні зображення вздовж довшого. вісь
(джерело: https://arxiv.org/pdf/2307.01952.pdf)
Деякі потенційні рішення:
- Вибір моделі: Stable Diffusion XL вирішує цю проблему, встановлюючи кількість кадрування як параметр кондиціонування, щоб модель знала про це, і його можна було встановити на нуль під час генерації, а також додатково налаштовуючи кілька пропорцій. Якщо ви можете, за допомогою SDXL (він безкоштовний і працює у веб-інтерфейсі Automatic1111, але вимагає більше VRAM) має вирішити цю проблему:
- Текстова підказка: використання "обрізаного" або "необрізаний" може бути неефективним, оскільки довільне кадрування було виконано без коригування підказки, тому модель побачить навіть "необрізаний" зображення як обрізані. Слова, які вказують на те, що об’єкт маленький і знаходиться в центрі зображення, а отже, менш імовірно, що його було обрізано випадковим обрізанням, можуть дати кращі результати, але це все одно трохи помилково:
- Адаптери «Зображення-зображення», ControlNets і T2I: існує багато способів використання нетекстових підказок, щоб допомогти визначити, куди потрібно розмістити елементи на створеному зображенні. Перегляньте це запитання, щоб дізнатися більше про те, як використовувати їх для досягнення певної пози. Нижче я використовую адаптер пози T2I, щоб переконатися, що повна фігура знаходиться в межах зображення: