Meet YOLO26: next-gen vision AI.

Link to this sectionКак создать семантический поиск изображений с помощью OpenAI CLIP и Meta FAISS#

Это руководство поможет тебе создать поисковик семантического поиска по изображениям, используя OpenAI CLIP, Meta FAISS и Flask. Объединив визуально-языковые эмбеддинги CLIP с эффективным поиском ближайших соседей FAISS, ты сможешь создать веб-интерфейс, который находит релевантные изображения по текстовым запросам на естественном языке, без необходимости в метках или категориях.



Watch: How Similarity Search Works | Visual Search Using OpenAI CLIP, META FAISS and Ultralytics Package 🎉

Обзор веб-страницы Flask с результатами семантического поиска

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

Link to this sectionПочему стоит использовать семантический поиск изображений?#

Создание собственной системы семантического поиска изображений с помощью CLIP и FAISS дает несколько существенных преимуществ:

  • Возможности zero-shot: Тебе не нужно обучать модель на своем наборе данных. Zero-shot обучение в CLIP позволяет делать запросы к любой коллекции изображений на естественном языке, что экономит время и ресурсы.
  • Человеческое понимание: В отличие от поиска по ключевым словам, CLIP понимает семантический контекст и находит изображения по абстрактным, эмоциональным или описательным запросам, таким как "счастливый ребенок на природе" или "футуристический силуэт города ночью".
  • Без меток и метаданных: Для этого подхода нужны только исходные изображения. CLIP создает эмбеддинги без какой-либо ручной аннотации.
  • Гибкий и масштабируемый поиск: FAISS обеспечивает быстрый поиск ближайших соседей даже на больших наборах данных, предоставляя ответ в реальном времени для тысяч или миллионов эмбеддингов.
  • Межотраслевое применение: Строишь ли ты персональный фотоархив, инструмент для творческого вдохновения, систему поиска товаров или рекомендательную систему для произведений искусства — этот стек адаптируется с минимальными настройками.

Link to this sectionКак работает семантический поиск изображений#

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

  • CLIP использует визуальный энкодер (например, ResNet или ViT) для изображений и текстовый энкодер (на базе Transformer) для языка, чтобы проецировать и то, и другое в единое мультимодальное пространство эмбеддингов. Это позволяет напрямую сравнивать текст и изображения с помощью косинусного сходства.
  • FAISS (Facebook AI Similarity Search) создает индекс эмбеддингов изображений и обеспечивает быстрый, масштабируемый поиск наиболее близких векторов для заданного запроса.
  • Flask предоставляет простой веб-интерфейс для отправки запросов на естественном языке и отображения семантически подходящих изображений из индекса.

Процесс поиска изображений OpenAI CLIP

Поскольку и изображения, и текст попадают в одно и то же векторное пространство, поиск является zero-shot: тебе не нужны метки или категории, достаточно только данных изображений и хорошего промпта.

Процесс индексации векторов эмбеддингов Meta FAISS

Link to this sectionЗапуск веб-приложения для семантического поиска#

Класс SearchApp запускает полный интерфейс Flask. При первом запуске он загружает набор примеров изображений, строит индекс FAISS и предоставляет страницу, где ты можешь ввести запрос и просмотреть ранжированные результаты.

Предупреждение о пути к изображению

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

from ultralytics import solutions

app = solutions.SearchApp(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cpu"  # configure the device for processing, e.g., "cpu" or "cuda"
)

app.run(debug=False)  # You can also use `debug=True` argument for testing

Link to this sectionПрограммный поиск изображений#

Класс VisualAISearch выполняет все операции на стороне бэкенда без участия веб-слоя:

  • Загружает или строит индекс FAISS из локальных изображений.
  • Извлекает эмбеддинги изображений и текста с помощью CLIP.
  • Выполняет поиск сходства с использованием косинусного сходства.

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

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cpu"  # configure the device for processing, e.g., "cpu" or "cuda"
)

results = searcher("a dog sitting on a bench")

# Ranked Results:
#     - 000000546829.jpg | Similarity: 0.3269
#     - 000000549220.jpg | Similarity: 0.2899
#     - 000000517069.jpg | Similarity: 0.2761
#     - 000000029393.jpg | Similarity: 0.2742
#     - 000000534270.jpg | Similarity: 0.2680

