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

Требования к аппаратной части

Их особо и нет. Необходимо, чтобы на вашем компьютере или планшете был современный браузер. Скорее всего, это уже так. Нужен будет аккаунт в Google для подключения к сервису Google Disk. Этого будет достаточно.

Colab

Нам нужен будет бесплатный GPU. Первым делом идем в Колабу по ссылке https://colab.research.google.com В меню «Файл» создаем блокнот.

Далее подключаем GPU. Идем в меню «Среда выполнения» и выбираем «Сменить среду выполнения». Выбираем, что доступно, кроме CPU. Скорей всего, T4 GPU будет свободно, нам этого хватит.

В правом углу блокнота находим «Подключиться» и подключаемся.

Install

В первой ячейке блокнота устанавливаем необходимые зависимости:

!pip -q install git+https://github.com/huggingface/diffusers transformers accelerate -q

Запускаем выполнение кода. Жмем на кнопку запуска слева ячейки с кодом или наводим курсор на код и жмем CTRL+ENTER, или, для маков, СOMMAND+ENTER. Ждем выполнения.

Импорты

В следующую ячейку копируем следующий код:

from diffusers import StableDiffusionXLPipeline
from diffusers.utils import make_image_grid
import torch

Запускаем.

Инициализация

Далее, копируем код в следующую ячейку:

pipe = StableDiffusionXLPipeline.from_pretrained("segmind/SSD-1B", torch_dtype=torch.float16, use_safetensors=True, variant="fp16")
pipe.to("cuda")

Запускаем. Мы будем использовать не самую большую модель. Конечно, модели есть и побольше, чем эта, но у нас ограничения всё же остались. Бесплатно у нас ограничен размер памяти в Колабе. Его можно посмотреть, если ткнуть на место в верхнем правом углу, где написано ОЗУ и Диск.

Видим, что нам предоставляют только 15Гб. Но этой модели бесплатной памяти вполне хватит.

Теперь магия!

Промты

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

prompt = "Fish plays the guitar" # Positive prompt
neg_prompt = "ugly, blurry, poor quality" # Negative prompt

Да, и составлять промты лучше на английском языке. Модель училась на английском, поэтому русский она поймет, но не так хорошо, как свой родной. Ничего сложного тут нет. Берем GoogleПереводчик и вперед.

В текущем примере мы будем ждать от модели картинку рыбы, которая играет на гитаре.

В негативном промте мы указали, что не хотелось бы, чтобы картинка была некрасивой, размытой и плохого качества. Звучит разумно.

Генерация

Нам потребуется следующий код в новой ячейке:

images = pipe(prompt=prompt, negative_prompt=neg_prompt, width=512, height=512, num_images_per_prompt=4).images
make_image_grid(images, rows=2, cols=2)

Давайте не сразу запускать этот код, а немного разберемся, что есть что. В объекте pipe мы видим несколько параметров. Prompt и negative_prompt: с ними все понятно, говорили о них ранее.

width - ширина картинки

height - высота картинки

Значения этих параметров должны быть кратны 8. Лучше их не ставить больше 1024. Для 4-х картинок за один проход разрешение 512 оптимально. Все, что будет больше, приведет к росту потребления памяти, и система скажет OutOfMemoryError и уйдет в трейс. Надо будет идти снова в "Среду выполнения", перезапускать среду и заново все запускать в блокноте по очереди.

Если нужна картинка с разрешением 1024, то лучше не запускать больше 2-х за один проход. Чем больше будет разрешение, тем детализированнее будет картинка. Экспериментируйте.

num_images_per_prompt — количество изображений, которые будут генериться за один запуск этого кода.

В результате исполнения первой строчки кода мы получим список объектов картинок. В данном случае их будет 4 штуки. Чтобы было нагляднее, мы эти картинки расположим вместе с помощью метода make_image_grid, который расположит картинки в таблице 2х2.

Запускаем.

Каждый раз, когда вы будете исполнять этот код, вы получите разные изображения. Можете сами в этом убедиться.

Чтобы дальше было проще изменять промт и запускать все из одной ячейки, объединим код следующим образом в новой ячейке:

