50% Фото королевы Елизаветы + 50% “3D unreal engine”
50% Фото королевы Елизаветы + 50% “3D unreal engine”

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

Сказано - сделано. Добавил 8.5M изображений, под лицензией CC0, то есть "Free of copyright".

Более того, убрал те, что не позволяют коммерческое использование, то есть все 18 миллионов, что были, а именно ImageNet21k, Open Images и Places365.

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

Пообщался с творцами прекрасного и один из запросов от ребят - можно ли скомбинировать в одном запросе поиск и по картинке и по тексту?

Да, можно, и технически это не сложно.

Для тех, кто не знает, что происходит под капотом в сервисах, вроде моего ternaus.com напомню.

Когда мы делаем оценку похожести двух изображений мы не сравниваем их попиксельно.

Вместо этого к каждой применяем функцию, которая отображает в пространоство эмбедингов и сравнивем уже их.

В переводе на русский язык: "Прогоняем специльную сеть по картинке, и сравнивем выходы из сетей."

С текстом та же история. Сравниваются не буквы в фразах “Вера любит Пашу” и “Географичка ревнует физрука”, а эмбединги, то есть вектора, полученные из них.

А можно ли сравнивать картинку (пиксели) и текст(буквы)? До начала 2021 года ответ был нет.

В начале 2021 года Open AI выпустили модель CLIP, которая отображает буквы и пиксели в одно пространство, что позволяет сравнивать их между собой.

Так получилось, что под капотом у меня именно эта модель. Изначально я думал только про сравнение изображений, и выбрал модель, которая готовит самые высококачественные эмбединги, что было понятно по соревнованию Kaggle: Google Universal Image Embedding.

Про то, что модель работает и для текста я тогда не думал - это была доп фишечка и поиск текстом на сайт Ternaus.com добавил во многом потому что мог и для упрощения отладки.

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

Наивная часть интуиции надеялась, что покажет красную сову, а умудренная опытом шептала, что garbage in - garbage out, и выведет какой-то хлам.

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

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

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

Кому интересно попробовать скрестить ежа с ужом, то есть картинки и текстового описания - добро пожаловать на сайт, играйте, скачивайте, используйте. Если вставляете в блог пост - буду благодарен если оставите, в качестве благодарности, ссылку на Ternaus.com. Если нет, то тоже не конец мира.

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

Если подумать, то идея усреднения эмбедингов еще глубже.

И тут есть две мысли:

Первая:

Последнее время эмбединги извлекают из песен, фильмов, временных рядов, пользователей, и товаров в магазине.

Прямо напрашивается фича в Spotify - найди мне что-то похожее на вот эту композицию (тыкаем в фугу Баха из плейлиста), но в стиле регги, и голосом похожим на Джона Ленона (это уточняем текстом). Ивлекаем эмбединг из песни, из текста, усредняем, используем в поиске и ага. Прям идея для стартапа.

Вторая:

Генерация картинок по тексту + картинке наброску полетела потому что хочется получить что-то похожее на X, только чуть подправленное.

Проблемы у текущих генерирующих алгоритмов:

  1. Генерировать медленно. Хочется секнды, получаем минуты.

  2. Заранее непонятно, что сгенерирует и насколько похоже на то, что у тебя в голове.

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

Может получится, что в ряде случаев, вместо генерации можно подсунуть поиск по существующим, скажем использовать API у меня на сайте.

А я пока:

Засек время, чтобы посмотреть когда lexica.art и krea.ai добавят такую функциональность. У Lexica под капотом тоже CLIP, им должно быть быстро. Krea.AI, как я понимаю, CLIP пока не использует, им будет посложнее.

И буду думать, что делать дальше.

Следующее, что хочется добавить по технической части - это Chrome Extension. Выделил текст или картинку где-то в интернете, навел мышку, выбрал в меню: “Search on Ternaus”, вжух и тебе показало результат на сайте. Делается в рамках добавления каналов по привлечению траффика на сайт.

А по продуктовой - еще поговорить с художниками для фильмов и для Game Dev, которым нужны наркоманские картинки, как ref’ы. Если есть такие в аудитории, пишите - буду рад пообщаться и добавить функционал, который вам интересен.

P.S. Блог пост начался с картинки королевы Елизаветы + “3D unreal engine”. На удивление тоже работает.
P.P.S. Английская версия поста.

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


  1. vassabi
    16.11.2022 00:00
    +1

    Блог пост начался с картинки королевы Елизаветы + “3D unreal engine”. На удивление тоже работает.

    это-то не удивляет.

    удивительно другое - что эмбеддинг захватывает даже две Одри Хепберн в короне


    1. ternaus Автор
      16.11.2022 00:21
      +1

      Тут все спотыкается о то что "похожесть" определена плохо.

      Это может быть:

      • Женщина

      • Наличие королевских регалий

      • Тип и форма этих регалий.

      • Форма лица.

      • Фон

      еще что-то.

      Ну и да, под поиск по лицам сеть не заточена, так что если делать похожесть по лицам - это надо сверху добавлять Face Detector + Face Recognition, до чего руки, конечно, дойдут очень нескоро.