Link to this sectionНастройка параметров VisualAISearch#

В таблице ниже приведены доступные параметры для VisualAISearch:

АргументТипПо умолчаниюОписание
datastr'images'Путь к директории изображений, используемой для поиска по сходству.
АргументТипПо умолчаниюОписание
devicestrNoneУказывает устройство для вывода (например, cpu, cuda:0 или 0). Позволяет выбирать между CPU, конкретным GPU или другими вычислительными устройствами для выполнения модели.
Управляй своими данными в облаке

Чтобы искать коллекции изображений в производственном масштабе без необходимости управлять локальными файлами, ты можешь организовать и версионировать свои изображения на платформе Ultralytics перед индексацией их с помощью CLIP и FAISS.

Link to this sectionЗаключение#

С помощью CLIP, FAISS и пакета Ultralytics для Python ты можешь создать систему семантического поиска изображений в режиме zero-shot всего в несколько строк кода — как веб-приложение на Flask или как программный поисковый бэкенд. После этого укажи data на свою директорию с изображениями для индексации, а затем изучи другие решения Ultralytics, чтобы расширить свои рабочие процессы компьютерного зрения.

Link to this sectionFAQ#

Link to this sectionКак CLIP понимает и изображения, и текст?#

CLIP (Contrastive Language Image Pretraining) — это модель, разработанная OpenAI, которая учится связывать визуальную и лингвистическую информацию. Она обучена на огромном наборе данных из изображений, сопоставленных с подписями на естественном языке. Такое обучение позволяет ей проецировать изображения и текст в общее пространство эмбеддингов, что дает возможность сравнивать их напрямую с помощью векторного сходства.

Link to this sectionПочему CLIP считается настолько мощным для задач ИИ?#

Что делает CLIP выдающимся, так это его способность к обобщению. Вместо того чтобы обучаться только на конкретных метках или задачах, он учится на самом естественном языке. Это позволяет ему обрабатывать гибкие запросы, такие как "мужчина, катающийся на гидроцикле" или "сюрреалистичный пейзаж сна", что делает его полезным для всего — от классификации до творческого семантического поиска, без необходимости дообучения.

Link to this sectionЧто именно делает FAISS в этом проекте (семантический поиск)?#

FAISS (Facebook AI Similarity Search) — это инструментарий, который помогает очень эффективно искать по многомерным векторам. Как только CLIP превращает твои изображения в эмбеддинги, FAISS позволяет быстро и легко находить ближайшие совпадения для текстового запроса, что идеально подходит для поиска изображений в реальном времени.

Link to this sectionЗачем использовать Ultralytics Python package, если CLIP и FAISS разработаны OpenAI и Meta?#

Хотя CLIP и FAISS разработаны OpenAI и Meta соответственно, пакет Ultralytics для Python объединяет их в единый конвейер семантического поиска изображений, работающий всего в несколько строк кода:

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cpu"  # configure the device for processing, e.g., "cpu" or "cuda"
)

results = searcher("a dog sitting on a bench")

Эта высокоуровневая реализация берет на себя:

  • Генерацию эмбеддингов изображений и текста на основе CLIP.
  • Создание и управление индексом FAISS.
  • Эффективный семантический поиск с использованием косинусного сходства.
  • Загрузку изображений из директорий и визуализацию.

Link to this sectionМогу ли я настроить фронтенд этого приложения?#

Да. Текущая настройка использует Flask с базовым HTML-фронтендом, но ты можешь заменить его на свой собственный HTML или создать более динамичный пользовательский интерфейс с помощью React, Vue или другого фронтенд-фреймворка. Flask может служить бэкенд API для твоего пользовательского интерфейса.

Link to this sectionМожно ли искать по видео, а не только по статичным изображениям?#

Не напрямую. Простой обходной путь — извлекать отдельные кадры из твоих видео (например, один кадр в секунду), рассматривать их как отдельные изображения и подавать в систему. Таким образом, поисковая система сможет семантически индексировать визуальные моменты из твоих видео.

Комментарии