跳至内容

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

导言

在 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='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=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='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.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='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_query 方法。该方法将 SQL 查询作为输入,并返回一个包含结果的 pandas 数据帧。

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 查询结果

您还可以使用 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

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

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

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

使用Ultralytics Explorer 构建应用程序

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

即将推出

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


创建于 2024-01-07,更新于 2024-04-27
作者:glenn-jocher(8)、0xSynapse(1)、RizwanMunawar(2)、AyushExel(2)

评论