跳至内容

Ultralytics 资源管理器应用程序接口

Community Note ⚠️

As of ultralytics>=8.3.10, Ultralytics explorer support has been deprecated. But don't worry! You can now access similar and even enhanced functionality through Ultralytics 枢纽, our intuitive no-code platform designed to streamline your workflow. With Ultralytics HUB, you can continue exploring, visualizing, and managing your data effortlessly, all without writing a single line of code. Make sure to check it out and take advantage of its powerful features!🚀

导言

在 Colab 中打开 Explorer API 是Python API,用于探索数据集。它支持使用 SQL 查询、矢量相似性搜索和语义搜索过滤和搜索数据集。



观看: Ultralytics 资源管理器应用程序接口概述

安装

资源管理器的部分功能依赖于外部库。这些库会在使用时自动安装。要手动安装这些依赖库,请使用以下命令:

pip install ultralytics[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)

备注

Embeddings table for a given dataset and model pair is only created once and reused. These use LanceDB under the hood, which scales on-disk, so you can create and reuse embeddings for large datasets like COCO without running out of memory.

如果要强制更新嵌入式数据表,可以通过 force=Truecreate_embeddings_table 方法。

您可以直接访问 LanceDB 表对象来执行高级分析。有关更多信息,请参阅 "使用嵌入式表 "部分

相似性搜索是一种查找与给定图像相似的图像的技术。它基于相似图像会有相似嵌入的理念。一旦建立了嵌入表,就可以通过以下任何一种方式运行语义搜索:

  • 数据集中的给定索引或索引列表: exp.get_similar(idx=[1,10], limit=10)
  • 不在数据集中的任何图像或图像列表: exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)

如果有多个输入,则使用其嵌入的总和。

你会得到一个带有 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 并将相似图像绘制成网格。

绘制相似图像

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.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="yolo11n.pt")
exp.create_embeddings_table()

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

2.Ask AI(自然语言查询)

这样,您就可以使用自然语言编写过滤数据集的方法。您不必精通编写 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_query 方法。该方法将 SQL 查询作为输入,并返回一个包含结果的 pandas 数据帧。

SQL 查询

from ultralytics import Explorer

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

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

绘制 SQL 查询结果

您还可以使用 plot_sql_query 方法。该方法的参数与 sql_query 并将结果绘制成网格图。

绘制 SQL 查询结果

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.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

提示

资源管理器可在 兰斯数据库 表。您可以使用 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="yolo11n.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 方法。

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

有关可用的矢量索引类型和参数的更多详情,请点击此处今后,我们将添加直接从资源管理器 API 创建矢量索引的支持。

5.嵌入式应用

您可以使用嵌入表进行各种探索性分析。下面是一些示例:

相似指数

资源管理器带有 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 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()

开始使用 Explorer API 创建自己的简历数据集探索报告。请查看

使用Ultralytics Explorer 构建应用程序

试用我们基于资源管理器应用程序接口的图形用户界面演示

即将推出

  • [ ] 从数据集中合并特定标签。示例 - 全部导入 person COCO 和 car 来自城市景观的标签
  • [ ] 删除相似度指数高于给定阈值的图像
  • [ ] 在合并/删除条目后自动保存新数据集
  • [ ] 高级数据集可视化

常见问题

Ultralytics Explorer API 有什么用途?

The Ultralytics Explorer API is designed for comprehensive dataset exploration. It allows users to filter and search datasets using SQL queries, vector similarity search, and semantic search. This powerful Python API can handle large datasets, making it ideal for various computer vision tasks using Ultralytics models.

如何安装Ultralytics Explorer API?

要安装Ultralytics Explorer API 及其依赖程序,请使用以下命令:

pip install ultralytics[explorer]

This will automatically install all necessary external libraries for the Explorer API functionality. For additional setup details, refer to the installation section of our documentation.

您可以使用Ultralytics Explorer API 创建嵌入表并查询相似图像,从而执行相似性搜索。下面是一个基本示例:

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

For more details, please visit the Similarity Search section.

在Ultralytics Explorer 中使用 LanceDB 有什么好处?

Ultralytics Explorer 底部使用的 LanceDB 提供可扩展的磁盘嵌入表。这可确保您为 COCO 等大型数据集创建和重复使用嵌入表,而不会耗尽内存。这些表只创建一次,可以重复使用,从而提高了数据处理效率。

Ultralytics Explorer API 中的 Ask AI 功能是如何工作的?

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

有关更多示例,请查看 "询问人工智能 "部分

📅 Created 10 months ago ✏️ Updated 1 month ago

评论