在当今的技术领域,无监督学习是一种强大的机器学习方法,它允许模型在没有人工标签的情况下学习数据的内在结构。这种方法特别适用于图像分类任务,其中大量的图像数据需要被自动识别和分类。通过使用先进的视觉模型,如CLIP、BLIP、DINOv2和ALBEF,可以训练出更小、更易于在边缘设备上运行的模型。
使用CLIP自动标记图像
CLIP是一个由OpenAI开发的多模态视觉模型,它能够根据提供的文本提示自动为图像分配标签。在本指南中,将使用CLIP作为基础模型,通过文本提示来标记图像,然后使用这些标记的图像来训练一个YOLOv8分类模型。将使用Roboflow Universe上的“损坏标志多标签数据集”,但在这个指南中,将构建一个单类分类模型。
from autodistill_clip import CLIP
from autodistill.detection import CaptionOntology
from autodistill_yolov8 import YOLOv8
# 设置本体,将文本提示映射到标签
base_model = CLIP(ontology=CaptionOntology({"损坏标志": "损坏标志", "标志": "标志"}))
要对图像进行推理,可以使用Autodistill提供的predict()方法:
pred = base_model.predict("./dataset/valid/your-image.jpg", confidence=0.5)
classes = base_model.classes
print(classes[pred.class_id])
标记图像的过程可能需要一些时间,这取决于数据集中的图像数量以及运行Autodistill的硬件。如果使用GPU对一百张图像进行推理,例如,推理会很快;如果在同一批图像上使用CPU进行推理,推理会慢一些。标记的图像将被保存到名为“dataset”的文件夹中,可以使用这些图像来训练分类模型。
训练分类模型
现在已经为项目标记了图像,可以开始训练分类模型了。将使用YOLOv8,这是一个流行的模型架构,来训练分类模型。在本节中,将:
from autodistill_yolov8 import YOLOv8
target_model = YOLOv8("yolov8n-cls.pt")
target_model.train("./dataset/data.yaml", epochs=100)
以上三行代码是训练模型所需的全部。将使用“n”YOLOv8分类检查点(最小的权重)对模型进行100个周期的训练。运行上述代码后,模型将进行训练,权重将保存到本地计算机。训练模型所需的时间再次取决于正在处理的图像数量以及运行Autodistill的硬件。
测试模型
使用之前介绍的predict()方法,但这次用于目标模型,可以测试模型的性能:
results = target_model.predict("/content/dataset/valid/damaged sign/image.jpg")
print(results[0].names)
print(results[0].probs)
以下图像被成功识别为“损坏标志”:
部署模型
可以将YOLOv8分类模型的权重上传到Roboflow进行部署。通过将权重部署到Roboflow,可以使用无限可扩展API和SDK将模型集成到各种设备和环境中的项目中。例如,可以使用roboflow.js在Web浏览器中部署模型,或者使用Python SDK在Python环境中部署。
rf = Roboflow(api_key="API_KEY")
project = rf.workspace().project("PROJECT_ID")
project.version(DATASET_VERSION).deploy(model_type="yolov8-cls", model_path=f"./runs/detect/train/")
需要用适当的API密钥、项目ID和数据集版本替换上述代码中的值。在Roboflow文档中概述了如何找到这些值:
除了使用Roboflow托管的API进行部署外,还可以使用Roboflow Inference,这是一个开源的推理解决方案,已经在生产环境中支持了数百万次API调用。Inference支持CPU和GPU,为提供了从NVIDIA Jetson到与TRT兼容的设备再到ARM CPU设备的广泛设备访问权限。
有了Roboflow Inference,可以在设备上自托管并部署YOLOv8分类模型。可以使用Inference Docker容器或pip包部署应用程序。在本指南中,将使用Inference Docker部署解决方案。首先,在设备上安装Docker。然后,查看Inference文档以找到适合设备的Docker容器。
docker pull roboflow/roboflow-inference-server-gpu
此命令将下载Docker容器并启动推理服务器。该服务器可在以下网址访问:
http://localhost:9001
要运行推理,可以使用以下Python代码:
import requests
workspace_id = ""
model_id = ""
image_url = ""
confidence = 0.75
api_key = ""
infer_payload = {
"image": {
"type": "url",
"value": image_url,
},
"confidence": confidence,
"iou_threshold": iou_thresh,
"api_key": api_key,
}
res = requests.post(
f"http://localhost:9001/{workspace_id}/{model_id}",
json=infer_payload,
)
predictions = res.json()
在上面的代码中,设置Roboflow工作区ID、模型ID和API密钥。要使用YOLOv5模型进行商业推理,需要一个Roboflow企业许可证,通过该许可证,将获得使用YOLOv5的传递许可证。企业许可证还为提供了高级设备管理、多模型容器、自动批推理等功能。要了解更多关于使用Roboflow Inference部署商业应用程序的信息,请联系Roboflow销售团队。