Перейти к содержимому

Ultralytics API проводника

Введение

Open In Colab API Explorer - это Python API для исследования твоих наборов данных. Он поддерживает фильтрацию и поиск по твоему набору данных с помощью SQL-запросов, поиск по векторному сходству и семантический поиск.



Смотри: Ultralytics Обзор API Explorer

Установка

Explorer зависит от внешних библиотек для некоторых своих функций. Они автоматически устанавливаются при использовании. Чтобы вручную установить эти зависимости, воспользуйся следующей командой:

pip install ultralytics[explorer]

Использование

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data='coco128.yaml', model='yolov8n.pt')

# Create embeddings for your dataset
explorer.create_embeddings_table()

# Search for similar images to a given image/images
dataframe = explorer.get_similar(img='path/to/image.jpg')

# Or search for similar images to a given index/indices
dataframe = explorer.get_similar(idx=0)

Примечание

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

Если ты хочешь принудительно обновить таблицу вкраплений, ты можешь передать force=True на create_embeddings_table Метод. Ты можешь получить прямой доступ к объекту таблицы LanceDB, чтобы провести расширенный анализ. Подробнее об этом ты узнаешь в Работа с секцией таблицы

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

  • На заданном индексе или списке индексов в наборе данных: exp.get_similar(idx=[1,10], limit=10)
  • На любом изображении или списке изображений, которых нет в наборе данных: exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)

Если входов несколько, то используется совокупность их вкраплений.

Ты получишь фрейм данных pandas с параметром limit Количество точек данных, наиболее похожих на входные, а также их расстояние в пространстве встраивания. Ты можешь использовать этот набор данных для дальнейшей фильтрации

Семантический поиск

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.pt')
exp.create_embeddings_table()

similar = exp.get_similar(img='https://ultralytics.com/images/bus.jpg', limit=10)
print(similar.head())

# Search using multiple indices
similar = exp.get_similar(
                        img=['https://ultralytics.com/images/bus.jpg',
                             'https://ultralytics.com/images/bus.jpg'],
                        limit=10
                        )
print(similar.head())
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.pt')
exp.create_embeddings_table()

similar = exp.get_similar(idx=1, limit=10)
print(similar.head())

# Search using multiple indices
similar = exp.get_similar(idx=[1,10], limit=10)
print(similar.head())

Нанесение похожих изображений

Ты также можешь построить график похожих изображений, используя plot_similar метод. Этот метод принимает те же аргументы, что и get_similar и выстраивает похожие изображения в сетку.

Нанесение похожих изображений

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.pt')
exp.create_embeddings_table()

plt = exp.plot_similar(img='https://ultralytics.com/images/bus.jpg', limit=10)
plt.show()
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.pt')
exp.create_embeddings_table()

plt = exp.plot_similar(idx=1, limit=10)
plt.show()

2. Спроси ИИ (запрос на естественном языке)

Это позволяет тебе написать, как ты хочешь отфильтровать свой набор данных, используя естественный язык. Тебе не нужно разбираться в написании SQL-запросов. Наш генератор запросов на основе искусственного интеллекта автоматически сделает это под капотом. Например, ты можешь сказать: "Покажите мне 100 изображений, на которых есть ровно один человек и 2 собаки. Там могут быть и другие объекты", и он сам сгенерирует запрос и покажет тебе результаты. Примечание: В этой работе используется LLM под капотом, поэтому результаты будут вероятностными и иногда могут ошибаться.

Спроси искусственный интеллект

from ultralytics import Explorer
from ultralytics.data.explorer import plot_query_result


# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.pt')
exp.create_embeddings_table()

df = exp.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(df.head())

# plot the results
plt = plot_query_result(df)
plt.show()

3. Запросы на SQL

Ты можешь выполнять SQL-запросы к своему набору данных, используя sql_query Метод. Этот метод принимает на вход SQL-запрос и возвращает pandas dataframe с результатами.

SQL-запрос

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.pt')
exp.create_embeddings_table()

df = exp.sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%'")
print(df.head())

Построение графиков результатов SQL-запросов

Ты также можешь построить график результатов SQL-запроса, используя plot_sql_query метод. Этот метод принимает те же аргументы, что и sql_query и выстраивает результаты в виде сетки.

Построение графиков результатов SQL-запросов

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.pt')
exp.create_embeddings_table()

# plot the SQL Query
exp.plot_sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%' LIMIT 10")

4. Продвинутый вариант - работа с таблицей вкраплений

Ты также можешь работать с таблицей вкраплений напрямую. Как только таблица вкраплений будет создана, ты сможешь получить к ней доступ с помощью команды Explorer.table

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

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

Вот несколько примеров того, что ты можешь сделать с помощью стола:

Получи необработанные вкрапления

Пример

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

embeddings = table.to_pandas()["vector"]
print(embeddings)

Продвинутые запросы с предварительными и последующими фильтрами

Пример

from ultralytics import Explorer

exp = Explorer(model="yolov8n.pt")
exp.create_embeddings_table()
table = exp.table

# Dummy embedding
embedding = [i for i in range(256)]
rs = table.search(embedding).metric("cosine").where("").limit(10)

Создай векторный индекс

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

table.create_index(num_partitions=..., num_sub_vectors=...)

Подробнее о доступных векторных индексах типов и параметрах можно узнать здесь В будущем мы добавим поддержку создания векторных индексов прямо из API Explorer.

5. Применение вкраплений

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

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

Explorer поставляется с similarity_index операция:

  • Он пытается оценить, насколько каждая точка данных похожа на остальные.
  • Для этого нужно подсчитать, сколько вкраплений изображения лежат ближе, чем max_dist к текущему изображению в сгенерированном пространстве встраивания, учитывая top_k похожие изображения за один раз.

Она возвращает фрейм данных pandas со следующими колонками:

  • idx: Индекс изображения в наборе данных
  • im_file: Путь к файлу с изображением
  • count: Количество изображений в наборе данных, которые находятся ближе, чем max_dist к текущему изображению
  • sim_im_files: Список путей к count Похожие изображения

Наконечник

Для заданного набора данных модель, max_dist & top_k сгенерированный однажды индекс сходства будет использоваться повторно. В случае если твой набор данных изменился или тебе просто нужно заново сгенерировать индекс сходства, ты можешь передать force=True.

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

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()

sim_idx = exp.similarity_index()

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

import numpy as np

sim_count = np.array(sim_idx["count"])
sim_idx['im_file'][sim_count > 30]

Визуализация пространства встраивания

Ты также можешь визуализировать пространство встраивания с помощью выбранного тобой инструмента для построения графиков. Например, вот простой пример с использованием matplotlib:

import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

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

Начни создавать свои собственные отчеты об исследовании наборов данных CV, используя API Explorer. Для вдохновения посмотри

Приложения, созданные с помощью Ultralytics Explorer

Попробуй нашу демонстрацию графического интерфейса на основе API Explorer

Скоро будет

  • [ ] Объедини определенные метки из наборов данных. Пример - Импортировать все person Этикетки от COCO и car Наклейки с городскими пейзажами
  • [ ] Удали изображения, индекс сходства которых выше заданного порога.
  • [ ] Автоматическое сохранение новых наборов данных после слияния/удаления записей
  • [ ] Расширенные визуализации данных


Создано 2024-01-07, Обновлено 2024-02-11
Авторы: 0xSynapse (1), glenn-jocher (6), chr043416@gmail.com (2), AyushExel (2)

Комментарии