挥发性有机化合物探索实例
欢迎访问Ultralytics Explorer API 笔记本!本笔记本是探索各种可用资源的起点,可帮助您开始使用Ultralytics 利用语义搜索功能探索数据集。您可以使用开箱即用的实用程序,利用矢量搜索甚至 SQL 查询来检查特定类型的标签。
尝试 yolo explorer
由资源管理器应用程序接口提供
简单 pip install ultralytics
并运行 yolo explorer
在终端中运行自定义查询,并在浏览器中直接对数据集进行语义搜索!
社区说明 ⚠️
截至 ultralytics>=8.3.10
,Ultralytics Explorer 支持已被弃用。不过不用担心!现在您可以通过 Ultralytics 枢纽HUB 是我们专为简化您的工作流程而设计的无代码直观平台。有了Ultralytics HUB,您可以毫不费力地继续探索、可视化和管理数据,而无需编写任何代码。请务必查看并利用其强大的功能! 🚀
设置
Pip 安装 ultralytics
和 依赖 并检查软件和硬件。
相似性搜索
利用向量相似性搜索的强大功能,查找数据集中的相似数据点以及它们在嵌入空间中的距离。只需为给定的数据集-模型对创建一个嵌入表。它只需要一次,而且会自动重复使用。
嵌入表建立后,您可以通过以下任何一种方式运行语义搜索:
- 在数据集中的给定索引/索引列表上,如 - exp.get_similar(idx=[1,10], limit=10)
- 对于数据集中没有的任何图像/图像列表 - exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10) 如果有多个输入,则使用它们的嵌入值总和。
您会得到一个 pandas 数据帧,其中包含与输入数据最相似的数据点的极限数量,以及它们在嵌入空间中的距离。您可以使用该数据集进行进一步筛选
您还可以直接使用 plot_similar
利用
exp.plot_similar(idx=6500, limit=20)
exp.plot_similar(idx=[100, 101], limit=10) # Can also pass list of idxs or imgs
exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10, labels=False) # Can also pass external images
Ask AI:使用自然语言进行搜索或筛选
您可以向资源管理器对象提示想要查看的数据点类型,它就会尝试返回包含这些数据点的数据帧。由于它是由 LLM 驱动的,所以并不总是能正确返回。在这种情况下,它会返回 "无"。
df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)
您可以使用 plot_query_result
利用实例:
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)
# plot
from PIL import Image
from ultralytics.data.explorer import plot_query_result
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)
在数据集上运行 SQL 查询
有时,您可能想调查数据集中的某类条目。为此,资源管理器允许您执行 SQL 查询。它接受以下任一种格式:
- 以 "WHERE "开头的查询会自动选择所有列。这可以看作是一种速记查询
- 您还可以编写完整的查询,指定要选择的列
这可用于研究模型性能和特定数据点。例如
- 假设您的模型在有人类和狗的图像上挣扎。您可以编写这样的查询,选择至少有两个人和至少有一只狗的点。
您可以结合 SQL 查询和语义搜索,筛选出特定类型的结果
table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)
table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
print(table)
与相似性搜索一样,您也可以使用 exp.plot_sql_query
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)
使用嵌入式表格(高级)
资源管理器可在 兰斯数据库 表。您可以使用 Explorer.table
对象,并运行原始查询、推送前置和后置过滤器等。
运行原始查询¶
矢量搜索可以从数据库中找到最近的矢量。在推荐系统或搜索引擎中,你可以从搜索的产品中找到类似的产品。在 LLM 和其他人工智能应用中,每个数据点都可以通过一些模型生成的嵌入来呈现,它会返回最相关的特征。
在高维向量空间中进行搜索,就是要找到查询向量的 K-Nearest-Neighbors (KNN)。
度量 在 LanceDB 中,度量是描述一对向量之间距离的方法。目前,它支持以下度量:
- L2
- 余弦
- Dot Explorer 的相似性搜索默认使用 L2。你可以直接在表上运行查询,也可以使用 Lance 格式构建自定义工具来管理数据集。有关可用 LanceDB 表操作的更多详情,请参阅文档
dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()
与流行数据格式的相互转换
嵌入工作
您可以从 lancedb 表中访问原始嵌入并对其进行分析。图像嵌入存储在列 vector
import numpy as np
embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)
散点图
分析嵌入的初步步骤之一是通过降维在二维空间中绘制嵌入图。让我们举例说明
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA # pip install scikit-learn
# 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's 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()
相似指数
下面是一个利用嵌入表进行操作的简单示例。资源管理器带有一个 similarity_index
运行
- 它试图估算出每个数据点与数据集其他数据点的相似程度。
- 它通过计算在生成的嵌入空间中,有多少图像嵌入比 max_dist 更接近当前图像,每次考虑 top_k 个相似图像。
对于给定的数据集、模型、 max_dist
& top_k
生成的相似性索引将被重复使用。如果您的数据集发生了变化,或者您只是需要重新生成相似性索引,您可以通过 force=True
.与矢量和 SQL 搜索类似,它也附带了一个可以直接绘制的工具。让我们看看
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01)
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)
先看情节
现在让我们看看操作的输出结果
让我们创建一个查询,看看哪些数据点的相似度超过 30,并绘制与之相似的图像。
你应该看到这样的内容