VOLOV5模型实现物体检测

187 阅读8分钟

我公司的应用场景是使用YOLOV5在自定义数据集上实现车的缺陷检测,参数为 --img 640 --batch 16 --epochs 50

也用了VOLOV5进行了视频监控下的实时分析视频流,可以检测开车人员是否抽烟、禁止进入的车或者人进入等这些情况发出报警。

VOLOV5

YOLOv5 是一种流行的目标检测模型,属于 YOLO(You Only Look Once)系列模型家族。这系列模型的主要特点是速度快、精度高,广泛应用于实时目标检测任务中。YOLOv5 由 Ultralytics 开发和维护,尽管它没有像前几代 YOLO(如 YOLOv1, YOLOv2, YOLOv3 和 YOLOv4)那样由原作者 Joseph Redmon 直接开发。

主要特点:

  1. 高效性:YOLOv5 以其高效率和速度著称,特别是在嵌入式设备和实时应用中表现突出。
  2. 高精度:尽管速度快,YOLOv5 依然能保持高精度的目标检测能力。
  3. 代码简洁:YOLOv5 的代码库简洁且易于理解,适合初学者快速上手。
  4. 自带定义模型:YOLOv5 提供多种预定义的模型规模(如 YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x),用户可以根据具体需求和资源选择合适的模型。

主要应用场景:

  • 实时对象检测:如无人机监控、视频监控、自动驾驶等需要实时分析的视频流。

  • 工业检测:如制造业中的缺陷检测、物流中的包裹监控等。

  • 智能设备:如智能手机摄像头应用中的场景识别和优化。

YOLOv5 模型结构:

YOLOv5 与 YOLO 系列的前几代模型在总体架构上保持一致,依然通过单个前向通过网络(forward pass)来实现目标检测,但在细节和优化上有所改进。这些改进包括:

  1. Backbone:用于特征提取的主干网络(如 CSPDarknet)。

  2. Neck:用于特征融合的网络层(如 PANet)。

  3. Head:用于目标分类和回归的网络层,最终输出边界框(bounding boxes)和类别概率。

如何使用 YOLOv5:

YOLOv5 提供了详细的文档和教程,用户可以按照步骤进行安装、训练、推理等操作。下面是一个简单的示例,展示如何使用 YOLOv5 进行目标检测。

1. 安装 YOLOv5:

# 克隆 YOLOv5 的 GitHub 仓库
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
# 安装需求
pip install -r requirements.txt

2. 进行推理:

下载预训练模型(例如 YOLOv5s),并对一张图片进行推理:

# 下载 YOLOv5s 的预训练模型并执行推理
python detect.py --source path_to_your_image --weights yolov5s.pt

3. 训练自定义数据集:

YOLOv5 也支持在自定义数据集上进行训练,具体步骤包括数据准备、配置文件修改和训练启动:

# 使用 COCO 数据集格式的自定义数据集进行训练
python train.py --img 640 --batch 16 --epochs 50 --data path_to_your_data_config_file --weights yolov5s.pt

1、python train.py - 这是执行 train.py 脚本的命令。这个脚本通常用于训练 YOLOv5 模型。

2、--img 640 - 该参数指定输入图像的分辨率(宽和高都为 640 像素)。 - YOLOv5 的训练输入图像会被调整为指定的尺寸,可以通过调整这个值来改变训练的输入分辨率。图像越大,模型可能检测的精度越高,但需要更多的计算资源。

3、--batch 16 - 该参数指定每个训练批次的大小,即一次性输入模型用于训练的图像数量。批次大小越大,训练速度可能越快但需要更多的内存。

4、 --epochs 50 - 该参数指定训练的总轮次。在训练过程中,模型会遍历数据集50次,这是进行50轮训练的意思。更多的轮次通常会带来更好的模型效果,但也需要更长的训练时间。

5、 --data path_to_your_data_config_file - 该参数指定路径为数据配置文件。这个文件通常为 .yaml 格式,包含数据集的位置、类别等信息。路径需替换为你实际的数据配置文件的位置。

6、 --weights yolov5s.pt - 该参数指定用于初始化训练的权重文件。 - yolov5s.pt 是预训练的 YOLOv5s 模型(YOLOv5 的一个小型号版本)。使用预训练的权重可以加快收敛速度,通常保存在 YOLOv5 的 GitHub 项目中。

比如yaml数据配置文件

数据配置文件(例如 data/coco.yaml)通常包含以下内容:

train: ../datasets/coco/train2017.txt  # 训练集图片路径列表文件 
val:  ../datasets/coco/val2017.txt  # 验证集图片路径列表文件
test: ../datasets/coco/test2017.txt # 测试集图片路径列表文件 
nc: 80 # 类别数量 
names: ['person', 'bicycle', 'car', ...]  # 类别名称列表 

