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

Пример исследования летучих органических соединений

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

Попробуйте yolo explorer на базе API Explorer

Просто pip install ultralytics и запустить yolo explorer в терминале для выполнения пользовательских запросов и семантического поиска по наборам данных прямо в браузере!

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

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

Настройка

Установите Pip ultralytics и зависимости проверьте программное и аппаратное обеспечение.

%pip install ultralytics[explorer] openai
yolo checks

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

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 с предельным числом наиболее похожих точек данных на входные данные, а также расстояние между ними в пространстве встраивания. Вы можете использовать этот набор данных для дальнейшей фильтрации

Таблица поиска сходства

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()

Вы также можете построить график схожих образцов напрямую, используя plot_similar использовать

Поиск сходства изображение 1

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

Поиск сходства изображения 2

Ask AI: поиск или фильтрация с помощью естественного языка

Вы можете указать объекту Explorer, какие точки данных вы хотите увидеть, и он попытается вернуть кадр данных с ними. Поскольку он работает на основе LLM, это не всегда получается. В этом случае он вернет None.

Стол Ask ai

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)

Ask ai image 1

# 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)

Выполните 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)

Таблица SQL-запросов

table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
print(table)

Как и в случае с поиском по сходству, вы также можете напрямую построить график sql-запросов, используя exp.plot_sql_query

SQL-запросы изображение 1

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)

Работа с вкраплениями Таблица (расширенный вариант)

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

table = exp.table
print(table.schema)

Выполнение необработанных запросов¶

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

Поиск в высокоразмерном векторном пространстве заключается в нахождении K-Nearest-Neighbors (KNN) вектора запроса.

Метрика В LanceDB метрика - это способ описания расстояния между парой векторов. В настоящее время поддерживаются следующие метрики:

  • L2
  • Косинус
  • По умолчанию поиск сходства в Dot Explorer использует L2. Вы можете выполнять запросы непосредственно к таблицам или использовать формат lance для создания пользовательских утилит для управления наборами данных. Более подробная информация о доступных операциях с таблицами LanceDB приведена в документации

Raw-queries-table

dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()
df = table.to_pandas()
pa_table = table.to_arrow()

Работа с вкраплениями

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

import numpy as np

embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)

Скаттерплот

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

Пример диаграммы рассеяния

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()

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

Вот простой пример операции, выполняемой с помощью таблицы вкраплений. 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
📅 Создано 21 день назад ✏️ Обновлено 7 дней назад

Комментарии