Пример исследования ЛОС¶
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
Добро пожаловать в блокнот Ultralytics Explorer API! Этот блокнот служит отправной точкой для изучения различных доступных ресурсов, которые помогут тебе начать использовать Ultralytics для изучения твоих наборов данных с помощью возможностей семантического поиска. Ты можешь использовать утилиты из коробки, которые позволят тебе исследовать конкретные типы меток с помощью векторного поиска или даже SQL-запросов.
Мы надеемся, что ресурсы в этом блокноте помогут тебе извлечь максимум пользы из Ultralytics. За подробностями обращайся к документам Explorer Docs, поднимай вопрос на GitHub для получения поддержки и присоединяйся к нашему сообществу Discord для вопросов и обсуждений!
Попробуй yolo explorer
На базе API Exlorer
Просто pip install ultralytics
и беги yolo explorer
в терминале, чтобы запускать пользовательские запросы и семантический поиск по наборам данных прямо в браузере!
Настройка¶
Установите Pip ultralytics
и зависимости И проверь программное и аппаратное обеспечение.
%pip install ultralytics[explorer] openai
import ultralytics
ultralytics.checks()
из ultralytics import Explorer
Поиск сходства¶
Используй мощь поиска векторного сходства, чтобы найти похожие точки данных в твоем наборе данных вместе с их расстоянием в пространстве вкраплений. Просто создай таблицу эмбеддингов для заданной пары датасет-модель. Она нужна только один раз и используется повторно автоматически.
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 с параметром limit
Количество точек данных, наиболее похожих на входные, а также их расстояние в пространстве встраивания. Ты можешь использовать этот набор данных для дальнейшей фильтрации
Похожие = exp.get_similar(idx=1, limit=10)
Похожие.голова()
Ты также можешь построить график похожих образцов напрямую, используя 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 any external images
2. Спроси ИИ: поиск или фильтрация с помощью естественного языка¶
Ты можешь указать объекту Explorer, какие точки данных ты хочешь увидеть, и он попытается вернуть кадр с этими данными. Поскольку он работает на LLM, это не всегда получается. В этом случае он вернет None.
df = exp.ask_ai("Покажите мне изображения, содержащие более 10 объектов, на которых изображены как минимум 2 человека")
df.head(5)
Для построения графика этих результатов ты можешь использовать plot_query_result
util
Пример:
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)
3. Выполни SQL-запросы к своему набору данных!¶
Иногда тебе может понадобиться исследовать определенный тип записей в твоем наборе данных. Для этого Explorer позволяет выполнять SQL-запросы. Он принимает любой из форматов:
- Запросы, начинающиеся с "WHERE", автоматически выбирают все столбцы. Это можно представить как короткий запрос
- Ты также можешь писать полные запросы, в которых ты можешь указать, какие столбцы нужно выбрать
Это можно использовать для изучения производительности модели и конкретных точек данных. Например:
- Допустим, твоя модель борется с изображениями, на которых есть люди и собаки. Ты можешь написать такой запрос, чтобы выбрать те точки, в которых есть хотя бы 2 человека и хотя бы одна собака.
Ты можешь комбинировать SQL-запрос и семантический поиск, чтобы отфильтровать результаты определенного типа
Таблица = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
Таблица
Как и в случае с поиском по сходству, ты также получаешь возможность напрямую строить sql-запросы, используя exp.plot_sql_query
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)
Таблица = exp.таблица
таблица.схема
Выполняй необработанные запросы¶
Векторный поиск находит ближайшие векторы из базы данных. В рекомендательных системах или поисковиках ты можешь найти похожие товары из тех, что ты искал. В LLM и других приложениях ИИ каждая точка данных может быть представлена вкраплениями, сгенерированными на основе некоторых моделей, это возвращает наиболее релевантные признаки.
Поиск в высокоразмерном векторном пространстве заключается в нахождении K-Nearest-Neighbors (KNN) вектора запроса.
Метрика В LanceDB метрика - это способ описания расстояния между парой векторов. В настоящее время поддерживаются следующие метрики:
- L2
- Косинус
- Точка Поиск по сходству в Explorer по умолчанию использует L2. Ты можешь выполнять запросы к таблицам напрямую или использовать формат lance для создания пользовательских утилит для управления наборами данных. Подробнее о доступных операциях с таблицами LanceDB в документации.
dummy_img_embedding = [i для i в диапазон(256)]
Таблица.поиск(dummy_img_embedding).limit(5).to_pandas()
Взаимопревращение в популярные форматы данных¶
df = таблица.to_pandas()
pa_table = таблица.to_arrow()
Работа с эмбеддингами¶
Ты можешь получить доступ к необработанным вкраплениям из таблицы lancedb и проанализировать их. Вкрапления изображений хранятся в колонке vector
Импортируй numpy as np
embeddings = таблица.to_pandas()["vector"].tolist()
embeddings = np.массив(embeddings)
Scatterplot¶
Одним из предварительных шагов в анализе вкраплений является их построение в двумерном пространстве с помощью снижения размерности. Давай попробуем на примере
!pip Установи scikit-изучи --q
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
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'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()
4. Индекс сходства¶
Вот простой пример операции, выполняемой с помощью таблицы встраивания. Explorer поставляется с similarity_index
операция -
- Он пытается оценить, насколько каждая точка данных похожа на остальные.
- Для этого он подсчитывает, сколько вкраплений изображения лежат ближе, чем
max_dist
к текущему изображению в сгенерированном пространстве встраивания, учитываяtop_k
похожие изображения за один раз.
Для заданного набора данных модель, max_dist
& top_k
сгенерированный однажды индекс сходства будет использоваться повторно. В случае если твой набор данных изменился или тебе просто нужно заново сгенерировать индекс сходства, ты можешь передать force=True
.
Как и в случае с векторным и SQL-поиском, здесь тоже есть утилита для прямого построения графика. Давай сначала посмотрим на график
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)
Теперь давай посмотрим на результат операции
Импортируй numpy as np
sim_idx = exp.индекс_сходства(max_dist=0.2, top_k=0.01, сила=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