注意,文件路径和类别名称应根据你所使用的数据集进行配置。 通过这种方式,你可以定制化训练 YOLOv5 模型,以适应你特定应用的数据和需求。

举例实现实时视频流检测

以下是一个使用 OpenCV 读取和处理实时视频流,并利用 YOLOv5 模型进行目标检测的示例 Python 脚本。

导入必要的库

import cv2 
import torch 
from pathlib 
import Path from numpy 
import random

def detect(weights='yolov5s.pt', source=0, img_size=640, conf_thres=0.4, iou_thres=0.5, device=''): 
    # 载入模型 
    model = torch.load(weights) model.eval() 
    # 设置设备 
    device = torch.device('cuda' if torch.cuda.is_available() and device == '' else 'cpu') model.to(device) 
    # 捕获视频流 
    cap = cv2.VideoCapture(source) if not cap.isOpened(): print(f"Error: Cannot open video source {source}") return while True: 
    # 读取一帧 
    ret, frame = cap.read() if not ret: break 
    # 图像预处理 
    img = cv2.resize(frame, (img_size, img_size)) 
    img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416 img = np.ascontiguousarray(img) 
    # 模型推理 
    with torch.no_grad(): 
    pred = model(img, augment=False)[0] 
    # 执行非极大值抑制 
    pred = non_max_suppression(pred, conf_thres, iou_thres, classes=None, agnostic=False) 
    # 处理预测结果 
    for i, det in enumerate(pred): 
    # 每个检测结果 

    # 绘制检测框和标签

    # 显示处理后的帧 
    cv2.imshow('YOLOv5 Detection', frame) 
    # Esc键退出
    if cv2.waitKey(1) == 27: 
    break
    cap.release()
    cv2.destroyAllWindows()

参数说明

  • weights:预训练模型的路径,例如 yolov5s.pt
  • source:视频流的输入源,可以是摄像头(通常为 0)或视频文件路径。
  • img_size:输入图像大小,默认是 640x640 像素。
  • conf_thres:置信度阈值,低于此值的检测结果会被过滤。
  • iou_thres:非极大值抑制的 IoU 阈值,用于过滤重叠的框。
  • device:使用的设备,可以是 'cpu' 或 'cuda'。

这个脚本展示了如何使用 YOLOv5 模型进行实时视频流的目标检测。通过 OpenCV 读取视频流,使用预训练的 YOLOv5 模型进行推理,并在每帧上实时绘制检测框。这个示例可以根据实际需求进行扩展和改进,比如处理不同的视频源或添加更多的后处理逻辑。

实时绘制检测框的作用

实时绘制检测框在视频流的目标检测中有多种重要作用和应用场景。以下是一些关键的作用和它们在不同应用中的具体体现

1、 可视化与调试

  • 即时反馈:实时绘制检测框能立即显示模型的检测结果,方便开发者检查和验证模型的性能。这对调试和改进模型非常有帮助。
  • 调参:通过实时观察检测结果,可以迅速找到和调整模型参数(如置信度阈值、非极大值抑制的 IoU 阈值等),以达到最佳效果。

2、安全监控与告警

  • 安全监控:在安全监控系统中,实时检测和绘制目标框可以帮助监控人员及时发现潜在的威胁或异常行为。
  • 告警系统:通过设置具体的检测规则(如进入禁止区域的人或车辆),一旦检测到,系统可以立即发出告警通知。 3、 自动驾驶
  • 行人检测:在自动驾驶车辆中,实时检测行人并绘制检测框可以确保车辆能够及时识别和避让行人。
  • 车辆检测:检测其他车辆的位置和距离,确保驾驶系统能够做出正确的决策,如变道、超车或停车。
  • 交通标志识别:实时绘制检测框还可以用于识别和处理交通标志和信号灯,帮助自动驾驶系统遵守交通规则。

4、人流量分析与管理

  • 人流统计:在公共场所(如商场、车站等),实时检测和绘制目标框可以用于统计实时人流量,帮助进行人员管理和安全保障。
  • 社交距离监测:在疫情防控中,实时检测人群并计算个人之间的距离,可以帮助确保人群保持适当的社交距离。

5、 增强现实(AR)应用

  • AR导航:在增强现实应用中,实时绘制检测框可以结合虚拟信息进行导航应用,如室内导航和行李识别等。
  • 物体识别与标签:结合实时识别和绘制功能,用户可以通过摄像设备实时获取物体的信息和标签。

总结

YOLOv5 是一款功能强大且广泛应用的目标检测模型,以其高效性和高精度在实际应用中有广泛的应用场景。通过简洁的代码设计和丰富的文档支持,使得用户能够快速上手并进行定制化开发