Ultralytics API проводника
Заметки сообщества ⚠️
По состоянию на ultralytics>=8.3.10
, поддержка Ultralytics explorer была упразднена. Но не волнуйтесь! Теперь вы можете получить доступ к аналогичной и даже расширенной функциональности через Ultralytics HUBнаша интуитивно понятная платформа без кода, разработанная для оптимизации вашего рабочего процесса. С помощью Ultralytics HUB вы можете продолжать изучать, визуализировать и управлять своими данными без усилий, не написав ни строчки кода. Обязательно ознакомьтесь с ним и воспользуйтесь его мощными возможностями! 🚀
Введение
API Explorer - это Python API для изучения ваших наборов данных. Он поддерживает фильтрацию и поиск по набору данных с помощью SQL-запросов, поиск по векторному сходству и семантический поиск.
Смотреть: Ultralytics Обзор API Explorer
Установка
Некоторые функции Explorer зависят от внешних библиотек. Они автоматически устанавливаются при использовании. Чтобы установить эти зависимости вручную, выполните следующую команду:
Использование
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.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 для выполнения расширенного анализа. Подробнее об этом в разделе Работа с таблицей Embeddings
1. Поиск по сходству
Поиск по сходству - это метод поиска изображений, похожих на заданное. Она основана на идее, что похожие изображения будут иметь похожие вкрапления. После того как таблица вкраплений построена, вы можете запустить семантический поиск любым из следующих способов:
- По заданному индексу или списку индексов в наборе данных:
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="yolo11n.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="yolo11n.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
и выстраивает похожие изображения в сетку.
Построение похожих изображений
2. Спросите ИИ (запрос на естественном языке)
Это позволит вам написать, как вы хотите отфильтровать набор данных, используя естественный язык. Вам не нужно разбираться в написании SQL-запросов. Наш генератор запросов на основе искусственного интеллекта автоматически сделает это под капотом. Например, вы можете сказать: "Покажите мне 100 изображений с одним человеком и двумя собаками. Могут быть и другие объекты", и он сам сгенерирует запрос и покажет вам результаты. Примечание: Это работает с использованием LLM под капотом, поэтому результаты являются вероятностными и могут иногда ошибаться.
Спросите ИИ
from ultralytics import Explorer
from ultralytics.data.explorer import plot_query_result
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.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 с результатами.
SQL-запрос
Построение графиков результатов SQL-запросов
Вы также можете построить график результатов SQL-запроса, используя plot_sql_query
метод. Этот метод принимает те же аргументы, что и sql_query
и отображает результаты в виде сетки.
Построение графиков результатов SQL-запросов
4. Работа с таблицей вкраплений
Вы также можете работать с таблицей вкраплений напрямую. Как только таблица вкраплений создана, вы можете получить к ней доступ с помощью функции Explorer.table
Наконечник
Проводник работает на LanceDB таблицы. Вы можете получить доступ к этой таблице напрямую, используя Explorer.table
объект и выполнять необработанные запросы, накладывать пред- и постфильтры и т.д.
Вот несколько примеров того, что можно сделать с помощью таблицы:
Получение необработанных вкраплений
Пример
Расширенные запросы с предварительными и последующими фильтрами
Пример
Создание векторного указателя
При использовании больших наборов данных можно также создать специальный векторный индекс для ускорения запросов. Для этого используется create_index
метод на таблице LanceDB.
Подробнее о доступных типах векторных индексов и параметрах можно узнать здесь В будущем мы добавим поддержку создания векторных индексов непосредственно из 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
.
Индекс сходства
Вы можете использовать индекс сходства для создания пользовательских условий фильтрации набора данных. Например, вы можете отфильтровать изображения, которые не похожи ни на одно другое изображение в наборе данных, используя следующий код:
Визуализация пространства встраивания
Вы также можете визуализировать пространство встраивания с помощью выбранного вами инструмента построения графиков. Например, здесь приведен простой пример с использованием matplotlib:
import matplotlib.pyplot as plt
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 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
этикетки с городских пейзажей - [ ] Удалите изображения, индекс сходства которых выше заданного порога
- [ ] Автоматическое сохранение новых наборов данных после слияния/удаления записей
- [ ] Расширенные визуализации наборов данных
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Для чего используется API Ultralytics Explorer?
API Ultralytics Explorer предназначен для всестороннего изучения наборов данных. Он позволяет пользователям фильтровать и искать данные в наборах с помощью SQL-запросов, поиска по векторному сходству и семантического поиска. Этот мощный Python API может работать с большими наборами данных, что делает его идеальным для различных задач компьютерного зрения, использующих Ultralytics модели.
Как установить Ultralytics Explorer API?
Чтобы установить Ultralytics Explorer API вместе с его зависимостями, выполните следующую команду:
Это автоматически установит все необходимые внешние библиотеки для функциональности API Explorer. Дополнительные сведения о настройке см. в разделе "Установка" нашей документации.
Как я могу использовать API Ultralytics Explorer для поиска сходств?
Вы можете использовать API Ultralytics Explorer для поиска сходства, создав таблицу вкраплений и запросив ее для поиска похожих изображений. Вот базовый пример:
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
explorer.create_embeddings_table()
# Search for similar images to a given image
similar_images_df = explorer.get_similar(img="path/to/image.jpg")
print(similar_images_df.head())
Более подробную информацию можно найти в разделе "Поиск сходства".
Каковы преимущества использования LanceDB с Ultralytics Explorer?
LanceDB, используемая под капотом Ultralytics Explorer, предоставляет масштабируемые таблицы вкраплений на диске. Это позволяет создавать и повторно использовать вкрапления для больших наборов данных, таких как COCO, не исчерпывая памяти. Эти таблицы создаются только один раз и могут быть использованы повторно, что повышает эффективность работы с данными.
Как работает функция Ask AI в Ultralytics Explorer API?
Функция Ask AI позволяет пользователям фильтровать наборы данных с помощью запросов на естественном языке. Эта функция использует LLM для преобразования этих запросов в SQL-запросы за кулисами. Вот пример:
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
explorer.create_embeddings_table()
# Query with natural language
query_result = explorer.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(query_result.head())
Другие примеры можно найти в разделе Ask AI.