在制造业、物流、交通和零售等行业中,图像分类技术发挥着重要作用。例如,在制造业中,可以通过图像分类来检测产品是否存在缺陷;在零售业中,则可以用于判断包裹是否属于特定的产品SKU。以下是一个将图像分类为“划痕车门”的例子。
本指南将讨论如何使用Roboflow图像分类API为图像分配类别。这个API由OpenAI的开源CLIP模型提供支持,可以接受任意的分类标签。可以通过处理API返回的结果,为图像分配最有可能代表其内容的标签或一组标签。还将讨论如何训练自己的分类模型。
要使用Roboflow图像分类API,需要一个免费的Roboflow账户。这个账户将允许获取一个API密钥,用于访问API。一旦拥有Roboflow账户,就可以开始使用API了。
Roboflow图像分类API使用了一个名为CLIP的零样本分类模型。CLIP无需任何预先训练,也没有模型可以分类的特定标签列表。相反,可以提供任何任意的标签。CLIP以及API在通用术语上表现良好,例如对车辆类型、标志进行分类,判断图像是否包含不适宜内容等。
要对图像进行分类,需要两样东西:用于分类的类别列表,以及要分类的图像。有了这些信息,就可以向API发送请求了。
import requests
import base64
tags = ["划痕车门", "车门"]
API_KEY = "API密钥"
image = "image.jpeg"
infer_clip_payload = {
"subject": {
"type": "base64",
"value": base64.b64encode(open(image, "rb").read()).decode("utf-8"),
},
"subject_type": "image",
"prompt": tags,
"prompt_type": "text",
}
res = requests.post(
f"http://infer.roboflow.com/clip/compare?api_key=" + API_KEY,
json=infer_clip_payload,
)
similarity = res.json()['similarity']
idx = similarity.index(max(similarity))
tag = tags[idx]
print(f"最相似的标签: {tag}")
在上面的代码中,向Roboflow图像分类API发送了一个HTTP请求。发送了图像以及一个标签列表。API返回了一个分数列表,表示每个标签与图像的相似程度。最后,选择最相似的标签作为分类结果。
可以指定任何想要的标签。CLIP没有接受的标签列表。CLIP在通用标签(例如“车门”和“车上的划痕”)上表现良好,而不是特定标签(例如“红色丰田凯美瑞车门上的划痕”)。
替换:
然后,运行脚本。
模型返回:
模型成功地识别出第一张图像包含一个车门,第二张包含一个划痕车门。
Inference是一个高性能的推理服务器,可以在它上面运行微调模型,如YOLOv8目标检测和分类模型,以及基础模型,如CLIP,这是支持Roboflow图像分类API的模型。
虽然CLIP和Roboflow图像分类API可以解决许多用例,但对于更具体的分类问题,建议训练一个自定义分类模型。自定义分类模型可以使用自己的数据和分类体系进行训练,使能够比使用通用模型获得更高的准确率。
可以训练两种主要类型的分类模型:单类模型,为图像分配一个标签;多类模型,可以为图像分配一个或多个标签。
无论想要创建什么样的分类系统,都需要遵循以下步骤:
可以在Roboflow上训练一个分类模型。要开始训练自己的模型,请前往Roboflow仪表板,点击“创建项目”,并在项目创建页面上选择“分类”。然后可以上传图像并为分类模型对它们进行标记。当数据集准备好后,可以训练模型,并使用云API或自己的硬件部署它。
由CLIP支持的Roboflow图像分类API允许为图像分配任意标签。可以使用这个API来完成诸如分类照片是否包含人物、图像是否包含缺陷,或图像是否包含不适宜内容等任务。