• Статьи
  • Как обрабатывать фотографии с помощью нейросети Stable Diffusion

Как обрабатывать фотографии с помощью нейросети Stable Diffusion

11 мая 2023

52798

1

0

0

В нейросети Stable Diffusion можно не только генерировать картинки с нуля по текстовому запросу (txt2img), но и работать с уже существующими изображениями (img2img). Можно загрузить в Stable Diffusion фотографию и сгенерировать похожие картинки, можно заменить часть изображения, а можно нарисовать от руки грубый эскиз, по которому нейросеть создаст красивый рисунок. 

Угадаете, где фотография, где сгенерированная нейросетью картинка? / Фото: pixabay.com, Алиса Смирнова, Фотосклад.Эксперт

Работать мы сегодня будем со сборкой Portable Stable Diffusion, в которой есть удобный интерфейс для обработки изображений, и с моделью Deliberate 2.0, которая на сегодня лучше всего подходит для создания фотореалистичных изображений разных предметов (есть модели, которые хороши в создании людей, но больше не умеют ничего). Вот здесь на Гитхабе можно скачать эту сборку, а вот ссылка на Deliberate 2.0. О том, как установить нейросеть и модели для неё, мы писали вот в этой статье.

На Mac нейросеть также можно установить. Скачать сборку можно здесь, инструкцию к ней — здесь.


Как сгенерировать похожую картинку с помощью img2img в Stable Diffusion
Как изменить часть изображения с помощью Inpaint в Stable
Реалистичное размытие фона с помощью Stable Diffusion и Adobe
Генерируем изображение по эскизу с помощью Stable Diffusion

Как сгенерировать похожую картинку с помощью img2img в Stable Diffusion

Начнём с самой простой задачи: возьмём готовое фото и сгенерируем несколько похожих на него картинок. У нас есть фотография бургера с бесплатного фотостока, но верхняя булочка примята, а котлета выглядит слегка подгорелой. Да и вообще, это фото может скачать и использовать кто угодно, а мы хотим собственный уникальный бургер. При этом композиция хороша, цвета тоже, да и начинки в бургере немало.

Бургер на тарелке / Фото: pixabay.com

Запускаем нейросеть. Stable Diffusion работает на локальном компьютере, а её интерфейс открывается во вкладке браузера. Во так он выглядит. Нам нужна вкладка img2img (1), в которой есть ещё одна одноименная вкладка (4). Есть поля для ввода описания Prompt (2) и Negative Prompt (3), и есть область для загрузки изображения (5). В неё мы и перетаскиваем наше фото бургера.

Рабочая область Stable Diffusion / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Под бургером находятся настройки генерации. Вот, что нас в них интересует:

1. Resize mode — отвечает за то, будет ли картинка обрезаться, дорисовываться по краям или растягиваться. Нам нужно сохранить исходные пропорции, так что выбираем just resize.

2. Sampling steps — число шагов генерации. Для хорошего качества нужно от 16 шагов.

3. Размер итогового изображения. Обратите внимание, что соотношение сторон у загруженного изображения и у итогового должно совпадать. Наше исходное изображение имеет размер 1920х1280 (соотношение 3:2), здесь у нас 1200х800 (тоже 3:2).

4. Batch count — количество одновременно генерируемых изображений. На мощной видеокарте уровня RTX 4090 можно генерировать по 8 (или даже 12-16) изображений за раз, это занимает пару минут. На слабой видеокарте с 4-6 Гб памяти лучше поставить от 2 до 4, чтобы не ждать слишком долго.

5. CFG Scale — это то, насколько точно Stable Diffusion следует нашему запросу. 1 — нейросеть совсем творчески подойдёт к запросу, может нарисовать что-то очень странное, 30 — максимально точное следование, выполнит запрос слово в слово. В большинстве случаев подойдёт значение 7-12.

6. Denoising strength — очень важный параметр, от которого зависит, насколько сильно сгенерированная картинка будет отличаться от исходной. При значении до 0,4 сгенерированная картинка не сильно отличается по цветам и композиции от оригинала, а вот при значениях свыше 0,75 она может измениться до неузнаваемости.

Всякие важные настройки, которые мы обсудили выше / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

