零样本分类模型的应用与实践

计算机视觉领域,图像分类是一项基础且重要的任务。传统上,对于常见物体如水果的分类,需要训练一个定制的视觉模型,例如ResNet模型。然而,随着零样本分类模型的出现,可以在不训练模型的情况下对图像进行分类。

零样本分类模型是大型预训练模型,能够在没有针对特定用例进行训练的情况下对图像进行分类。其中最著名的零样本模型之一是由OpenAI开发的Contrastive Language-Image Pretraining(CLIP)模型。CLIP能够根据一系列提示(例如“猫”,“狗”)返回相似度分数,显示每个文本提示计算出的嵌入与图像嵌入的相似程度。然后,可以将最高置信度作为图像的标签。

CLIP在超过4亿对图像和文本上进行了训练。通过这种训练过程,CLIP发展出了理解文本与图像之间关系的能力。因此,可以要求CLIP通过常见物体(例如“猫”)或图像的特征(例如“公园”或“停车场”)来对图像进行分类。这两种能力之间存在许多可能性。

零样本分类模型可以直接用于分类常见场景,例如识别图像中是否包含人物、人物是否佩戴口罩,或者图像中是否包含广告牌,无需任何微调。这使得可以更快地将视觉功能集成到应用程序中;可以消除训练模型所需的时间和成本。

还可以在视频帧上使用CLIP。例如,可以使用CLIP来识别安全摄像头在夜间何时捕捉到人物,并使用这些信息向安全人员标记有人进入了场景。或者,可以使用CLIP来识别传送带上是否存在盒子。

在本文中,已经多次提到了CLIP。CLIP被用于许多零样本分类任务。话虽如此,还有其他模型可供选择。许多模型使用并改进了OpenAI在2021年开发的CLIP架构。例如,Meta AI Research在2023年9月发布了MetaCLIP,这是一个使用开放训练数据分布的CLIP版本,与用于训练CLIP的封闭源数据集不同。AltCLIP在多种语言上进行了训练,使用户能够提供多语言提示。

其他流行的零样本模型包括:

  • DINOv2(Meta AI Research)
  • BLIPv2(Salesforce)
  • FastViT(Apple)

让通过一个示例来展示如何使用CLIP对图像进行分类。在本指南中,将使用Roboflow Inference的托管版本,这是一个工具,使能够运行大型基础视觉模型以及微调模型。

将构建一个应用程序,允许在图像上运行CLIP。将在托管的Roboflow CLIP端点上运行推理,这使能够在云端运行CLIP推理。

import requests import base64 from PIL import Image from io import BytesIO import os INFERENCE_ENDPOINT = "https://infer.roboflow.com" API_KEY = "API_KEY" prompts = [ "orange", "apple", "banana" ] def classify_image(image: str) -> dict: image_data = Image.open(image) buffer = BytesIO() image_data.save(buffer, format="JPEG") image_data = base64.b64encode(buffer.getvalue()).decode("utf-8") payload = { "api_key": API_KEY, "subject": { "type": "base64", "value": image_data }, "prompt": prompts, } data = requests.post(INFERENCE_ENDPOINT + "/clip/compare?api_key=" + API_KEY, json=payload) return data.json() def get_highest_prediction(predictions: list) -> str: highest_prediction = 0 highest_prediction_index = 0 for i, prediction in enumerate(predictions): if prediction > highest_prediction: highest_prediction = prediction highest_prediction_index = i return prompts[highest_prediction_index]

在上面的代码中,将API_KEY替换为Roboflow API密钥。学习如何获取Roboflow API密钥。将prompts替换为在预测中想要使用的提示。然后,添加以下代码:

image = "image.png" predictions = classify_image(image) print(get_highest_prediction(predictions["similarity"]), image)

让对以下衬衫图像使用提示“衬衫”和“运动衫”进行推理:

相似度最高的类别是“运动衫”。成功地使用CLIP对图像进行了分类。

还可以在视频帧上运行CLIP。了解更多关于如何使用CLIP分析视频的信息。

零样本分类模型在计算机视觉任务中扮演着关键角色。可以在应用程序中直接使用零样本分类模型,或者用于标记图像。还可以使用零样本分类模型来分析视频帧。许多应用程序使用CLIP作为起点,CLIP在广泛的任务中表现良好。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485