赞
踩
上一章我们介绍的通过迁移学习,在新的行人数据集上使用已经学习到的特征和权重,从而更快地实现行人检测任务。模型就会调整其参数以适应新的数据集,以提高对行人的识别性能。接下来介绍一种更快更便捷的方法,依旧是基于yolov8。
在这种方法中,不对模型进行重新训练,而是在模型输出的基础上,通过筛选、过滤标签来达到特定的识别目标。以下详细介绍这种方法:
1.模型输出: 首先使用一个预训练好的目标检测模型来对图像进行检测。
这些模型已经在大型数据集上进行了训练,学习到了各种不同类别的目标的特征。
2.目标标签过滤: 接下来,从模型的输出结果中提取目标的标签信息。这些标签通常包含了检测到的目标类别(如人、车、狗等)、位置(边界框坐标)、置信度分数等信息。
3.选择感兴趣的类别: 在标签过滤的过程中,根据任务需求选择感兴趣的目标类别。例如,只对行人感兴趣,您可以只保留标签为“行人”的目标检测结果,而过滤掉其他类别的目标。
4.阈值处理: 除了选择感兴趣的类别外,还可以根据置信度分数来进行阈值处理。通常情况下,模型会为每个检测到的目标分配一个置信度分数,表示该目标存在的概率。您可以根据设定的阈值来过滤掉低置信度的检测结果,以确保只保留可信度较高的目标。
5.结果可视化或保存: 最后,将经过标签过滤处理后的目标检测结果进行可视化或保存。通常,可以将过滤后的结果在图像或视频中标注出来,以便后续分析或应用。
只需要运行这段推理脚本即可。
import cv2 from ultralytics import YOLO # 加载YOLOv8模型 model = YOLO('yolov8n.pt') # 你可以选择其他模型,例如yolov8s.pt, yolov8m.pt等 image_path = 'test-img/ms.jpg' # 替换为你的图像路径 image = cv2.imread(image_path) # 使用模型进行检测 results = model(image) # 筛选出标签为"person"的检测结果(COCO数据集中,类别0通常为'person') person_results = [result for result in results[0].boxes if result.cls[0] == 0] # 绘制检测到的"person"的边界框 for box in person_results: x1, y1, x2, y2 = map(int, box.xyxy[0]) confidence = box.conf[0] label = f"person {confidence:.2f}" cv2.rectangle(image, (x1, y1), (x2, y2), (0, 0, 255), 3) cv2.putText(image, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 4) # 保存结果图像 output_path_person_only = 'person_only_detected_image1.jpg' cv2.imwrite(output_path_person_only, image) print(f"检测结果已保存到 {output_path_person_only}")
优点:
缺点:
优点:
缺点:
没有最好的方法,只有最合适的方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。