promt: кнопка enter с клавиатуры, черный цвет, белый фон, светящаяся надпись
promt: кнопка enter с клавиатуры, черный цвет, белый фон, светящаяся надпись

Привет Хабр! Хочу поделиться своим опытом взаимодействия с нейросетками. В последнее время они наделали много шума, в сети есть огромное количество примеров сгенерированных изображений очень приличного качества и хорошей проработки. Меня вдохновили эти примеры, и я решил на боевом проекте протестировать Midjourney, Stable Diffusion и Kandinsky, чтобы выявить их сильные и слабые стороны, и понять — какая нейронка больше всего подойдёт для моей дальнейшей работы. Основной целью было сгенерировать на лендинг кнопку, которая по форме была бы как классическая кнопка Enter, но визуально выглядела бы чуть более интересно: подсветка, неон, футуризм. Ниже опишу свой процесс и результаты генераций нейросеток.

Первая попытка

Пошел по простому пути, написал топорный promt, перечислил все характеристики, которые хотел бы увидеть на изображении. Но результат оказался сильно далек от задумки, кнопка получилась совершенно не похожа на Enter.

Promt MJ и SD: enter button black color, luminous inscription, white background, strongly detailed, top viewPromt KS: кнопка enter черного цвета, светящаяся надпись, белый фон, высокая детализация, вид сверху
Promt MJ и SD: enter button black color, luminous inscription, white background, strongly detailed, top view
Promt KS: кнопка enter черного цвета, светящаяся надпись, белый фон, высокая детализация, вид сверху
тот же promt
тот же promt

Я много раз прогонял генерацию этого promt, но результат никак не менялся в лучшую сторону. Midjourney и Kandinsky выдавали красивую кнопку с множеством деталей, но совершенно далекую от задумки. Stable Diffusion вообще лепил всё что угодно, но ничего похожего на кнопки клавиатуры я не получал. Я понял что количеством генераций тут ничего не изменить, и решил попробовать сменить тактику.

Картинка референс

Так как ни одна из нейросеток видимо не понимала, что такое классическая кнопка Enter, решил показать им как она выглядит с помощью картинки. Нагуглил изображение, которое соответствовало моим пожеланиям, и скормил его каждой нейронке: для Midjourney указал ссылку на изображение и promt, для Kandinsky закинул фотографию через режим «Вариация картинки», для Stable Diffusion воспользовался расширением ControlNet. И принялся ждать.

Promt MJ и SD: https://s.mj.run/OOlHZhpTXNg, black enter button, luminous inscription, white background, strongly detailed, top view Promt SD: black enter button, luminous inscription, white background, strongly detailed, top view + картинка через ControlNet, preprocessor и model cannyKS: в режиме "вариация картинки" загрузил референс
Promt MJ и SD: https://s.mj.run/OOlHZhpTXNg, black enter button, luminous inscription, white background, strongly detailed, top view
Promt SD: black enter button, luminous inscription, white background, strongly detailed, top view + картинка через ControlNet, preprocessor и model canny
KS: в режиме "вариация картинки" загрузил референс

Midjourney был конечно далёк от нужной формы, но уже выдал некую угловатую кнопку с надписями. Stable Diffusion сделал максимально похожую на референс, но сам вариант оказался очень скучный. Kandinsky выдал что‑то своё абстрактное, с ним нужно было еще поэкспериментировать.

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

Midjourney

С ней я продолжил использовать исходную референсную картинку и слегка изменил promt. На некоторые из хороших результатов я запрашивал дополнительные варианты, в надежде получить что‑то более интересное. Из огромного количества вариантов лишь единицы были близки к моей задумке. Над ними еще предстояло поработать.

Promt MJ: https://s.mj.run/OOlHZhpTXNg, black enter button, irregular shape, white background, super detailed, top view
Promt MJ: https://s.mj.run/OOlHZhpTXNg, black enter button, irregular shape, white background, super detailed, top view

Stable Diffusion

Поскольку на предыдущем этапе нейросеть показала хороший результат при работе через ControlNet, я повторил загрузку референсного изображения кнопки и упростил promt до black button, luminous inscription, white background, strongly detailed, top view. Пришлось начать экспериментировать с режимами Preprocessor в ControlNet: где‑то нейронка видела очертание кнопки, где‑то могла воспроизвести объем, а где‑то рисовала кнопку в простых прямых линиях (для наглядности слева вывел изображение). Было смешно, что несмотря на референс, она добавляла какие‑то новые несуразные объекты: портрет, пуговицу, символы и т. д.

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

Preprocessor, Model: normal_map
Preprocessor, Model: normal_map
Preprocessor, Model: canny
Preprocessor, Model: canny
Preprocessor, Model: depth
Preprocessor, Model: depth
Preprocessor, Model: hed
Preprocessor, Model: hed
Preprocessor, Model: mlsd
Preprocessor, Model: mlsd
Preprocessor, Model: segmentation
Preprocessor, Model: segmentation

Kandinsky

Сначала попробовал неоднократно скормить ей референсное изображение и посмотреть что получится. По всей видимости из‑за отсутствия в этом режиме возможности добавить promt, генерировала она всё что захочет, но не то что хочу я.