В поле Prompt пишем просто «Burger on the plate» («Бургер на тарелке»). Stable Diffusion хорошо работает только с английским, так что тем, у кого с ним плохо, стоит вооружиться переводчиком. А тем, кто не уверен, что способен сформулировать промт самостоятельно, помогут библиотеки промтов — базы с набором проверенных запросов.

В описание можно внести некоторые уточнения, например, просьбы стилизовать бургер или добавить мелкие детали. Важный момент: в режиме img2img нейросеть очень сильно опирается на цветовые пятна исходной картинки. Если вам нужно внести существенные изменения (сделать не один бургер, а пять, сменить белую булку на чёрную), работа будет идти плохо и сложно. В этом случае лучше нарисовать картинку с нуля по текстовому описанию, как мы делали здесь. А вот скопировать стиль определённого художника или дизайнера можно без проблем.

Бургер Ван Гога и бургер Энди Уорхола / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Обратите внимание, что в отличие от генерации картинки только по текстовому описанию, нам не нужно создавать очень сложный набор ключевых слов. Вместо того, чтобы словами говорить нейросети о размерах бургера, количестве сыра и котлет и цвете тарелки, мы просто показываем ей образец и говорим, что хотим бургер. Генерируем и выбираем самый красивый.

Обновлённый бургер. Котлетки стали аккуратней, верхняя булочка распрямилась и покрылась кунжутом / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

И для того, чтобы показать влияние параметра Denoising strength на результат, сделаем несколько бургеров с разными параметрами.

Слева вверху — оригинальный бургер с фотостока. Справа от него наш красивый бургер с Denoising strength 0,3. Он стал более аккуратным, словно над ним поработал ретушёр, но при этом общая композиция очень похожа на оригинал. При Denoising strength 0,55 бургер стал менее фотореалистичным, начинка немного поменяла вид (как и задний план — вместо стены теперь какой-то размытый интерьер). Ну а при 0,88 тарелка посинела, ракурс изменился и из бургера исчезла одна из котлет и сыр. Зато появилась картошечка.

Разный Denoising strength, разные бургеры / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Этот метод применим не только к фотографиям. Часто его используют, чтобы сделать несколько вариантов картинки, сгенерированной в той же Stable Diffusion. Для этого сгенерированная картинка загружается во вкладку img2img, и генерируется несколько вариантов с теми же ключевыми словами, что и исходная.

Как изменить часть изображения с помощью Inpaint в Stable Diffusion

С помощью нейросети Stable Diffusion можно, например, заменить лицо модели на сгенерированное нейросетью. Для этого нам понадобится вкладка inpaint в разделе img2img.

Перетаскиваем фото, с которым будем работать, в отмеченную область / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Давайте поработаем с вот такой фотографией девушки на мосту. Перетаскиваем фото. Теперь самое главное: во вкладке inpaint можно создать маску, чтобы нейросеть работала только с нужной областью и не затрагивала другие. После загрузки фото появляется кнопка кисти с ползунком для выбора размера(1), ластик (2), чтобы стереть ошибочно нарисованную маску, и кнопка отмены последних действий (3)

Берём кисть и закрашиваем ту область, которую хотим изменить / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Теперь нужно всё правильно настроить. Окно настроек очень похоже на предыдущее, но есть и новые параметры: 

1. Mask blur — размытие краёв маски (в пикселях).

2. Mask mode — говорит нейросети, что же означает наша маска. По сути, это аналог белой или чёрной маски в Photoshop. В режиме Inpaint masked нейросеть будет изменять только то, что под маской, оставляя остальное нетронутым (как черная маска, частично протёртая). Ну а если выбрать Inpaint not masked, всё будет наоборот — область под маской останется неизменной, а всё вокруг поменяется (белая маска, частично закрашенная).

3. Inpaint area — от этой настройки зависит, будет ли Stable Diffusion обращать внимание при рисовании на всю картинку, или только на замаскированную область. Выбор зависит от задачи: если бы мы хотели полностью стереть девушку с фото (или заменить её на какой-либо предмет), то нужно выбрать Whole picture. Но так как сейчас мы собираемся сохранить голову на месте, поменяв лишь черты лица, выбираем Only masked.

