零样本模型在计算机视觉中的应用
零样本学习模型在计算机视觉领域有着广泛的应用,它们可以在特定数据集上进行训练,以识别和处理图像。这些模型可用于评估图像集合是否应该发送到数据存储、为常见类别标注数据、跟踪对象等。为了引导零样本模型识别特定的对象,可以使用提示或一系列提示来输入模型。提示是模型将编码并用来影响模型返回结果的文本指令。然而,为特定任务选择正确的提示是困难的。一种方法是根据数据集的内容猜测可能最有效的提示。这种方法可能适用于识别常见对象的模型,但对于需要识别图像数据中更细微特征的模型来说,这种策略可能不太合适。
CVevals工具的使用
CVevals是寻找与零样本模型一起使用的统计强提示的工具。可以使用这个工具找到最佳提示,用于自动对象检测、自动分类数据集中的某些数据,以及确定图像是否应该进一步处理(在设备上可用的计算或存储资源有限且希望优先保存哪些图像数据的场景中非常有用)。在本文中,将展示如何比较Grounding DINO零样本对象检测模型的提示,并决定五个提示用于篮球运动员检测数据集,并使用CVevals,由Roboflow维护的计算机视觉模型评估包,来确定最能识别篮球运动员的提示。
安装CVevals
在评估提示之前,需要安装CVevals。CVevals是GitHub上的一个仓库,可以在本地机器上安装。要安装CVevals,请在终端执行以下代码:git clone https://github.com/roboflow/evaluations.git
,cd evaluations
,pip install -r requirements.txt
,pip install -e .
。由于将在本文中使用Grounding DINO,因此需要安装该模型。有一个辅助脚本,在cvevals仓库中安装并配置Grounding DINO。在cvevals根文件夹中运行以下命令以安装模型:chmod +x ./dinosetup.sh
,./dinosetup.sh
。
配置评估器
CVevals仓库附带了一系列评估计算机视觉模型的示例。开箱即用,有比较CLIP和Grounding DINO提示的比较。还可以自定义CLIP比较以与BLIP、ALBEF和BLIPv2一起工作。对于本教程,将专注于Grounding DINO,这是一个零样本对象检测模型,因为任务涉及对象检测。要了解更多关于Grounding DINO的信息,请查看在YouTube上对Grounding DINO的深入研究。打开examples/dino_compare_example.py文件,滚动到检测名为evals的变量的部分。默认情况下,该变量看起来像这样:evals = [{"classes": [{"ground_truth": "", "inference": ""}], "confidence": 0.5}]
。真实情况应该完全等于数据集中的标签名称。推理是希望在Grounding DINO上运行的提示名称。注意,使用此脚本一次只能评估一个类别的提示。将尝试五个提示:篮球场上的球员、运动员、篮球运动员。对于每个提示,需要设置一个置信度水平,以便在满足条件时处理预测。在这个例子中,将设置一个值为0.5。但是,稍后可以使用此参数来确定增加和减少置信度水平如何影响Grounding DINO返回的预测。让用上面指定的提示替换默认的evals:evals = [{"classes": [{"ground_truth": "Player", "inference": "player"}], "confidence": 0.5}, {"classes": [{"ground_truth": "Player", "inference": "a sports player"}], "confidence": 0.5}, {"classes": [{"ground_truth": "Player", "inference": "referee"}], "confidence": 0.5}, {"classes": [{"ground_truth": "Player", "inference": "basketball player"}], "confidence": 0.5}, {"classes": [{"ground_truth": "Player", "inference": "person"}], "confidence": 0.5}]
。
运行比较
要运行比较,需要从Roboflow账户中检索以下信息:Roboflow API密钥;与模型相关的模型ID;与模型相关的工作区ID;以及模型版本号。已经在API文档中记录了如何检索这些值。有了上述值准备好,可以开始比较。要这样做,可以运行在上一节中编辑的Grounding DINO提示比较示例,使用以下参数:python3 examples/dino_example.py --eval_data_path=<path_to_eval_data> --roboflow_workspace_url=<workspace_url> --roboflow_project_url<project_url> --roboflow_model_version=<model_version> --config_path=<path_to_dino_config_file> --weights_path=<path_to_dino_weights_file>
。config_path值应该是GroundingDINO/groundingdino/config/GroundingDINO_SwinT_OGC.py,weights_path值应该是GroundingDINO/weights/groundingdino_swint_ogc.pth,假设是从cvevals根文件夹运行脚本并且已经使用上述安装辅助脚本安装了Grounding DINO。这里有一个完成的命令示例:python3 dino_compare_example.py --eval_data_path=/Users/james/src/webflow-scripts/evaluations/basketball-players --roboflow_workspace_url=roboflow-universe-projects --roboflow_project_url=basketball-players-fy4c2 --roboflow_model_version=16 --config_path=GroundingDINO/groundingdino/config/GroundingDINO_SwinT_OGC.py --weights_path=GroundingDINO/weights/groundingdino_swint_ogc.pth
。在这个例子中,正在使用Roboflow Universe上的Basketball Players数据集。可以在Roboflow Universe上评估任何数据集,或者评估与Roboflow账户相关的任何数据集。现在可以运行上述命令。如果第一次运行该命令,如果还没有使用Python包登录Roboflow账户,脚本将提示登录。脚本将指导完成身份验证。一旦通过身份验证,此命令将:从Roboflow下载数据集;在验证数据集中的每个图像上运行每个指定提示的推理;将Roboflow数据集中的真实情况与Grounding DINO预测进行比较;返回有关每个提示性能的统计信息,以及按提示测量的最佳提示信息,即导致最高F1分数的提示。Grounding DINO评估过程完成所需的时间将取决于验证数据集中的图像数量、正在评估的提示数量、是否有可用的CUDA-enabled GPU,以及计算机的规格。过一段时间后,将看到一个结果表出现。这是模型的结果:有了这些信息,可以看到“a sports player”是测试的提示中最好的,以提示导致最高的f1分数来衡量。它们的表现是相等的。可以使用这些数据自动标记数据集中的一些数据,知道它将为用例表现良好。如果评估在提示中返回了糟糕的结果,这可能表明:提示对于Grounding DINO来说太具体了(零样本对象检测器的一个关键限制),或者;需要尝试不同的提示。现在知道可以使用“a sports player”提示运行Grounding DINO来自动标记一些数据。这样做之后,应该在像Roboflow Annotate这样的交互式标注工具中审查注释,以确保注释是准确的,并进行任何必要的更改。可以在Grounding DINO指南中了解更多关于如何使用Grounding DINO进行标注的信息。
在本指南中,展示了如何使用CVevals Python实用程序比较零样本模型提示。在篮球数据集上比较了三个Grounding DINO提示,以找到导致最高F1分数的那一个。CVevals开箱即支持评估CLIP和Grounding DINO提示,可以使用一些修改的现有代码来评估BLIP、ALBEF和BLIPv2提示。查看CVevals中的examples文件夹以获取更多示例代码。现在有了找到适合用例的最佳零样本提示所需的工具。还编写了一份指南,展示了如何使用CVevals评估自定义Roboflow模型的性能,如果对深入研究CVevals模型评估感兴趣,建议查看。