VOC 勘探实例¶
中文 한국어| 日本語| Русский| Deutsch| Français| Español| Português| हिन्दी| العربية
欢迎访问Ultralytics Explorer API 笔记本! 本笔记本是探索各种可用资源的起点,可帮助您开始使用Ultralytics 利用语义搜索功能探索数据集。您可以使用开箱即用的实用程序,利用矢量搜索甚至 SQL 查询来检查特定类型的标签。
我们希望本手册中的资源能帮助您充分利用Ultralytics 。请浏览资源管理器文档了解详情,在GitHub上提出问题以获得支持,并加入我们的Discord社区以提出问题和进行讨论!
尝试 yolo explorer
由 Exlorer API 提供
简单 pip install ultralytics
并运行 yolo explorer
在终端中运行自定义查询,并在浏览器中直接对数据集进行语义搜索!
%pip 安装 ultralytics[资源管理器] openai
导入 ultralytics
ultralytics.检查()
从 ultralytics 导入 资源管理器
相似性搜索¶
利用向量相似性搜索的强大功能,查找数据集中的相似数据点以及它们在嵌入空间中的距离。只需为给定的数据集-模型对创建一个嵌入表。它只需要一次,而且会自动重复使用。
exp = 探索者("VOC.yaml", 模型="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)
如果有多个输入,则使用其嵌入的集合。
你会得到一个带有 limit
与输入数据最相似的数据点数量,以及它们在嵌入空间中的距离。您可以使用该数据集进行进一步筛选
类似 = exp.get_similar(idx=1, 极限=10)
类似.头()
您还可以直接使用 plot_similar
利用
exp.plot_similar(idx=6500, 限制=20)
#exp.plot_similar(idx=[100,101], limit=10) # 也可传递 idx 或 img 列表
exp.plot_similar(图像="https://ultralytics.com/images/bus.jpg" 。, 限制=10, 标签=假) # 也可以传递任何外部图像
2.Ask AI:使用自然语言进行搜索或筛选* 3.
您可以向资源管理器对象提示想要查看的数据点类型,它就会尝试返回包含这些数据点的数据帧。由于它是由 LLM 驱动的,因此并不总是正确的。在这种情况下,它会返回 "无"。
df = exp.ask_ai("向我展示包含 10 个以上物体且至少有 2 个人的图像" ))
df.头(5)
您可以使用 plot_query_result
利用
例子
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 导入 图像
plt = plot_query_result(exp.ask_ai("给我看 10 张正好包含 2 个人的图片" )))
图像.从数组(plt)
3.在数据集上运行 SQL 查询
有时,您可能想调查数据集中的某类条目。为此,资源管理器允许您执行 SQL 查询。 它接受以下任一种格式:
- 以 "WHERE "开头的查询会自动选择所有列。这可以看作是一个简便查询
- 您还可以编写完整的查询,指定要选择的列
这可用于研究模型性能和特定数据点。例如
- 假设您的模型在有人类和狗的图像上挣扎。您可以编写这样的查询,选择至少有两个人和至少有一只狗的点。
您可以结合 SQL 查询和语义搜索,筛选出特定类型的结果
表 = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE ' %d%dog%' LIMIT 10")
表
与相似性搜索一样,您也可以使用 exp.plot_sql_query
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE ' %d%dog%' LIMIT 10" 。, 标签=真)
表 = exp.表格
表.模式
虚拟图片嵌入 = [i 为 i 在 范围(256)]
表.搜索(dummy_img_embedding).限制(5).到_pandas()
与流行数据格式的相互转换*
df = 表格.to_pandas()
pa_table = 表.to_arrow()
嵌入式工作¶
您可以从 lancedb 表中访问原始嵌入并对其进行分析。图像嵌入存储在列 vector
导入 numpy 作为 np
嵌入 = 表.to_pandas()["向量"].tolist()
嵌入 = np.数组(数组)
散点图
分析嵌入的初步步骤之一是通过降维在二维空间中绘制嵌入图。让我们举例说明
!pip 安装 scikit-学习 --q
%matplotlib 内联
导入 numpy 作为 np
从 sklearn.decomposition 导入 PCA
导入 matplotlib.pyplot 作为 plt
从 mpl_toolkits.mplot3d 导入 Axes3D
# 使用 PCA 将维度缩减为 3 个分量,以便在 3D 中实现可视化
pca = PCA(n_components=3)
缩减数据 = pca.拟合变换(内嵌)
# 使用 Matplotlib 的 Axes3D 创建三维散点图
图 = plt.figure(figsize=(8, 6))
轴 = 軸 =.add_subplot(111, 投影='3d')
# 散点图
ax.散点图(reduced_data[:, 0], 缩减数据[:, 1], 缩减数据[:, 2], 阿尔法=0.5)
轴.设置标题(还原 256 维数据的三维散点图(PCA))
轴.set_xlabel(组件 1)
轴.设置标签(组件 2)
轴.set_zlabel(组件 3)
plt.显示()
4.相似指数
下面是一个利用嵌入表进行操作的简单示例。资源管理器带有一个 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 作为 np
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01, 力=假)
sim_idx
让我们创建一个查询,看看哪些数据点的相似度超过 30,并绘制与之相似的图像。
导入 numpy 作为 np
sim_count = np.数组(sim_idx["计数"])
sim_idx[im_file][sim_count > 30]
你应该看到这样的内容
exp.plot_similar(idx=[7146, 14035]) # 使用 2 幅图像的平均嵌入值