VoxelGPT
希望可以在不写任何代码的情况下搜索你的图片或视频吗?想通过简单的英文提问从数据中提取见解吗?现在,你可以了!🎉
VoxelGPT 是一个 FiftyOne 插件,它结合了大型语言模型(LLMs)和大型多模态模型(LMMs)的力量,与 FiftyOne 的计算机视觉查询语言相结合,使你能够使用自然语言过滤、排序、语义分割数据和提出问题。它甚至可以为你执行数据集上的计算——当然,是在获得你的批准后!
在线演示
🚀🚀🚀 你可以在 gpt.fiftyone.ai 在线体验 VoxelGPT!
功能
VoxelGPT 可以处理以下类型的查询:
当你向 VoxelGPT 提问时,它将解释你的意图并确定你提出的查询类型。如果 VoxelGPT 不确定,它会请你澄清。
查询你的数据集
https://github.com/voxel51/voxelgpt/assets/12500356/5728b067-defc-4db3-8cda-ad8da3523cf4
VoxelGPT 可以处理关于你数据集的以下类型查询:
- 回答关于数据集架构、字段和已经执行的运行的问题
- 通过构建和连接视图阶段创建数据的过滤视图
- 在 FiftyOne 应用中设置视图
- 在整个数据集或数据集视图上执行聚合
你可以要求 VoxelGPT 搜索你的数据集。以下是一些你可以提出的问题示例:
- 显示我 10 个随机样本
- 显示我高置信度的错误正检预测
- 我有任何包含多个人的图片吗?
- 我包含猫的图片的平均亮度是多少?
在底层,VoxelGPT 会解释你的查询并将其转换为相应的数据集视图。VoxelGPT 了解你的数据集架构,以及诸如评估运行和相似性索引等内容。
它还可以自动检查你的数据集内容以检索特定实体。
数据架构查询
VoxelGPT 可以回答关于数据集架构、脑运行、评估运行等问题。以下是一些示例:
- 我的数据集中有哪些字段?
- 我有任何评估运行吗?
- 我使用了什么模型对我的数据集进行相似性索引?
目标检测查询
如果你的数据集中包含一个或多个fo.Detections
字段,VoxelGPT 可以基于边框的大小(相对和绝对)以及检测数量进行过滤或匹配。
- 限制视图到大于图像面积一半的真实检测
- 显示我所有 < $96^2$ 像素的预测
- 我每张图片中平均有多少个人检测?
地理位置查询
如果你的数据集有一个GeoLocation
字段,你可以对数据集进行地理查询。VoxelGPT 可以执行地理编码,从位置名称(或文本描述)到 (lon, lat)
对,或定义边界区域的一系列 (lon, lat)
点。以下是一些示例:
- 按与自由女神像的距离排序
- 显示我在大中央车站 400 米内的样本
- 过滤巴黎的图片
- 我有多少张在地狱厨房拍摄的图片?
时间查询
如果你的数据集有一个日期
或日期时间
字段,VoxelGPT 可以执行时间查询,例如:
- 过滤星期二拍摄的图片
- 有多少图片是 2023 年 6 月 1 日之后添加的?
- 显示我
event
字段时间在晚上 8 点到 11 点之间的样本
聚合
VoxelGPT 可以访问 FiftyOne 中的聚合阶段,因此它可以对整个数据集或视图进行字段或表达式的 count
、mean
、sum
、std
、min
、max
、values
和 distinct
等聚合。以下是一些示例:
- 我的图片的平均亮度是多少?
- 我有多少张带有
cat
标签的图片? - 我预测中的
confidence
字段的标准差是多少?
计算查询
VoxelGPT 可以对你的数据集执行计算,例如:
- 亮度:使用 FiftyOne 的图像质量问题插件给每个样本分配亮度评分
- 熵:使用 FiftyOne 的图像质量问题插件量化每个样本中的信息量
- 唯一性:使用FiftyOne Brain给每个样本分配唯一性评分
- 重复:使用FiftyOne Brain识别和删除数据集中的重复样本
- 相似性:使用FiftyOne Brain为数据集生成向量相似性索引,以便用于比较数据集中的样本
- 降维:使用FiftyOne Brain将每个样本的特征向量降维,以便使用 UMAP、PCA 或 t-SNE 在 2D 或 3D 中进行可视化
- 聚类:使用 FiftyOne 的聚类插件通过 KMeans、DBSCAN 以及其他聚类算法对数据集进行聚类
以下是一些你可以向 VoxelGPT 提出的计算查询示例:
- 计算我数据集中图片的亮度
- 对我数据集中的每张图片进行唯一性评分
- 为我的数据集生成相似性索引
- 使用 KMeans 聚类我的数据集
- 帮助我使用 UMAP 在 2D 中可视化我的数据集
💡 如果你不想允许 VoxelGPT 运行计算,设置环境变量:
export VOXELGPT_ALLOW_COMPUTATIONS=false
你还可以设置 VoxelGPT 在运行计算之前需要请求许可的数据集大小最小值:
export VOXELGPT_APPROVAL_THRESHOLD=1000
默认值是 100 个样本。
FiftyOne 库查询
VoxelGPT 不仅是一个编程伙伴,它还是一个教育工具。VoxelGPT 可以访问整个FiftyOne 文档,以及明矾博客上的所有博客文章和 Voxel51 YouTube 频道上的视频转录内容。它可以使用这些资源来回答与 FiftyOne 相关的问题。
以下是一些你可以向 VoxelGPT 提出的文档查询示例:
- 如何从 FiftyOne 动物园加载数据集?
- match() 阶段做什么?
- 我可以用 COCO 格式导出我的数据集吗?
- FiftyOne 有任何用于主动学习的插件吗?
VoxelGPT 会提供明矾文档、博客和 YouTube 频道中最有帮助资源的链接。对于 YouTube 视频,链接将直接指向最相关的时间戳!
查询你的工作区
VoxelGPT 可以回答关于你运行 FiftyOne 的环境的问题,包括:
- 你下载的其他数据集
- 你安装的插件和这些插件中的操作员
- 你的 FiftyOne 配置
- 你的 FiftyOne 应用配置
以下是一些你可以向 VoxelGPT 提出工作区查询示例:
- 我有任何 COCO 数据集吗?
- 我有任何用于识别数据问题的插件吗?
- 我的操作员超时设置是多少?
一般机器学习查询
https://github.com/voxel51/voxelgpt/assets/12500356/294b53f8-9398-4e6a-b923-56c7a9684f1d
最后,VoxelGPT 可以回答关于计算机视觉、机器学习和数据科学的一般问题。它可以帮助你理解基本概念,并学习如何克服数据质量问题。
以下是一些你可以向 VoxelGPT 提出的机器学习查询示例:
- 精度和召回率有什么区别?
- 我如何在我的图片中检测人脸?
- 我能用哪些方法来减少数据集中的冗余?
安装
如果你还没有安装 FiftyOne,请安装:
pip install fiftyone
你还需要提供一个 OpenAI API 密钥(创建一个):
export OPENAI_API_KEY=XXXXXXXX
有关使用你的私有 Azure 部署,请参见此处
仅限应用使用
如果你只想在FiftyOne 应用中使用 VoxelGPT,你可以简单地安装它作为插件:
fiftyone plugins download https://github.com/voxel51/voxelgpt
fiftyone plugins requirements @voxel51/voxelgpt --install
本地使用/开发
如果你想直接使用 voxelgpt
模块或本地开发项目,你需要克隆仓库:
git clone https://github.com/voxel51/voxelgpt
cd voxelgpt
安装需求:
pip install -r requirements.txt
通过将其链接到你的插件目录,使插件在 FiftyOne 应用中可用:
# 将你的 voxelgpt 克隆链接到 FiftyOne 插件目录
ln -s "$(pwd)" "$(fiftyone config plugins_dir)/voxelgpt"
FiftyOne Teams
想要将 VoxelGPT 添加到你的 FiftyOne Teams 部署中吗?可以!点击此处获取说明。
使用 Azure OpenAI 部署
你可以通过设置以下环境变量来使用你的私有 Azure 部署的 VoxelGPT:
export OPENAI_API_TYPE=azure
export AZURE_OPENAI_ENDPOINT=<azure_endpoint>
export AZURE_OPENAI_KEY=<azure_api_key>
export AZURE_OPENAI_GPT35_DEPLOYMENT_NAME=<gpt35-deployment-name>
export AZURE_OPENAI_GPT4O_DEPLOYMENT_NAME=<gpt4o-deployment-name>
export AZURE_OPENAI_TEXT_EMBEDDING_3_LARGE_DEPLOYMENT_NAME=<embedding-deployment-name>
如果未设置前三个环境变量中的任何一个,VoxelGPT 将默认为使用 OpenAI API。对于后三个环境变量,如果未设置或未找到资源,VoxelGPT 将默认使用 OpenAI API 进行该特定模型。
在应用中使用 VoxelGPT
你可以通过加载任何数据集在 FiftyOne 应用中使用 VoxelGPT:
import fiftyone as fo
import fiftyone.zoo as foz
dataset = foz.load_zoo_dataset("quickstart")
session = fo.launch_app(dataset)
然后通过以下方式之一:
- 点击网格上的 OpenAI 图标
- 点击
Samples
选项卡旁边的+
图标并选择 VoxelGPT
https://github.com/voxel51/voxelgpt/assets/12500356/fbaccb6f-dc7f-43d7-9da3-adb4062c398b
例如,尝试提问以下问题:
- 计算机视觉中有哪些流行的模型架构?
- 我如何在数据集中搜索特定对象?
- 显示我预测的飞机
专家提示: 使用 now
关键字 将你的先前提示作为下一个查询的上下文!
你也可以通过按键盘上的 ~
键作为操作员运行 VoxelGPT,并从列表中选择 Ask VoxelGPT
。这将打开一个小弹窗,你可以在其中输入你的查询。
在 Python 中使用 VoxelGPT
如果你已经本地安装,你还可以通过 Python 直接与 VoxelGPT 交互。
交互式会话
你可以使用 ask_voxelgpt_interactive()
启动一个交互式会话,通过 input()
提示与你交谈。导航到 VoxelGPT 所在的目录并运行:
import fiftyone as fo
import fiftyone.zoo as foz
from voxelgpt import ask_voxelgpt_interactive
dataset = foz.load_zoo_dataset("quickstart")
session = fo.launch_app(dataset)
ask_voxelgpt_interactive(dataset, session=session)
专家提示: 使用 now
关键字 将你的先前提示作为下一个查询的上下文。
通常,你可以使用任何组合的用户集、文档和一般计算机视觉查询来提示 VoxelGPT。例如,对话可能如下所示:
你:
精度和召回率有什么区别?
VoxelGPT:
精度和召回率是两个重要指标,用于评估机器学习模型在分类任务中的性能。精度衡量模型在所有正预测中真正正预测的比例。另一方面,召回率衡量在数据集中所有真实正实例中真正正预测的比例。
换句话说,精度是模型正确识别正实例的能力,而召回率是模型识别所有正实例的能力。高精度意味着模型的错误正预测很少,而高召回率意味着模型能够识别大多数数据集中的正实例。
在评估模型性能时平衡精度和召回率非常重要。高精度但低召回率的模型可能会遗漏重要的正实例,而高召回率但低精度的模型可能会产生太多错误正预测。
在 FiftyOne 库的上下文中,可以使用 `fiftyone.utils.metrics` 模块计算精度和召回率,该模块提供了计算各种分类指标的函数。例如,[`fiftyone.utils.metrics.binary_classification`](https://docs.voxel51.com/api/fiftyone.utils.metrics.binary_classification.html) 函数可用于计算二分类任务的精度和召回率。
你:
FiftyOne 集成了 Label Studio 吗?
VoxelGPT:
是的,FiftyOne 与 Label Studio 集成。该集成允许您将数据直接从 FiftyOne 轻松上传到 Label Studio 进行标注。您可以通过简单的 pip install 安装来启动一个本地服务器,从而开始使用 Label Studio。FiftyOne 提供了简单的设置说明,您可以使用这些说明指定必要的账户凭证和服务器端点。FiftyOne 提供了一个 API,可以用 Label Studio 在 Python 中以编程方式创建项目、上传数据、定义标签模式和下载注释。对于图像数据集,支持以下所有标签类型:分类、检测、实例分割、多边形和折线、关键点、标量字段和语义分割。
来源:
- https://docs.voxel51.com/integrations/index.html
- https://docs.voxel51.com/integrations/labelstudio.html
你: 给我展示预测的飞机
VoxelGPT:
确定的潜在算法:评估 未找到评估运行。 确定的潜在字段:预测 确定的潜在标签类别:{'预测': ['飞机']} 确定的潜在视图阶段:['匹配', '过滤标签', '匹配标签', '排除标签', '过滤字段'] 好的,我正在加载 dataset.filter_labels("predictions",F("label") == "airplane")
你: 现在只显示前10个样本
VoxelGPT:
确定的潜在算法:评估 未找到评估运行。 确定的潜在字段:预测 确定的潜在标签类别:{'预测': ['飞机']} 确定的潜在视图阶段:['匹配', '限制', '限制标签', '跳过', '排序'] 好的,我正在加载 dataset.match(F("predictions.detections.label").contains("airplane")).limit(10)
你:退出
在交互模式下,VoxelGPT 会自动加载它在应用中创建的任何视图,您可以通过会话对象访问它们:
print(session.view.count("predictions.detections"))
单个查询
您还可以使用 ask_voxelgpt()
来向 VoxelGPT 提出单个查询:
from voxelgpt import ask_voxelgpt
ask_voxelgpt("FiftyOne 是否与 CVAT 集成?")
是的,FiftyOne 与 CVAT 集成,CVAT 是一个开源的图像和视频注释工具。您可以直接从FiftyOne 上传数据到CVAT 以添加或编辑标签。您可以通过 app.cvat.ai 的托管服务器或通过自托管服务器使用 CVAT。无论哪种情况,FiftyOne 都提供了简单的设置说明,您可以使用这些说明指定必要的账户凭证和服务器端点。FiftyOne 与 CVAT 之间的紧密集成允许您在 FiftyOne 中策划和浏览数据集,然后仅用一行代码将样本或现有标签发送到 CVAT 进行注释。要使用 CVAT,您必须在 CVAT 服务器上创建一个账户。默认情况下,FiftyOne 使用 app.cvat.ai。如果你还没有,去 app.cvat.ai 并立即创建一个账户。另一种选择是本地设置 CVAT ,然后配置 FiftyOne 使用您的自托管服务器。本地设置 CVAT 的主要好处是 app.cvat.ai 限制为10 个任务和 500MB 的数据。
来源:
- https://docs.voxel51.com/integrations/cvat.html#examples
- https://docs.voxel51.com/tutorials/cvat_annotation.html#Annotating-Datasets-with-CVAT
- https://docs.voxel51.com/tutorials/cvat_annotation.html#Setup
- https://docs.voxel51.com/integrations/index.html#fiftyone-integrations
当 VoxelGPT 响应您的查询创建一个视图后,它会被返回:
import fiftyone as fo
import fiftyone.zoo as foz
dataset = foz.load_zoo_dataset("quickstart")
view = ask_voxelgpt("显示我10个随机样本", dataset)
确定的潜在视图阶段:['匹配', '限制', '跳过', '获取', '排序']
好的,我正在加载 dataset.take(10)
关键字
VoxelGPT 被训练识别某些关键字,以帮助其理解您的意图:
关键字 | 意思 |
---|---|
show /display | 告诉 VoxelGPT 您希望它查询您的数据集并显示结果 |
docs /how /FiftyOne | 告诉 VoxelGPT 您希望它查询 FiftyOne 文档。 |
now | 使用您的聊天历史作为上下文来解释您的下一个查询。例如,如果您请求“展示有人物的图像”,然后请求“现在展示最独特的10 个”,VoxelGPT 将理解您希望展示最独特的10 个有人物的图像。 |
help | 打印带有使用说明的帮助消息 |
reset | 重置对话历史 |
exit | 退出交互式 Python 会话 |
贡献
欢迎贡献!查看[贡献指南](CONTRIBUTING.md)了解指示。
它是如何工作的?
VoxelGPT 使用:
- OpenAI 的 GPT-3.5-Turbo 和 GPT-4o 生成 文本答案和代码
- OpenAI 的 text-embedding-3-large 模型 来嵌入输入文本提示
- LangChain 提供应用程序的连接 组件
- FiftyOne 的 插件框架 为 FiftyOne 应用 提供交互面板
局限性
媒体类型
VoxelGPT 对视频、分组数据集和 3D 媒体支持有限。基本的过滤、查询和聚合仍然有效,但不要期望对 3D 数据有深入了解。
示例
该实现基于有限的示例集,因此可能无法很好地泛化到所有数据集中。您的查询越具体,结果会越好。如果您发现结果与预期不符,请告诉我们!
关于 FiftyOne
如果您能读到这里,我们非常感谢您能抽出时间查看FiftyOne 并为我们打个星!
FiftyOne 是一个用于构建高质量数据集和计算机视觉模型的开源库。它是该项目的引擎。
感谢您的访问! 😊
加入社区
如果您想加入快速成长的工程师、研究人员和 视觉 AI 爱好者的社区,请加入 FiftyOne Slack community! 🚀🚀🚀