![](https://habrastorage.org/webt/tr/fx/2i/trfx2icnmjx5pmuka3vuk_ys6gc.gif)
Исходная публикация с описаниеим метода [Mar 2023] — DreamBooth: Fine Tuning Text‑to‑Image Diffusion Models for Subject‑Driven Generation
Что такое stable-diffusion
Stable Diffusion — новаторская модель генерации изображений на основе искусственного интеллекта. Она использует метод диффузии для постепенного улучшения качества сгенерированных изображений.
В основеStable Diffusion лежит архитектура autoencoder. Сначала модель «кодирует» текстовое описание в вектор признаков. Затем декодер поэтапно создает изображение, уточняя его с каждым шагом. Этот процесс напоминает диффузию — плавное распространение частиц.
Что такое дообучение
Нейронные сети «получают информацию» об окружающем мире при обучении. Создатели модели генерируют огромный датасет картинок с их описанием, и загоняют их в модель. Однако если вы хотите генерировать какой то конкретный обьект — например лично вас, вашего питомца, родной дом, картины любимого автора в особом стиле итп.
Вы можете загнать ваши новые изображения в модель, придумав для них описание, содержащие названия вашего объекта (или лучше какой‑то специальный токен, условно [V]), и скоректировав веса градиентным спуском, так что бы модель понимала, что скрывается за этим токеном. Однако такое дообучение дифузионных моделей имеет свои недостатки
Проблемы
![Как мы видим на данном изображении из-за наличия в дообучающем датасете только фотографий сидячих собак, модель не может сгенерить ее в другом ракурсе, потому что забыла что собаки могут находиться и в других позах. Как мы видим на данном изображении из-за наличия в дообучающем датасете только фотографий сидячих собак, модель не может сгенерить ее в другом ракурсе, потому что забыла что собаки могут находиться и в других позах.](https://habrastorage.org/getpro/habr/upload_files/d3e/275/213/d3e2752139da89b2184c4b7de8b46d21.png)
Language drift — модель предварительно обученная на большом корпусе текста и позже точно настроенная для конкретной задачи, постепенно теряет синтаксические и семантические знания языка.
Уменьшения разнообразия выходных данных. Модели преобразования текста в изображение естественным образом обеспечивают большое разнообразие выходных данных. При точной настройке мы хотели бы иметь возможность создавать объект в новых ракурсах, позах. Однако из за переобучения вариативность выходных поз объекта сокращается.
Основная идея решения
Авторы статьи решают эту задачу дополнительным лоссом — class‑specific prior preservation loss. Вначале обучаемая модель пытаться сгенерировать нашу собаку, и обучается по лоссу с фотографиями из выборки для дообучения. Затем она же генерирует произвольную собаку, и лосс считается с фотографиями, сгенерированными исходной моделью. Таким образом, мы наказываем модель, за то что она забывает абстрактные признаки собак, концентрируясь на обучающей выборке. Более лаконично на схеме:
![](https://habrastorage.org/getpro/habr/upload_files/e0c/482/077/e0c4820771247f11c5e13be9e091dc77.png)
Или более строго прибавку к лосу можно записать в виде:
Насколько хорошо это работает?
Как видно из картинок ниже, добавление class‑specific prior preservation loss очень позитивно сказалось на возможности модели генерировать исходный объект в разнообразных вариациях
![](https://habrastorage.org/getpro/habr/upload_files/2db/80f/a8c/2db80fa8cd45e925a3270737d2c2528d.png)
Просто сравните с тем что было выше!
![](https://habrastorage.org/getpro/habr/upload_files/1e3/907/8f2/1e39078f2f1fc1645c7a3c34cff24cc3.png)
Так же модель научилась видоизменять обьект в зависимости от промпта, генерируя полностью новые объекты на основе существующего:
![](https://habrastorage.org/getpro/habr/upload_files/f02/896/810/f028968105081ffe158fa772be395ba3.png)
При этом сама модель не потеряла возможности генерировать обычные объекты (произвольных собак, отличных от той, на которой происходило до обучение)
![](https://habrastorage.org/getpro/habr/upload_files/1ba/b84/819/1bab84819666b8bfad158e89f30ece17.png)
А так же такой подход очень хорошо сработал для задач style‑transfer конкретного объекта. Авторы смогли сгенерировать картинки в разных стилях, но с исходной собакой.
![](https://habrastorage.org/getpro/habr/upload_files/743/115/e0a/743115e0ae72e08b447b4f2063ec7053.png)
LoRA
При обучении модели нет смысла обучать все её веса, достаточно обучения небольших адаптеров. Подробнее о том как это работает написано в моей другой статье на хабре.
Воспроизведение результатов
![](https://habrastorage.org/getpro/habr/upload_files/ab4/d59/7cb/ab4d597cb56c40ea7c4e0c99f06dd87b.png)
Я до обучил stable‑diffusion‑v1–5 на двух собственных датасетах — фотографии кошки (cloody‑cat) и декоративного гриба. Обучение проходило на видеокарте A100 (занимая примерно 1/8 видеопамяти) в течении 2х минут. Интерактивная демонстрация работы моей модели на Hugging Face — freQuensy23/diffusion‑cloody — там можно потыкать свои запросы бесплатно (за такое им огромный респект)! В таблице ниже показано как со временем обучения меняется результат генерации по промпту «A [V] cat», а более красочно вы можете посмотреть это в анимации в начале этой статьи или тут. Так же я проверил данную систему на генерации этого кота в очень разных условиях и стилях. Дальше будет просто фотогалерея
![](https://habrastorage.org/webt/1u/9m/r3/1u9mr35pneecig4u31ewagauchm.png)
![A [V] cat in the spacesuit drawing A [V] cat in the spacesuit drawing](https://habrastorage.org/getpro/habr/upload_files/e27/0c0/433/e270c043326d05385ea25ec4c7117bef.png)
![A [V] cat sad A [V] cat sad](https://habrastorage.org/getpro/habr/upload_files/f4f/cdc/c99/f4fcdcc99b4202764eb9f2c4cfd23ecb.png)
![A [V] cat drawing A [V] cat drawing](https://habrastorage.org/getpro/habr/upload_files/e7a/6d1/99e/e7a6d199e754120f43e0bdf3f09b21f4.png)
![A [V] cat dancing A [V] cat dancing](https://habrastorage.org/getpro/habr/upload_files/708/751/8ee/7087518ee9284a7b9f79c28d13af02b4.png)
![A [V] cat selfie in the ISS A [V] cat selfie in the ISS](https://habrastorage.org/getpro/habr/upload_files/fd6/083/8ea/fd60838ea5fdb264f3ee03f85f567855.png)
![A [V] cat swim A [V] cat swim](https://habrastorage.org/getpro/habr/upload_files/92b/ea2/148/92bea21480574a71af3228524dfce006.png)
Прошу прощения за такой спам картинками в конце, чуть менее формально про эту технологию и идеи по ее монетизации описаны в моей телеге.
P. S. Если есть ошибка в правописании — сообщите мне через стандартную систему хабра — я исправлю. Мне бывает сложно писать на русском.