使用GPT-4V进行图像分类
在图像识别领域,GPT-4V以其卓越的性能和广泛的知识库脱颖而出。通过将GPT-4V与Autodistill GPT-4V项目相结合,可以轻松地对数据进行自动标注,进而训练出一个更小、更精细的模型,以适应特定的应用场景。本文将详细介绍如何利用GPT-4V进行图像分类,并通过自动标注数据来训练一个更小的、针对特定用例的模型,最终实现在本地部署模型,无需互联网连接,也无需为每次API请求支付费用。
通过蒸馏GPT-4V进行图像分类,不仅可以自动标注数据,还能创建一个可以在设备上运行的精细调整模型,无需互联网连接,也无需为每次API请求支付费用。GPT-4V拥有广泛的世界知识。在初步测试中,提出了关于在提及泰勒·斯威夫特音乐的博客文章上运行OCR、计算机视觉梗图、数学OCR等广泛问题。
可以针对图像提出广泛的问题。例如,给定一张图像,可以问:“这张图像是集装箱还是其他东西?”也可以向GPT-4V提出更具体的问题。例如,可以说:“下面图像中的鱼是鲑鱼、梭子鱼还是鳟鱼?”如果在整个图像数据集上提出类似的问题,可以为每个图像分配标签。然后,这些标签可以格式化为分类数据集,用于训练更小的模型,如Ultraalytics YOLOv8分类。
Autodistill是一个包含分类、检测和分割基础模型的生态系统,这些基础模型拥有广泛的知识。可以使用这些基础模型,从CLIP到Grounding DINO到Segment Anything,来标注图像。可以用几行代码完成这项工作。可以选择一个“目标模型”,如YOLOv8,来训练模型。Autodistill GPT-4V使能够提供一张图像,检索分类结果,然后将结果保存在分类文件夹数据集中。
要开始使用,首先安装Autodistill和Autodistill GPT-4V:
pip install autodistill autodistill-gpt4v
如果没有OpenAI账户,请创建一个账户并添加信用卡信息。这是必需的,因为GPT-4V API的使用需要付费。有关API使用费用的更多信息,请参见OpenAI定价页面。在OpenAI仪表板中创建一个API密钥。运行以下命令以设置API密钥:
export OPENAI_API_KEY=your-key
接下来,创建一个新的Python文件,名为`distill.py`,并添加以下代码:
from autodistill_gpt_4v import GPT4V
from autodistill.detection import CaptionOntology
base_model = GPT4V(
ontology=CaptionOntology(
{
"salmon": "salmon",
"carp": "carp"
}
)
)
result = base_model.predict("fish.jpg", base_model.ontology.prompts())
class_result = base_model.ontology.prompts()[result.get_top_k(1).class_id]
print(class_result)
Caption Ontology用于定义想要分类的内容。Ontology接受一个包含任意数量类别的字典。字典中的键是将发送到基础模型(在本例中为GPT-4V)的提示。值是如果选择标注整个文件夹的图像,将保存在数据集中的标签(稍后将详细介绍)。这段代码将为每张图像发起一个API请求。
让在以下图像上运行代码:
GPT-4V成功将图像分类为“鲑鱼”。注意:GPT-4V不返回分类置信度。如果识别出一个类别,置信度将为1;否则,置信度将为0。
一旦在提示上进行了实验,并评估了GPT-4V在特定用例上的表现,可以标注一个文件夹中的图像。可以使用以下代码来实现:
base_model.label(“./context_images/”, extension=”.jpeg”)
这将在文件夹中的每个图像上运行GPT-4V,并将结果保存在分类文件夹数据集中。然后,可以使用数据集来训练模型。例如,可以训练一个YOLOv8分类模型。为此,首先安装YOLOv8 Autodistill模块:
pip install autodistill-yolov8
接下来,创建一个新的Python脚本,并添加以下代码:
from autodistill_yolov8 import YOLOv8
target_model = YOLOv8("yolov8n.pt")
# 训练模型
target_model.train("./context_images_labeled/data.yaml", epochs=200)
# 导出权重以供将来使用
saved_weights = target_model.export(format="onnx")
# 显示模型的性能指标
metrics = target_model.val()
# 在新模型上运行推理
pred = target_model.predict("./context_images_labeled/valid/images/fish-7.jpg", conf=0.01)
运行此代码后,将训练一个YOLOv8模型。然后,将在验证集的一张图像上运行推理。现在,可以使用RoboflowInference在本地部署YOLOv8模型。
使用GPT-4V API进行视觉相关任务的想法层出不穷,涵盖:
- 车辆分类(这是凯美瑞还是吉普?)
- 空间分类(这张图像包含一个空的食物托盘吗?)
- 损伤检测(这辆车有划痕、凹陷还是没有损伤?)