Ultralytics YOLO27:

API Ultralytics Explorer#

Примечание сообщества ⚠️

Начиная с версии ultralytics>=8.3.12, Ultralytics Explorer удалён. Чтобы использовать Explorer, установи pip install ultralytics==8.3.11. Аналогичные (и расширенные) возможности исследования наборов данных доступны на платформе Ultralytics.

Введение#

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



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

Установка#

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

pip install "ultralytics[explorer]==8.3.11"

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

from ultralytics import Explorer

# Создать объект Explorer
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")

# Создать эмбеддинги для набора данных
explorer.create_embeddings_table()

# Найти изображения, похожие на заданное изображение или изображения
df = explorer.get_similar(img="path/to/image.jpg")

# Или найти изображения, похожие на заданный индекс или индексы
df = explorer.get_similar(idx=0)
Примечание

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

Чтобы принудительно обновить таблицу эмбеддингов, передай force=True в метод create_embeddings_table.

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

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

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

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

Ты получишь pandas DataFrame с limit наиболее похожими на входные данные объектами и расстоянием до них в пространстве эмбеддингов. Затем этот набор данных можно дополнительно фильтровать.

Семантический поиск
from ultralytics import Explorer

# создать объект Explorer
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())

# Искать по нескольким изображениям
similar = exp.get_similar(
    img=["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/bus.jpg"],
    limit=10,
)
print(similar.head())

Построение графика похожих изображений#

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

Построение графика похожих изображений
from ultralytics import Explorer

# создать объект Explorer
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()

2. Ask AI (запросы на естественном языке)#

Эта функция позволяет фильтровать набор данных с помощью запросов на естественном языке, не прибегая к SQL. Генератор запросов на базе ИИ преобразует запрос в команду и возвращает подходящие результаты. Например, можно попросить: «покажи 100 изображений, на которых ровно один человек и 2 собаки. Другие объекты тоже могут присутствовать», — и система сформирует запрос и покажет результаты. Примечание: эта функция использует большие языковые модели, поэтому результаты вероятностные и могут быть неточными.

Ask AI
from ultralytics.data.explorer import plot_query_result

from ultralytics import Explorer

# создать объект Explorer
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())

# построить график результатов
plt = plot_query_result(df)
plt.show()

3. Выполнение SQL-запросов#

Ты можешь выполнять SQL-запросы к набору данных с помощью метода sql_query. Метод принимает SQL-запрос и возвращает pandas DataFrame с результатами.

SQL-запрос
from ultralytics import Explorer

# создать объект Explorer
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

# создать объект Explorer
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

# построить график SQL-запроса
exp.plot_sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%' LIMIT 10")

4. Работа с таблицей эмбеддингов#

Ты также можешь работать с таблицей эмбеддингов напрямую. После создания таблицы к ней можно обратиться с помощью Explorer.table.

Совет

Внутри Explorer работает с таблицами 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

# Тестовый эмбеддинг
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=...)

5. Применение эмбеддингов#

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

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

В Explorer есть операция similarity_index:

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

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

  • 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

# Сократить размерность до 3 компонент с помощью PCA для визуализации в 3D
pca = PCA(n_components=3)
reduced_data = pca.fit_transform(embeddings)

# Создать 3D-диаграмму рассеяния с помощью Matplotlib Axes3D
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d")

# Диаграмма рассеяния
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()

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

Приложения на базе Ultralytics Explorer#

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

Часто задаваемые вопросы#

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

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

    pip install "ultralytics[explorer]==8.3.11"

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

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

    from ultralytics import Explorer
    
    # Создать объект Explorer
    explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
    explorer.create_embeddings_table()
    
    # Найти изображения, похожие на заданное изображение
    similar_images_df = explorer.get_similar(img="path/to/image.jpg")
    print(similar_images_df.head())

    Подробнее см. в разделе «Поиск по сходству».

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

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

    from ultralytics import Explorer
    
    # Создать объект Explorer
    explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
    explorer.create_embeddings_table()
    
    # Запрос на естественном языке
    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.

Комментарии