Содержание статьи
Нейросеть, создающая картинки из текста
Почему у нейросетей плохо выходят надписи
Скорее всего, вам достанется средней паршивости Tesla K80, на котором картинка в хорошем качестве считается полчаса–час. Но если повезёт (чаще всего это бывает ночью), можно заполучить и Tesla T4, а это уже означает ускорение почти на порядок плюс некоторые дополнительные возможности, о которых я скажу далее.
Свой прошлый пост я сопроводил картинкой, нарисованной при помощи нейросети. Этот факт заинтересовал многих куда больше, чем локальный юмор научных сотрудников. Несколько человек под это дело на меня даже подписалось. Теперь уже не отвертеться, так что держите рассказ о том, что это за сетка такая и как ей пользоваться.
Любопытные картинки получаются, когда сети попадаются слова с множественными значениями. Скажем, «Red Square» — и «Красная площадь», и «красный квадрат». Нейросеть не могла знать, что именно от неё хотят, поэтому на всякий случай сгенерировала картинку «и нашим, и вашим» — красный квадрат, но со структурой брусчатки.
Как языковые модели видят тексты
Модель видит текст как единицы языка: слова, буквы, цифры или знаки препинания — их по-другому называют токенами. Из чего будут состоять токены, зависит от того, как программист, который работает с моделью, поделил текст. Можно анализировать выражения на уровне букв, слов или частей слова.
Владимир рассказывает: «Дальнейший процесс зависит от того, какую задачу мы хотим решить: если нейросеть анализирует предложение и должна выдать предложение, то языковая модель обновляет контекст новыми сгенерированными словами и снова предсказывает слово».
Более современные модели на основе нейросетей ориентируются на большее количество параметров. В отличие от, например, n-граммных, которые смотрят на фиксированное число слов, они могут смотреть на весь текст целиком. Кроме того, они способны учитывать стиль текста, день недели и даже сезонность — это как раз контекст.
Нейросеть, создающая надписи
«Мы разбиваем слова на популярные части, например „велотренажёр“ → „вело“, „трен“, „ажёр“», — рассказывает Владимир Морозов. Такой формат удобен тем, что токены получаются более осмысленными, чем если бы текст делился на буквы, но занимают меньше памяти в сравнении со словарями, которые состоят из слов.
Если модель смотрит на один последний токен, это униграммная модель: она предсказывает следующее слово по последнему во фразе. Биграммные модели смотрят на два слова назад. Но технически количество слов, которые будут учитываться в предсказании, не ограничено. Поэтому модели могут быть n-граммными, где n — любое число. В сравнении с другими модели такого типа быстро работают и мало весят, особенно если значение n небольшое, а токен — буква или часть слова. Поэтому n-граммные модели активно используют в клавиатурах, чтобы персонализировать подсказки.
Если вы хотите работать только с текстом, ничего кроме prompts вам не нужно. Если же требуется стартовая картинка, вставьте её URL в одинарных кавычках вместо None вот сюда:
init_image = None. Также рекомендую для начала skip_timesteps = 300 и init_scale = 1000.
Примечательно, что CLIP Guided Diffusion HQ была обучена не на заранее размеченных наборах данных, а на 400 миллионах пар «картинка-текст», взятых просто из интернета. Да, мемы с котиками, рисунки фурей с Deviantart и предвыборные плакаты Трампа — всё это сеть впитала в себя, словно дух реки из «Унесённых призраками». Причём алгоритм сам определял, какой текст к какой картинке относится, что привело к некоторым любопытным особенностям. Чтобы хоть немножко «окультурить» нейронку, авторы вручную добавили в датасет ещё 500 тысяч изображений, которые ищутся по словам из заголовков статей английской Википедии.
Мы уже много рассказывали про нейросети, в том числе для генерации изображений. Одна из больших их проблем – невозможность генерировать нормальный текст на картинке: получается либо абракадабра, либо вообще нечитаемые символы. Но бывшие сотрудники Google смогли исправить этот недостаток — они запустили сервис Ideogram, в котором любые надписи по вашему желанию генерируются с невероятной точностью.
Если вам мало возможностей huggingface.co , советую обратиться к оригинальному коду авторства Katherine Crowson. Заходите сюда под гугл-аккаунтом, нажимайте «Подключиться» в правом верхнем углу и надейтесь, что вам не выпадет сообщение о том, что доступен только центральный процессор. Если же вам предоставили GPU, самое время заглянуть в зубы дарёному коню. Для этого поставьте курсор на первый блок кода и нажмите Ctrl+Enter, чтобы выполнить его. На экране появится информация о графическом ускорителе виртуальной машины.
Если требуется дорисовать (ну или сделать более наркоманской) существующую картинку, её нужно добавить в поле initial image. Параметр skip_timesteps влияет на то, на сколько итераций нейросеть может уйти в своих фантазиях от предложенного образа, а clip guidance scale определяет, насколько строго его нужно придерживаться.
Нейросети стали обыденностью: студенты пишут курсовые с помощью ChatGPT, иллюстраторы рисуют в Midjourney, а Т9 регулярно предлагает неловкие автозамены. Технологиями заинтересовались и корпорации: например, РЖД провели конкурс цифрового искусства. Но что мы знаем о том, как нейросети работают с языком? Как видят слова и изображают их? Спросили у Владимира Морозова — разработчика машинного обучения в отделе обработки естественного языка «Яндекса».
Как вводить запрос в Ideogram
За последние полтора года (примерно тогда в свет вышла первая версия MidJourney) нейросети для генерации изображений прошли огромный путь улучшений и стали создавать качественные работы. Тем не менее, все еще встречаются «изъяны» — неправильное количество пальцев на руках (или ногах), косые лица, неразборчивые надписи.
Принципы работы языковой модели зависят от её типа. До того как разработчики стали использовать нейросети, в ходу были более простые статистические алгоритмы. Языковые модели на их основе называют классическими. Простейшая модель такого рода, например, выдаёт одно и то же слово вне зависимости от того, что получает на входе. Более сложные учитывают вероятности. Например, могут подсчитать, что после «привет» люди часто пишут «как дела», а после «хлеб» — «белый». В качестве предсказания модель может предложить самое частотное слово или слово, которое встречается с определённой вероятностью. Логика работы зависит от того, какая стратегия предсказания заложена в модель.
Сейчас каждый может опробовать новую нейросеть и насладиться результатами ее работы. Достаточно зайти на сайт ideogram.ai/ и пройти регистрацию при помощи аккаунта Google. После этого вы попадаете на главную страницу, где будут высвечиваться ваши работы и лента с изображениями, созданными другими пользователями:
Как языковые модели видят тексты
Модель видит текст как единицы языка: слова, буквы, цифры или знаки препинания — их по-другому называют токенами. Из чего будут состоять токены, зависит от того, как программист, который работает с моделью, поделил текст. Можно анализировать выражения на уровне букв, слов или частей слова.
Более современные модели на основе нейросетей ориентируются на большее количество параметров. В отличие от, например, n-граммных, которые смотрят на фиксированное число слов, они могут смотреть на весь текст целиком. Кроме того, они способны учитывать стиль текста, день недели и даже сезонность — это как раз контекст.
В итоге, даже если в обучающей выборке есть достаточно изображений с правильным числом пальцев на руках или красивыми и понятными надписями, нейросеть просто не понимает, какая конкретная деталь на изображении — надпись, а какая — палец. Поэтому, когда в запросе алгоритм видит фразу, например, «табличка с текстом I love you», он может выдать что-то вроде «IIu lvooo Youuu».
Запрос вводится в поле text, ползунок timestep respacing задаёт количество итераций (чем больше, тем проработаннее будет картинка), остальные параметры первое время можно не трогать. Нажимаем [Submit], ждём несколько минут и получаем свою дозу ЛСД размером 256 × 256 пикселей. Да, негусто, но таковы ограничения используемого датасета и доступной аппаратуры. О том, как можно поднять разрешение, мы ещё поговорим в конце поста.
«Мы разбиваем слова на популярные части, например „велотренажёр“ → „вело“, „трен“, „ажёр“», — рассказывает Владимир Морозов. Такой формат удобен тем, что токены получаются более осмысленными, чем если бы текст делился на буквы, но занимают меньше памяти в сравнении со словарями, которые состоят из слов.