4. Размер области вокруг маски (в пикселях), в которой происходит плавный переход от сгенерированной картинки к нетронутой области. Чем больше изображение, тем больше можно сделать это значение.

Не забываем проверить соотношение сторон исходной и сгенерированной картинки — оно должно совпадать. В противном случае картинка непропорционально растянется / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

В запрос, как всегда при работе с img2img, подставляем самые простые понятия. Например «woman face». Жмём на кнопку Generate и ждём. В зависимости от мощности видеокарты генерация 8 изображений займёт от 30-40 секунд до 15-20 минут. И вот наш результат: слева исходное фото с маской, справа — девушка со свежесгенерированной головой.

За запуск процесса генерации отвечает красивая оранжевая кнопка «Generate» в правом верхнем углу / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Если же хочется изменить фото ещё сильней, можно изменить запрос на «wookie face, star wars», и исходная девушка превратится в представительницу расы вуки.

Если бы у Чубакки была девушка / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

А теперь давайте переместим нашу девушку в какое-нибудь другое место. Для этого нам понадобится довольно точная маска, которую сложно нарисовать прямо в Stable Diffusion.

Перейдём во вкладку Inpaint upload. В ней мы сможем загрузить и наше изображение в формате JPEG (нам нужна просто чёрно-белая картинка), и точную маску, которую мы заранее создали в Adobe Photoshop. Маска должна быть такого же размера, как и фотография.

Во вкладке Inpaint upload два поля для загрузки: в верхнее перетаскиваем фотографию, в нижнее — маску / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Настройки будут немного отличаться отличаться:

Mask blur сильно уменьшаем, так как наша маска точная нам не нужны размытые ореолы вокруг. Можно поставить вообще ноль, но и при 2 пикселях ореолов не возникло;

Inpaint area можно переключить на Whole picture, хотя мы пробовали оба варианта, и не заметили разницы;

Only mask padding тоже уменьшаем с 50 до 15 пикселей;

Denoising strength увеличиваем, так как нам нужна сильно отличающаяся от исходной картинка на фоне. При значениях меньше 0,7 Stable Diffusion продолжала рисовать доски по краям, а вот при 0,78 они исчезли и появился нормальный лес.

Не забываем убедиться, что соотношение сторон исходного фото и генерируемой картинки совпадают / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Чтобы перенести гитаристку в лес, используем довольно простой запрос Rocky road, forest, trees, sun on the background. Девушку в запросе не упоминаем, так как работаем только с фоном.

Лес, солнце, боке и пирамида из камней за спиной. И всего лишь с восьми попыток / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

И, разумеется, Inpaint можно использовать для доработки сгенерированных нейросетью картинок, если в них не всё идеально. Если Stable Diffusion нарисовала вам человека, у которого что-то не так с лицом, или есть лишние пальцы на руках, это тоже можно поправить в этой вкладке. Нарисуйте маску в нужной области, и попросите нейросеть сгенерировать голову с открытыми глазами или руку с пятью пальцами — есть шанс, что она вас послушается и исправит недостатки.

Реалистичное размытие фона с помощью Stable Diffusion и Adobe Photoshop

Для работы с размытием фона мы будет работать одновременно со Stable Diffusion и с Adobe Photoshop. Представим, что в нашем распоряжении есть фотография с очень высокой ГРИП, а нам хочется добавить на неё размытия. Пусть зрители думают, что мы снимали на дорогой светосильный объектив с хорошим боке.

Просто размыть всё в Adobe Photoshop с помощью фильтров Gaussian Blur или Lens blur тут не получится — придётся рисовать сложные маски, и даже в этом случае всё изображение за пределами маски будет размыто одинаково. 

Фото снято то ли на телефон, то ли на камеру с сильно закрытой диафрагмой, и глубина резкости очень большая / Фото: pixabay.com

А вот камера размывает изображение по-разному: чем дальше предмет от объектива, тем сильней он будет размыт. Получить похожий эффект нам поможет карта глубины, которую мы и сгенерируем с помощью нейросети. 

