Пример исследования летучих органических соединений
Добро пожаловать в блокнот 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
и зависимости проверьте программное и аппаратное обеспечение.
Поиск сходства
Используйте возможности поиска векторного сходства, чтобы найти похожие точки данных в вашем наборе данных и расстояние между ними в пространстве вкраплений. Просто создайте таблицу вкраплений для заданной пары датасет-модель. Она нужна только один раз и используется повторно автоматически.
После того как таблица вкраплений создана, вы можете запустить семантический поиск любым из следующих способов:
- По заданному индексу / списку индексов в наборе данных, например - exp.get_similar(idx=[1,10], limit=10)
- На любом изображении/списке изображений, не входящих в набор данных - exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10) В случае нескольких входов используется совокупность их вкраплений.
Вы получите кадр данных pandas с предельным числом наиболее похожих точек данных на входные данные, а также расстояние между ними в пространстве встраивания. Вы можете использовать этот набор данных для дальнейшей фильтрации
Вы также можете построить график схожих образцов напрямую, используя 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
Ask AI: поиск или фильтрация с помощью естественного языка
Вы можете указать объекту Explorer, какие точки данных вы хотите увидеть, и он попытается вернуть кадр данных с ними. Поскольку он работает на основе 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)
Выполните 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)
Работа с вкраплениями Таблица (расширенный вариант)
Проводник работает на LanceDB таблицы. Вы можете получить доступ к этой таблице напрямую, используя Explorer.table
объект и выполнять необработанные запросы, накладывать пред- и постфильтры и т.д.
Выполнение необработанных запросов¶
Векторный поиск находит ближайшие векторы из базы данных. В рекомендательной системе или поисковой системе можно найти похожие товары из той, что вы искали. В LLM и других приложениях искусственного интеллекта каждая точка данных может быть представлена вкраплениями, сгенерированными некоторыми моделями, которые возвращают наиболее релевантные признаки.
Поиск в высокоразмерном векторном пространстве заключается в нахождении K-Nearest-Neighbors (KNN) вектора запроса.
Метрика В LanceDB метрика - это способ описания расстояния между парой векторов. В настоящее время поддерживаются следующие метрики:
- L2
- Косинус
- По умолчанию поиск сходства в Dot Explorer использует L2. Вы можете выполнять запросы непосредственно к таблицам или использовать формат lance для создания пользовательских утилит для управления наборами данных. Более подробная информация о доступных операциях с таблицами LanceDB приведена в документации
dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()
Преобразование в популярные форматы данных
Работа с вкраплениями
Вы можете получить доступ к необработанным вкраплениям из таблицы 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)
сначала на участке
Теперь давайте посмотрим на результат операции
Давайте создадим запрос, чтобы узнать, какие точки данных имеют количество сходств более 30, и построим график изображений, похожих на них.
Вы должны увидеть что-то вроде этого