在本文中,将介绍如何将YOLOv9模型的权重上传到云端,以便可以访问一个可扩展的API,为项目提供支持。还可以使用Roboflow Inference将模型部署到边缘设备上,这是一个高性能的计算机视觉推理服务器,可以在多种设备上运行,从自己的云服务器到NVIDIA CUDA支持的GPU。
请注意,不支持部署YOLOv9实例分割模型。现在,让开始吧!
要开始,需要一个数据集,可以使用它来训练一个模型并上传到Roboflow。在本指南中,将使用Roboflow Universe上的一个金属缺陷检测数据集。Roboflow Universe是一个超过250,000个公开可用的计算机视觉数据集的存储库,这些数据集与社区共享,用于训练视觉模型。
要使用数据集,请在Roboflow上打开金属缺陷数据集,然后点击“下载此数据集”。一个窗口会打开,要求选择数据集的预期格式。对于本指南,请选择YOLOv8 PyTorch TXT。YOLOv9使用与YOLOv8模型相同的数据集格式。
接下来,打开Roboflow仪表板,点击“创建项目”按钮以创建一个新的对象检测项目。这是将上传模型权重的项目。如果已经有一个带有想要训练模型的数据集的项目,可以跳过这一步。
创建项目后,解压缩数据集,然后将其拖到Roboflow数据集上传页面:如果数据集未标记,可以使用Roboflow进行注释。Roboflow注释工具包括几个实用程序,可以帮助快速标记数据。例如,可以使用Segment Anything-powered标签助手点击图像中感兴趣的对象,并生成一个多边形,该多边形将被转换为用于训练的边界框。
标记完数据集后,在Roboflow仪表板的左侧边栏点击“生成”。生成页面允许创建数据集版本。版本是时间冻结的,允许跟踪数据集的更改。可以使用数据集版本来训练模型。
在数据集生成页面上,可以选择数据集的增强和预处理步骤。阅读预处理和增强指南,了解更多关于如何选择适合数据集的正确步骤。配置好版本后,点击页面底部的“生成”。
生成数据集后,可以开始训练模型。
使用Roboflow YOLOv9训练笔记本,可以在自己的硬件上训练自己的YOLOv9对象检测模型。然后,可以将训练好的模型权重上传回Roboflow,用于在云端和设备上部署Roboflow Inference。
由于Roboflow不支持YOLOv9训练,因此需要在自己的硬件上训练对象检测模型。建议使用Google Colab,这是一个免费工具,提供在笔记本环境中训练机器学习模型的能力。
打开RoboflowYOLOv9训练笔记本。然后,返回Roboflow数据集并点击“自定义训练和部署”部分中的“获取代码片段”。这将给一个代码片段,可以使用它来下载数据集以用于训练。
然后,可以使用出现的代码片段与YOLOv9自定义训练笔记本一起训练模型。如果已经有权重,就不需要训练模型。可以按照下一节中的步骤将它们上传到Roboflow。
训练好YOLOv9模型后,在将模型投入生产之前,还有一个任务:模型部署。可以使用Roboflow Inference,这是一个开源的计算机视觉推理服务器,来完成这项任务。有了Inference,可以在应用程序逻辑中使用Python SDK引用模型,或者运行模型在一个Docker容器中,可以将其部署为微服务。在本指南中,将展示如何使用Inference Python SDK部署模型。
要开始,需要将模型权重上传到Roboflow。这将使模型的云API可用,并允许将权重带入本地Inference部署。需要一个Roboflow账户中的项目,可以将权重上传到其中。
在Roboflow账户中创建一个新项目,然后上传数据集。点击侧边栏中的“生成”以生成数据集版本。有了数据集版本后,可以上传模型权重。
要上传模型权重,请运行之前从Roboflow复制的代码。此代码将类似于以下内容:
from roboflow import Roboflow
rf = Roboflow(api_key='YOUR_API_KEY')
project = rf.workspace('WORKSPACE').project('PROJECT')
version = project.version(1)
version.deploy(model_type="yolov9", model_path=f"{HOME}/yolov9/runs/train/exp")
在上面,设置Roboflow模型ID和API密钥。
运行此代码后,模型权重将上传到Roboflow。处理权重需要几分钟时间,之后云API将可供用于生产中运行模型。
一旦模型权重被处理,可以从RoboflowWeb界面测试模型。可以在云端或自己的硬件上部署YOLOv9模型。
要将模型部署到设备上,请先安装Inference和supervision:
pip install inference supervision
然后,可以使用以下代码运行模型:
from inference import get_model
model = get_model(model_id="model-id/version", api_key="API_KEY")
image_paths = sv.list_files_with_extensions(
directory=f"{dataset.location}/valid/images",
extensions=['png', 'jpg', 'jpeg']
)
image_path = random.choice(image_paths)
image = cv2.imread(image_path)
result = model.infer(image, confidence=0.1)[0]
detections = sv.Detections.from_inference(result)
label_annotator = sv.LabelAnnotator(text_color=sv.Color.BLACK)
bounding_box_annotator = sv.BoundingBoxAnnotator()
annotated_image = image.copy()
annotated_image = bounding_box_annotator.annotate(scene=annotated_image, detections=detections)
annotated_image = label_annotator.annotate(scene=annotated_image, detections=detections)
sv.plot_image(annotated_image)
在上面,设置Roboflow模型ID和API密钥。运行上述代码,在数据集的有效集中的随机图像上运行模型。这是一个示例输出:
模型成功地在硬件上运行。可以使用InferencePipeline方法在视频流上运行模型。
了解如何在视频流上运行YOLOv9模型。
可以将YOLOv9对象检测模型部署到Roboflow。部署模型会创建一个可以查询的云API来运行模型。将模型部署到Roboflow还允许使用Roboflow Inference运行模型,这是一个高性能的计算机视觉推理引擎。
在本指南中,介绍了如何使用Roboflow部署YOLOv9模型。创建了一个带有模型训练的数据集的Roboflow项目,导出了数据集以在Google Colab笔记本中进行训练,然后上传了训练好的模型权重以进行部署。然后使用Inference在图像上运行了模型。