prompt = "Fish plays the guitar" # Positive prompt
neg_prompt = "ugly, blurry, poor quality" # Negative prompt

images = pipe(prompt=prompt, negative_prompt=neg_prompt, width=512, height=512, num_images_per_prompt=4).images
make_image_grid(images, rows=2, cols=2)

Сохранение результата

Помним, что images — это список картинок. В нашем случае их 4. Поэтому, чтобы получить конкретную картинку из списка, нужно в следующей ячейке выполнить:

images[i]

, где i это номер картинки в списке, начиная с 0. Т. е., чтобы получить первую картинку из списка, нужно выполнить код

images[0]

Стили

Стиль, кадр и другие параметры картинок определяются с помощью промта. Можете попробовать такой промт:

prompt = "A brave cat protects the Galaxy from aliens. Anime style. Close up." # Positive prompt
neg_prompt = "ugly, blurry, poor quality" # Negative prompt

images = pipe(prompt=prompt, negative_prompt=neg_prompt, width=512, height=512, num_images_per_prompt=4).images
make_image_grid(images, rows=2, cols=2)

Запускаем.

Дальше, все зависит только от вашей фантазии. Экспериментируйте с промтами и генерируйте, генерируйте, генерируйте.

Комментарии (14)


  1. nin-jin
    26.03.2024 12:28

    А как апи на сайте это реально прикрутить?


    1. 1MK-Ultra
      26.03.2024 12:28

      Вот тут есть api https://fusionbrain.ai/editor/


    1. Vanekchekarmam
      26.03.2024 12:28

      Странный вопрос. ЭТО - никак. Статья не об этом. Если же нужна автоматизация генерации изображений где бы то ни было, то могу советовать API прослойку до Midjourney userapi.ai . Миджорни - колоссально недооцененный инструмент.


    1. NikooleLukas
      26.03.2024 12:28

      Странный вопрос. ЭТО - никак. Статья не об этом. Если же нужна автоматизация генерации изображений где бы то ни было, то могу советовать API прослойку до Midjourney userapi.ai . Миджорни - колоссально недооцененный инструмент.


  1. Moog_Prodigy
    26.03.2024 12:28
    +6

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


    1. GoldenHumans
      26.03.2024 12:28
      +1

      да оно в целом очень неюзабельное, в нодовом интерфейсе стейбл дифьюжн просто кайф какие вещи можно делать. Единственный плюс коллаба это облачность, если комп слабый


  1. shadrap
    26.03.2024 12:28
    +1

    спасибо, котиков рисует хорошо... , но как только попросишь то что надо ... грусть печаль , что Миди , что Стейбл


  1. axe_chita
    26.03.2024 12:28

    Fooocus V2 тоже может быть запущен через Colab

    Из плюсов удобный интерфейс и минимум телодвижений, из минусов, вполне вероятно что вас кикнут через 6-8 генераций, и тогда "приходите завтра".


  1. Tinkz
    26.03.2024 12:28
    +1

    Спасибо, земеля, всё чётенько замутилось


  1. 01Andrew01
    26.03.2024 12:28

    Все что вам нужно это web-ui, но он забанен колабом.

    Описанный метод через api это костыльная неудобная замена, которая может перестать работать в любой момент


  1. ran4erep
    26.03.2024 12:28

    не сочтите за рекламу, но я всё уже сделал за вас... И даже лучшим способом, чем описывает автор...

    https://github.com/ran4erep/Stable-Colab


  1. hitachi75
    26.03.2024 12:28
    +1

    Сделал все как у вас в статье, получил вот таких неплохих рыбов:


    1. Moog_Prodigy
      26.03.2024 12:28

      А я сделал как не в статье, получил вот такие вот неплохие результаты, но показывать я их вам не буду, чтобы не получить статью.


  1. Dm314
    26.03.2024 12:28
    +1

    Будьте осторожны, в какой то момент колаб начал банить за запуск stable diffusion на их серверах по причине: «Мы подозреваем, что в этом аккаунте нарушаются правила, и поэтому закрыли ему доступ к средам выполнения Colab. Вы по-прежнему можете пользоваться другими продуктами Google»

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