Пример исследования ЛОС¶
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | हिन्दी | العربية
Добро пожаловать в блокнот Ultralytics Explorer API! Этот блокнот служит отправной точкой для изучения различных доступных ресурсов, которые помогут тебе начать использовать Ultralytics для изучения твоих наборов данных с помощью возможностей семантического поиска. Ты можешь использовать утилиты из коробки, которые позволят тебе исследовать конкретные типы меток с помощью векторного поиска или даже SQL-запросов.
Мы надеемся, что ресурсы в этом блокноте помогут тебе извлечь максимум пользы из Ultralytics. За подробностями обращайся к документам Explorer Docs, поднимай вопрос на GitHub для получения поддержки и присоединяйся к нашему сообществу Discord для вопросов и обсуждений!
Попробуй yolo explorer
На базе API Exlorer
Просто pip install ultralytics
и беги yolo explorer
в терминале, чтобы запускать пользовательские запросы и семантический поиск по наборам данных прямо в браузере!
Настройка¶
Установите Pip ultralytics
и зависимости И проверь программное и аппаратное обеспечение.
%pip Установи ultralytics[explorer] openai
импортируй ultralytics
ultralytics.проверки()
из ultralytics import Explorer
Поиск сходства¶
Используй мощь поиска векторного сходства, чтобы найти похожие точки данных в твоем наборе данных вместе с их расстоянием в пространстве вкраплений. Просто создай таблицу эмбеддингов для заданной пары датасет-модель. Она нужна только один раз и используется повторно автоматически.
exp = Explorer("VOC.yaml", model="yolov8n.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) # Можно также передать список idx или imgs
exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10, метки=False) # Можно также передавать любые внешние изображения.
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)
# сюжет
из ultralytics.data.explorer импортируй plot_query_result
из PIL import Изображение
plt = plot_query_result(exp.ask_ai("Покажите мне 10 изображений, содержащих ровно 2 человека"))
Изображение.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
Импортируй numpy как np
из sklearn.decomposition импортируй PCA
Импортируй matplotlib.pyplot как plt
from mpl_toolkits.mplot3d import Axes3D
# Уменьши размерность с помощью PCA до 3 компонентов для визуализации в 3D
pca = PCA(n_components=3)
reduced_data = pca.fit_transform(embeddings)
# Создай трехмерную диаграмму рассеяния с помощью Axes3D от Matplotlib
fig = plt.figure(figsize=(8, 6))
ax = рис..add_subplot(111, проекция='3d')
# График рассеивания
ax.scatter(reduced_data[:, 0], reduced_data[:, 1], уменьшенные данные[:, 2], альфа=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.показать()
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, и построим похожие на них изображения.
Импортируй numpy as np
sim_count = np.массив(sim_idx["count"])
sim_idx['im_file'][sim_count > 30]
Ты должен увидеть что-то вроде этого
exp.plot_similar(idx=[7146, 14035]) # Использование средних вкраплений двух изображений