高效目标检测模型训练指南

在人工智能实验室的最新研究中,目标检测模型展现出了令人印象深刻的性能表现。尽管零样本检测模型能够以越来越高的精度检测目标,但小型定制模型在特定领域和用例中,相较于大型模型,展现出了更快的速度和更高的计算效率,同时保持了更高的准确率。尽管存在这些权衡,大型零样本模型的一个重要优势是:它们不需要数据标注或模型训练即可投入生产使用。

部署YOLO-World

通过几个简单的步骤,可以设置YOLO-World在Roboflow Inference上运行。首先,需要安装所需的包:

pip install -q inference-gpu[yolo-world]==0.9.12rc1

然后,将从Roboflow Inference导入YOLO-World,并设置想要检测的类别:

from inference.models.yolo_world.yolo_world import YOLOWorld model = YOLOWorld(model_id="yolo_world/l") # 有多种不同大小:s, m 和 l。 classes = ["book"] # 根据需要更改为任何想要检测的目标 model.set_classes(classes)

一个单词的目标描述可能就足够了,但有时可能需要更详细的描述。尝试运行一个测试推理(如下所示),并查看关于提示YOLO-World的博客文章。接下来,可以对一个样本图像运行推理,并看到模型在行动中的表现:

import supervision as sv import cv2 image = cv2.imread(IMAGE_PATH) results = model.infer(image, confidence=0.2) # 多次推理并尝试调整这个置信度阈值 detections = sv.Detections.from_inference(results)

使用Supervision,可以可视化预测结果:

labels = [ f"{classes[class_id]} {confidence:0.3f}" for class_id, confidence in zip(detections.class_id, detections.confidence) ] annotated_image = image.copy() annotated_image = sv.BoundingBoxAnnotator().annotate(annotated_image, detections) annotated_image = sv.LabelAnnotator().annotate(annotated_image, detections, labels=labels) sv.plot_image(annotated_image)

对于设置YOLO-World的完整过程,请查看关于使用YOLO-World检测目标的帖子。现在可以开始使用YOLO-World进行预测,并且通过一些额外的代码,可以开始创建一个更快、更高效、更准确的模型。

主动学习

首先,为了存储数据,将为书籍检测模型创建一个Roboflow项目。完成后,可以使用Python的Roboflow API访问工作区。首先,让安装Roboflow Python SDK:

pip install roboflow

然后,可以使用API密钥和输入工作区和项目ID来访问项目:

from roboflow import Roboflow rf = Roboflow(api_key="YOUR_ROBOFLOW_API_KEY") project = rf.workspace("*workspace_id*").project("*project_id*")

之后,拥有将本指南的所有先前部分结合起来创建一个函数,可以使用YOLO-World进行预测,同时将这些预测添加到数据集中,以便可以训练一个定制模型。

# 项目设置(从上一节复制) rf = Roboflow(api_key="YOUR_ROBOFLOW_API_KEY") project = rf.workspace("*workspace_id*").project("*project_id*") # 模型设置(从上一节复制) model = YOLOWorld(model_id="yolo_world/l") # 有多种不同大小:s, m 和 l。 classes = ["book"] # 根据需要更改为任何想要检测的目标 model.set_classes(classes) def infer(image): results = model.infer(image, confidence=0.1) detections = sv.Detections.from_inference(results) image_id = str(uuid.uuid4()) image_path = image_id+".jpg" dataset = sv.DetectionDataset(classes=classes,images={image_path:image},annotations={image_path:detections}) dataset.as_pascal_voc("dataset_upload/images","dataset_upload/annotations") project.upload( image_path=f"dataset_upload/images/{image_path}", annotation_path=f"dataset_upload/annotations/{image_id}.xml", batch_name="Bookshelf Active Learning", is_prediction=True ) return detections

可以根据部署需求更改infer函数。对于示例,计划在视频上运行检测,不希望也不需要将每一帧都上传,因此将修改infer函数,使其随机25%的时间上传:

def infer(image): results = model.infer(image, confidence=0.1) detections = sv.Detections.from_inference(results) if random.random() < 0.25: print("Adding image to dataset") image_id = str(uuid.uuid4()) image_path = image_id+".jpg" dataset = sv.DetectionDataset(classes=classes,images={image_path:image},annotations={image_path:detections}) dataset.as_pascal_voc("dataset_upload/images","dataset_upload/annotations") project.upload( image_path=f"dataset_upload/images/{image_path}", annotation_path=f"dataset_upload/annotations/{image_id}.xml", batch_name="Bookshelf Active Learning", is_prediction=True ) return detections

使用Supervision和以下代码,将对图书馆的视频进行推理:

def process_frame(frame, i): print(i) detections = infer(frame) annotated_image = frame.copy() annotated_image = sv.BoundingBoxAnnotator().annotate(annotated_image, detections) return annotated_image sv.process_video("library480.mov","library_processed.mp4",process_frame)

然后,当运行推理时,将看到图像被添加到Roboflow项目中。上传后,可以根据需要审查和纠正注释,然后创建一个新版本以开始训练定制模型!

对于如何训练模型的完整指南,请查看关于训练YOLOv8模型、YOLOv9模型或在Roboflow内训练模型的许多资源。训练后,能够以大约98.3%的平均精度(mAP)训练一个定制模型。

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