Нам понадобится расширение для нейросети depthmap2mask, которое тоже можно найти на Гитхабе, вот здесь. Чтобы его установить, переходим во вкладку Extensions и выбираем Install from URL. Вставляем в нужное поле ссылку, и жмём на кнопку Install. После этого переключаемся на Installed, убеждаемся, что расширение на месте, и нажимаем большую кнопку Apple and restart UI. Когда интерфейс перезагрузится, можно работать.

Устанавливаем расширение / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Теперь идём в уже знакомый нам раздел img2img, во вкладку img2img. Загружаем туда наше фото. Традиционно выставляем размер изображения (1) так, чтобы соотношение сторон не менялось. Denoising strength (2) ставим на ноль. В разделе Script (3) выбираем установленное расширение, а модель (4) — dpt_beit_large_512.

Вводим настройки таким образом / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Генерируем, и получаем вот такую чёрно-белую картинку — это и есть наша карта глубины. Сохраняем её, и нейросеть можно закрывать, дальнейшая работа будет происходить в Adobe Photoshop.

Карта глубины. Чем светлее объект, тем дальше он от нас находится / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Открываем в Adobe Photoshop наше изображение. Переходим во вкладку Каналы (Channels) и жмём на плюс, чтобы создать новый канал. У нас появился канал Alpha 1. В него мы и вставляем нашу карту глубины, созданную с помощью Stable Diffusion.

После этого снова переключаемся на канал RGB / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Идём в раздел фильтров, и выбираем фильтр Lens Blur/Размытие объектива. В качестве карты глубины (Depth map) указываем наш канал Alpha 1, радиус выбираем так, чтобы получить убедительное (но не чрезмерное) размытие. И теперь самое интересное: с помощью инструмента Set Focal Point/Задать фокус мы можем показать Фотошопу, какой из объектов оставить резким, а что размыть. В этом помогает как раз созданная нейросетью карта глубины, без неё такой фокус не получится.

После того, как фильтр «сфокусировался» на нужном нам объекте, нажимаем ОК / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

При желании можно создать даже несколько версий исходной картинки, сфокусировавшись отдельно на переднем и на заднем плане и размыв остальное. В целом, получилось похоже на снимок со светосилого объектива и полнокадровой камеры. При этом мы сами можем выбирать, где будет наш фокус.

Сперва наш «объектив» сфокусировался на юноше за передним столиком, а затем перевёл фокус на официанта вдали / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Генерируем изображение по эскизу с помощью Stable Diffusion

Представим, что нам предстоит снять фото для соцсетей бургер-бара, и нужен эскиз, чтобы показать заказчику и модели своё видение. Но с рисованием у нас не очень, так что попробуем с помощью нейросети улучшить наш эскиз.

Для этого понадобится вкладка Sketch из раздела img2img — в ней мы будем рисовать набросок. Интерфейс в этой вкладке очень похож на тот, с которым мы работали, создавая маску в Inpaint. Разница только в том, что у кисти теперь есть не только размер, но и палитра выбора цвета:

Эскиз поедателя бургера / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Наш эскиз готов. Он нарисован мышью, так что особой точности нет. Если использовать графический планшет, можно добиться результата получше. Ну а при желании можно и вовсе нарисовать эскиз в любимом редакторе, и уже потом скормить его нейросети.

Теперь можно генерировать. Настройки вкладки Sketch выглядят точно так же, как и во вкладке img2img, с которой мы работали в первой главе нашей статьи. Ключевые слова довольно простые: «photo of man eating burger, bar, table, bokeh lights background».

Всего 5 попыток, и наш бургероед стал вполне похож на человека / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Самым важным в настройках, как обычно, был параметр Denoising strength. Приличные картинки получались в довольно узком диапазоне от 0,7 до 0,78. При меньших значениях картинка была слишком «рисованной», ну а при больших, несмотря на фотореалистичность, отличалась по композиции.

Генерация человека с бургером с разным значением Denoising strength / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

Повозившись минут 20, мы получили вполне приличную картинку. Её уже можно показывать людям и использовать в качестве референса к фотосессии. Впрочем, может, фотосессия уже и не понадобится?

Бургероед от Stable Diffusion / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

1

11 мая 2023

52798

1

0

0

Самые новые

Самые читаемые