Перейти к содержанию

Ultralytics API проводника

Заметки сообщества ⚠️

По состоянию на ultralytics>=8.3.10, поддержка Ultralytics explorer была упразднена. Но не волнуйтесь! Теперь вы можете получить доступ к аналогичной и даже расширенной функциональности через Ultralytics HUBнаша интуитивно понятная платформа без кода, разработанная для оптимизации вашего рабочего процесса. С помощью Ultralytics HUB вы можете продолжать изучать, визуализировать и управлять своими данными без усилий, не написав ни строчки кода. Обязательно ознакомьтесь с ним и воспользуйтесь его мощными возможностями! 🚀

Введение

Open In Colab API Explorer - это Python API для изучения ваших наборов данных. Он поддерживает фильтрацию и поиск по набору данных с помощью SQL-запросов, поиск по векторному сходству и семантический поиск.



Смотреть: Ultralytics Обзор API Explorer

Установка

Некоторые функции Explorer зависят от внешних библиотек. Они автоматически устанавливаются при использовании. Чтобы установить эти зависимости вручную, выполните следующую команду:

pip install ultralytics[explorer]

Использование

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")

# Create embeddings for your dataset
explorer.create_embeddings_table()

# Search for similar images to a given image/images
dataframe = explorer.get_similar(img="path/to/image.jpg")

# Or search for similar images to a given index/indices
dataframe = explorer.get_similar(idx=0)

Примечание

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

Если вы хотите принудительно обновить таблицу вкраплений, вы можете передать force=True на create_embeddings_table метод.

Вы можете напрямую обращаться к объекту таблицы LanceDB для выполнения расширенного анализа. Подробнее об этом в разделе Работа с таблицей Embeddings

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

  • По заданному индексу или списку индексов в наборе данных: exp.get_similar(idx=[1,10], limit=10)
  • На любом изображении или списке изображений, не входящих в набор данных: exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)

В случае нескольких входов используется совокупность их вкраплений.

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

Семантический поиск

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

similar = exp.get_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
print(similar.head())

# Search using multiple indices
similar = exp.get_similar(
    img=["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/bus.jpg"],
    limit=10,
)
print(similar.head())
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

similar = exp.get_similar(idx=1, limit=10)
print(similar.head())

# Search using multiple indices
similar = exp.get_similar(idx=[1, 10], limit=10)
print(similar.head())

Построение похожих изображений

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

Построение похожих изображений

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

plt = exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
plt.show()
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

plt = exp.plot_similar(idx=1, limit=10)
plt.show()

2. Спросите ИИ (запрос на естественном языке)

Это позволит вам написать, как вы хотите отфильтровать набор данных, используя естественный язык. Вам не нужно разбираться в написании SQL-запросов. Наш генератор запросов на основе искусственного интеллекта автоматически сделает это под капотом. Например, вы можете сказать: "Покажите мне 100 изображений с одним человеком и двумя собаками. Могут быть и другие объекты", и он сам сгенерирует запрос и покажет вам результаты. Примечание: Это работает с использованием LLM под капотом, поэтому результаты являются вероятностными и могут иногда ошибаться.

Спросите ИИ

from ultralytics import Explorer
from ultralytics.data.explorer import plot_query_result

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

df = exp.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(df.head())

# plot the results
plt = plot_query_result(df)
plt.show()

3. Запросы на SQL

Вы можете выполнять SQL-запросы к набору данных, используя sql_query метод. Этот метод принимает на вход SQL-запрос и возвращает кадр данных pandas с результатами.

SQL-запрос

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

df = exp.sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%'")
print(df.head())

Построение графиков результатов SQL-запросов

Вы также можете построить график результатов SQL-запроса, используя plot_sql_query метод. Этот метод принимает те же аргументы, что и sql_query и отображает результаты в виде сетки.

Построение графиков результатов SQL-запросов

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

# plot the SQL Query
exp.plot_sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%' LIMIT 10")

4. Работа с таблицей вкраплений

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

Наконечник

Проводник работает на LanceDB таблицы. Вы можете получить доступ к этой таблице напрямую, используя Explorer.table объект и выполнять необработанные запросы, накладывать пред- и постфильтры и т.д.

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

Вот несколько примеров того, что можно сделать с помощью таблицы:

Получение необработанных вкраплений

Пример

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

embeddings = table.to_pandas()["vector"]
print(embeddings)

Расширенные запросы с предварительными и последующими фильтрами

Пример

from ultralytics import Explorer

exp = Explorer(model="yolo11n.pt")
exp.create_embeddings_table()
table = exp.table

# Dummy embedding
embedding = [i for i in range(256)]
rs = table.search(embedding).metric("cosine").where("").limit(10)

Создание векторного указателя