У меня получилось несколько изображений, который визуально выглядят неплохо, но сильно далеки от моей задумки. Тогда я переключился на обычный метод генерации изображения через promt, всячески менял и упрощал его, чтобы выявить хоть какую‑то закономерность, но так я её и не нашёл.

promt: черная кнопка энтер со светящейся надписью
promt: черная кнопка энтер со светящейся надписью
promt: черная кнопка enter со светящейся надписью
promt: черная кнопка enter со светящейся надписью
promt: кнопка enter с клавиатуры, черный цвет, белый фон, светящаяся надпись
promt: кнопка enter с клавиатуры, черный цвет, белый фон, светящаяся надпись
promt: форма кнопки enter, черный цвет, белый фон, светящаяся надпись
promt: форма кнопки enter, черный цвет, белый фон, светящаяся надпись
promt: кнопка ввода черного цвета
promt: кнопка ввода черного цвета

Что в итоге

Изначально я задумывал конкретную форму кнопки Enter с небольшим добавлением элементов и символов, но после всех генераций в разных нейросетях я пришёл к выводу, что возьму результат Midjorney за основу и буду дорабатывать его в Figma.

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

Вывод

Нет плохих или хороших нейросеток. Из личного опыта я понял, что у каждой своё назначение. Midjourney и Kandinsky очень хорошо подходят для создания какого‑то креативного изображения, обложки, или для поиска идей. У Midjourney есть несомненно хорошее преимущество сгенерировать новые варианты на основе предыдущего результата. Что касается Stable Diffusion — в связке с ControlNet можно получить более предсказуемый результат, а форму для референса можно нарисовать за 1 минуту в любом графическом редакторе, чем мы и воспользовались в дальнейшем.

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


  1. dprotopopov
    11.04.2023 12:55
    +1

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

    Может в них уже уберут связку "россия" -> церковные луковки?


    1. melpnz Автор
      11.04.2023 12:55
      +2

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


    1. nidalee
      11.04.2023 12:55
      +2

      когда выйдет очередная версия нейросетки-художника… со своими промтами ( обученная на другой разметке картинок ) ?
      Принципиально ничего не изменится. Есть всего два варианта формирования промта: либо описательный — «1 человек в рубашке стоит и делает Х», либо «теговый» — «1 человек, стоит, делает Х, рубашка».
      Определяется он датасетом при обучении модели.
      Других не придумали и вряд ли уже придумают.


      1. dprotopopov
        11.04.2023 12:55
        +1

        Других не придумали и вряд ли уже придумают.

        1. сепка в конвеере операндов (программирование)

        2. 2d ввод (по сути тот же художник-скетчер)

        3. 3d ввод

        4. захват электоэнфоцилограммы

          продолжать?

        ЗЫ

        Ждём статью какой танец с бубном надо станцевать, чтобы появилась желаемая картинка


        1. nidalee
          11.04.2023 12:55
          +2

          сепка в конвеере операндов (программирование)
          Есть уже все это, на нодах, без текстового промта просто нет смысловой нагрузки у генерации, вы просто шум в шум перегоняете.
          2d ввод (по сути тот же художник-скетчер)
          img2img уже существует — он не замена текстовому промту, а дополнение. Ну или основа, если вам угодно.
          3d ввод
          Тот же самый img2img, только в профиль, уже реализован как controlnet (не помню, какой именно препроцессор, ибо не пользуюсь) — как вы могли догадаться, все еще бесполезен без текстового промта.
          захват электоэнфоцилограммы
          Ноу комментс.
          Ждём статью какой танец с бубном надо станцевать, чтобы появилась желаемая картинка
          Нужно просто упырить мел и принять, что 1-в-1 как в ваших фантазиях не сделает даже художник. После этого становится сильно проще.


          1. dprotopopov
            11.04.2023 12:55

            в процессе разметки можно сопоставить что угодно с чем угодно и на этом обучить

            смешно будет смотреть, как промт-маги танцуют с бубном для получения картинки


  1. andreymal
    11.04.2023 12:55
    +5

    Может, проблема в том, что на клавиатуре не кнопки, а клавиши?


    1. melpnz Автор
      11.04.2023 12:55
      +1

      Перепроверил, замены "кнопка" на "клавиша" не особо меняет результат.

      Примеры в Stable Diffusion и Kandinsky
      SD promt: Enter key black color, luminous inscription, white background, strongly detailed, top view
      SD promt: Enter key black color, luminous inscription, white background, strongly detailed, top view
      KS promt: черная клавиша enter со светящейся надписью
      KS promt: черная клавиша enter со светящейся надписью

      В любом случае спасибо за предположение


      1. butsan
        11.04.2023 12:55
        +1

        «Клавиша ввода» / «Return»


  1. diogen4212
    11.04.2023 12:55
    +1

    мне кажется, что "Preprocessor, Model: hed" больше всего подошёл для вашей задачи. И кнопка ровная, и фон есть, и текстура интересная.
    Можно кстати и надпись отдельно накладывать через ControlNet и она будет читаемой и впишется в стиль (сам не пробовал, но видел гайды) — тогда можно взять красивую кнопку с кривым текстом, очистить его и добавить заново нормальный.


  1. acsent1
    11.04.2023 12:55

    Изначальная цель была сделать такую же как на клавиатуре, только с перламутровыми пуговицами, то бишь блестящую?


    1. melpnz Автор
      11.04.2023 12:55

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