Link to this sectionПример исследования VOC#
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
Добро пожаловать в блокнот Ultralytics Explorer API. Этот блокнот знакомит тебя с ресурсами, доступными для исследования наборов данных с помощью семантического поиска, векторного поиска и SQL-запросов.
Попробуй yolo explorer (работает на базе Explorer API)
Установи ultralytics и запусти yolo explorer в своем терминале, чтобы выполнять пользовательские запросы и семантический поиск в браузере.
Начиная с ultralytics>=8.3.12, Ultralytics Explorer был удален. Чтобы использовать Explorer, установи pip install ultralytics==8.3.11. Похожие (и расширенные) функции исследования наборов данных доступны в Ultralytics Platform.
Link to this sectionНастройка#
Установи ultralytics и необходимые зависимости, затем проверь программное и аппаратное обеспечение.
!uv pip install ultralytics[explorer] openai
yolo checksLink to this sectionПоиск по сходству#
Используй возможности векторного поиска по сходству, чтобы найти похожие точки данных в своем наборе данных вместе с их расстоянием в пространстве эмбеддингов. Просто создай таблицу эмбеддингов для выбранной пары набор данных-модель. Это нужно сделать только один раз, и она будет использоваться повторно автоматически.
exp = Explorer("VOC.yaml", model="yolo11n.pt")
exp.create_embeddings_table()Как только таблица эмбеддингов создана, ты можешь запускать семантический поиск любым из следующих способов:
- По заданному индексу/списку индексов в наборе данных, например,
exp.get_similar(idx=[1, 10], limit=10) - По любому изображению/списку изображений, не входящих в набор данных - exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10). В случае нескольких входных данных используется агрегат их эмбеддингов.
Ты получишь pandas DataFrame с заданным количеством наиболее похожих точек данных к входным, а также их расстоянием в пространстве эмбеддингов. Ты можешь использовать этот набор данных для дальнейшей фильтрации.

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()Ты также можешь построить график похожих образцов напрямую, используя утилиту plot_similar

exp.plot_similar(idx=6500, limit=20)
exp.plot_similar(idx=[100, 101], limit=10) # Can also pass list of idxs or imgs
exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10, labels=False) # Can also pass external images
Link to this sectionСпроси ИИ: поиск или фильтрация на естественном языке#
Ты можешь давать объекту Explorer подсказки о том, какие именно точки данных ты хочешь увидеть, и он постарается вернуть DataFrame с этими результатами. Поскольку он работает на базе LLM, он не всегда делает это правильно. В таком случае он вернет None.

df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)Чтобы построить график этих результатов, ты можешь использовать утилиту plot_query_result. Пример:
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)
# plot
from PIL import Image
from ultralytics.data.explorer import plot_query_result
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)Link to this sectionВыполняй SQL-запросы к своему набору данных#
Иногда тебе может потребоваться исследовать определенные записи в твоем наборе данных. Для этого Explorer позволяет выполнять SQL-запросы. Он принимает любой из следующих форматов:
- Запросы, начинающиеся с "WHERE", будут автоматически выбирать все столбцы. Это можно считать сокращенным запросом.
- Ты также можешь писать полные запросы, где можно указать, какие столбцы выбирать.
Это можно использовать для исследования производительности модели и конкретных точек данных. Например:
- Допустим, твоя модель испытывает трудности с изображениями, на которых есть люди и собаки. Ты можешь написать запрос, подобный этому, чтобы выбрать точки, где есть по крайней мере 2 человека И хотя бы одна собака.
Ты можешь комбинировать SQL-запрос и семантический поиск, чтобы отфильтровать результаты до определенного типа
table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)
table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
print(table)Так же, как и при поиске по сходству, у тебя есть утилита для прямого построения графиков SQL-запросов с использованием exp.plot_sql_query

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)Link to this sectionРабота с таблицей эмбеддингов (продвинутый уровень)#
Explorer внутренне работает с таблицами LanceDB. Ты можешь получить доступ к этой таблице напрямую, используя объект Explorer.table, и выполнять необработанные запросы, применять предварительную и последующую фильтрацию и т.д.
table = exp.table
print(table.schema)Link to this sectionВыполнение необработанных запросов¶#
Векторный поиск находит ближайшие векторы из базы данных. В рекомендательной системе или поисковой системе ты можешь найти продукты, похожие на тот, который ты искал. В LLM и других ИИ-приложениях каждая точка данных может быть представлена эмбеддингами, сгенерированными некоторыми моделями, он возвращает наиболее релевантные признаки.
Поиск в многомерном векторном пространстве заключается в поиске K-ближайших соседей (KNN) вектора запроса.
Метрика В LanceDB метрика — это способ описания расстояния между парой векторов. В настоящее время поддерживаются следующие метрики:
- L2
- Cosine
- Dot. Поиск по сходству в Explorer по умолчанию использует L2. Ты можешь выполнять запросы к таблицам напрямую или использовать формат lance для создания пользовательских утилит для управления наборами данных. Более подробную информацию о доступных операциях с таблицами LanceDB смотри в документации

dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()Link to this sectionВзаимопреобразование в популярные форматы данных#
df = table.to_pandas()
pa_table = table.to_arrow()Link to this sectionРабота с эмбеддингами#
Ты можешь получить доступ к необработанным эмбеддингам из таблицы lancedb и проанализировать их. Эмбеддинги изображений хранятся в столбце vector
import numpy as np
embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)Link to this sectionДиаграмма рассеяния#
Одним из предварительных шагов при анализе эмбеддингов является их построение в 2D-пространстве с помощью снижения размерности. Давай попробуем пример

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA # pip install scikit-learn
# 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's 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()Link to this sectionИндекс сходства#
Вот простой пример операции, основанной на таблице эмбеддингов. Explorer поставляется с операцией similarity_index-
- Она пытается оценить, насколько каждая точка данных похожа на остальные элементы набора данных.
- Она делает это путем подсчета того, сколько эмбеддингов изображений находится ближе, чем max_dist, к текущему изображению в сгенерированном пространстве эмбеддингов, рассматривая top_k похожих изображений за раз.
Для заданного набора данных, модели, max_dist и top_k созданный индекс сходства будет использоваться повторно. В случае, если твой набор данных изменился, или тебе просто нужно пересоздать индекс сходства, ты можешь передать force=True. Подобно векторному и SQL-поиску, это также поставляется с утилитой для его прямого построения.
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01)
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)
Давай сначала посмотрим на график
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)А теперь давай посмотрим на результат выполнения операции
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01, force=False)
sim_idxДавай создадим запрос, чтобы увидеть, какие точки данных имеют показатель сходства более 30, и построим график похожих на них изображений.
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]Ты должен увидеть что-то вроде этого

exp.plot_similar(idx=[7146, 14035]) # Using avg embeddings of 2 images