При использовании больших наборов данных можно также создать специальный векторный индекс для ускорения запросов. Для этого используется create_index метод на таблице LanceDB.

table.create_index(num_partitions=..., num_sub_vectors=...)

Подробнее о доступных типах векторных индексов и параметрах можно узнать здесь В будущем мы добавим поддержку создания векторных индексов непосредственно из API Explorer.

5. Применение вкраплений

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

Индекс сходства

Explorer поставляется с similarity_index операция:

  • Он пытается оценить, насколько каждая точка данных похожа на остальные.
  • Для этого нужно подсчитать, сколько вкраплений изображений лежат ближе, чем max_dist к текущему изображению в сгенерированном пространстве встраивания, учитывая top_k похожие изображения за один раз.

Он возвращает кадр данных pandas со следующими столбцами:

  • idx: Индекс изображения в наборе данных
  • im_file: Путь к файлу изображения
  • count: Количество изображений в наборе данных, которые ближе, чем max_dist к текущему изображению
  • sim_im_files: Список путей к count похожие изображения

Наконечник

Для заданного набора данных модель, max_dist & top_k сгенерированный однажды индекс сходства будет использоваться повторно. Если ваш набор данных изменился или вам просто нужно заново сгенерировать индекс сходства, вы можете передать force=True.

Индекс сходства

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()

sim_idx = exp.similarity_index()

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

import numpy as np

sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]

Визуализация пространства встраивания

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

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

# Reduce dimensions using PCA to 3 components for visualization in 3D
pca = PCA(n_components=3)
reduced_data = pca.fit_transform(embeddings)

# Create a 3D scatter plot using Matplotlib Axes3D
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d")

# Scatter plot
ax.scatter(reduced_data[:, 0], reduced_data[:, 1], reduced_data[:, 2], alpha=0.5)
ax.set_title("3D Scatter Plot of Reduced 256-Dimensional Data (PCA)")
ax.set_xlabel("Component 1")
ax.set_ylabel("Component 2")
ax.set_zlabel("Component 3")

plt.show()

Начните создавать собственные отчеты об исследовании наборов данных CV с помощью API Explorer. Для вдохновения ознакомьтесь с

Приложения, созданные с помощью Ultralytics Explorer

Попробуйте наш демонстрационный графический интерфейс на основе API Explorer

Скоро будет

  • [ ] Объединить определенные метки из наборов данных. Пример - Импорт всех person этикетки от COCO и car этикетки с городских пейзажей
  • [ ] Удалите изображения, индекс сходства которых выше заданного порога
  • [ ] Автоматическое сохранение новых наборов данных после слияния/удаления записей
  • [ ] Расширенные визуализации наборов данных

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

Для чего используется API Ultralytics Explorer?

API Ultralytics Explorer предназначен для всестороннего изучения наборов данных. Он позволяет пользователям фильтровать и искать данные в наборах с помощью SQL-запросов, поиска по векторному сходству и семантического поиска. Этот мощный Python API может работать с большими наборами данных, что делает его идеальным для различных задач компьютерного зрения, использующих Ultralytics модели.

Как установить Ultralytics Explorer API?

Чтобы установить Ultralytics Explorer API вместе с его зависимостями, выполните следующую команду:

pip install ultralytics[explorer]

Это автоматически установит все необходимые внешние библиотеки для функциональности API Explorer. Дополнительные сведения о настройке см. в разделе "Установка" нашей документации.

Вы можете использовать API Ultralytics Explorer для поиска сходства, создав таблицу вкраплений и запросив ее для поиска похожих изображений. Вот базовый пример:

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
explorer.create_embeddings_table()

# Search for similar images to a given image
similar_images_df = explorer.get_similar(img="path/to/image.jpg")
print(similar_images_df.head())

Более подробную информацию можно найти в разделе "Поиск сходства".

Каковы преимущества использования LanceDB с Ultralytics Explorer?

LanceDB, используемая под капотом Ultralytics Explorer, предоставляет масштабируемые таблицы вкраплений на диске. Это позволяет создавать и повторно использовать вкрапления для больших наборов данных, таких как COCO, не исчерпывая памяти. Эти таблицы создаются только один раз и могут быть использованы повторно, что повышает эффективность работы с данными.

Как работает функция Ask AI в Ultralytics Explorer API?

Функция Ask AI позволяет пользователям фильтровать наборы данных с помощью запросов на естественном языке. Эта функция использует LLM для преобразования этих запросов в SQL-запросы за кулисами. Вот пример:

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
explorer.create_embeddings_table()

# Query with natural language
query_result = explorer.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(query_result.head())

Другие примеры можно найти в разделе Ask AI.

📅 Создано 11 месяцев назад ✏️ Обновлено 1 месяц назад

Комментарии