YOLOv5 目标检测概述

部署运行你感兴趣的模型镜像

YOLOv5 目标检测概述

YOLOv5 是 Ultralytics 开发的基于 PyTorch 的实时目标检测模型,属于 YOLO(You Only Look Once)系列。它将图像分成网格,并在单次前向传播中预测边界框(bounding boxes)、置信度分数和类别概率。YOLOv5 的处理流程包括前处理(preprocessing)、模型推理(inference)和后处理(postprocessing)。前处理准备输入图像以适应模型,后处理则从模型输出中提取有效的检测结果。

Yolov5整体流程图
输入图像
前处理: 缩放/填充/归一化/转换为张量
模型推理: 特征提取 + 检测头
输出: 边界框、置信度、类别概率
后处理: 边界框解码 + NMS + 置信度过滤
最终检测结果: 边界框 + 标签 + 置信度

前处理(Preprocessing)细节

前处理是将原始图像转换为模型可接受的输入张量。主要目标是确保输入一致性(如固定大小)、提高效率,并保持图像比例以避免扭曲。YOLOv5 的前处理通常在 letterbox 函数中实现,包括以下步骤:

  1. 图像缩放和填充(Resizing and Padding)

    • YOLOv5 默认输入大小为 640x640 像素(可配置)。
    • 使用 Letterbox 缩放:保持原始宽高比,按比例缩放图像到目标大小。如果图像不成比例,会在短边填充灰色像素(padding)。
    • 数学公式:假设原始图像大小为 (h,w)(h, w)(h,w),目标大小为 (img_size,img_size)(img\_size, img\_size)(img_size,img_size)
      • 计算缩放比例: r=min⁡(img_sizeh,img_sizew)r = \min\left(\frac{img\_size}{h}, \frac{img\_size}{w}\right)r=min(himg_size,wimg_size)
      • 新高度和宽度: h′=r⋅hh' = r \cdot hh=rh, w′=r⋅ww' = r \cdot ww=rw
      • 填充量:顶部/底部填充 img_size−h′2\frac{img\_size - h'}{2}2img_sizeh,左侧/右侧填充 img_size−w′2\frac{img\_size - w'}{2}2img_sizew
    • 这确保了无扭曲,并记录填充信息用于后处理中的边界框调整。
  2. 颜色通道转换和归一化(Normalization)

    • 如果图像是 BGR 格式(OpenCV 默认),转换为 RGB。
    • 像素值归一化到 [0, 1]: pixel′=pixel255pixel' = \frac{pixel}{255}pixel=255pixel
    • 可选:减均值除标准差(YOLOv5 默认不使用 ImageNet 均值,因为它是端到端训练的,但可自定义)。
  3. 转换为张量并批处理(To Tensor and Batching)

    • 将图像转换为 PyTorch 张量:形状为 ( (batch_size, 3, img_size, img_size) )
    • 如果是单张图像,batch_size=1。
    • 通道顺序:RGB,数据类型:float32。

前处理确保模型输入标准化,提高检测准确性和速度。

后处理(Postprocessing)细节

后处理从模型的原始输出中提取有意义的检测结果。YOLOv5 的输出是多尺度锚框(anchors)的预测,包括边界框坐标、对象置信度(objectness)和类别概率。输出形状示例:(batch_size,num_anchors×num_scales,4+1+num_classes)(batch\_size, num\_anchors \times num\_scales, 4 + 1 + num\_classes)(batch_size,num_anchors×num_scales,4+1+num_classes),其中 4 是边界框(cx, cy, w, h),1 是置信度,num_classes 是类别数(如 COCO 的 80)。

  1. 边界框解码(Bounding Box Decoding)
    • 模型输出是相对于网格的相对坐标,需要转换为绝对坐标。
    • YOLOv5 使用 sigmoid 激活将输出限制在 [0,1]。
    • 数学公式:对于每个预测框:
      • 中心坐标:
        • x=(2⋅σ(tx)−0.5+cx)⋅stridex = (2 \cdot \sigma(t_x) - 0.5 + c_x) \cdot stridex=(2σ(tx)0.5+cx)stride
        • y=(2⋅σ(ty)−0.5+cy)⋅stridey = (2 \cdot \sigma(t_y) - 0.5 + c_y) \cdot stridey=(2σ(ty)0.5+cy)stride
      • 宽度/高度:
        • w=(2⋅σ(tw))2⋅aw⋅stridew = (2 \cdot \sigma(t_w))^2 \cdot a_w \cdot stridew=(2σ(tw))2awstride
        • h=(2⋅σ(th))2⋅ah⋅strideh = (2 \cdot \sigma(t_h))^2 \cdot a_h \cdot strideh=(2σ(th))2ahstride
  • 其中 σ\sigmaσ 是 sigmoid 函数,tx,ty,tw,tht_x, t_y, t_w, t_htx,ty,tw,th 是模型输出,cx,cyc_x, c_ycx,cy 是网格偏移,aw,aha_w, a_haw,ah 是锚框尺寸,stride 是特征图下采样率(如 8、16、32)。
    • 调整填充:使用前处理中的比例 r 和填充 (dw, dh) 缩放回原始图像大小:
      • x′=(x−dw)/rx' = (x - dw) / rx=(xdw)/r
      • y′=(y−dh)/ry' = (y - dh) / ry=(ydh)/r
      • w′=w/rw' = w / rw=w/r
      • h′=h/rh' = h / rh=h/r
  1. 置信度计算和过滤(Confidence Scoring and Thresholding)

    • 对象置信度: conf=σ(objectness)⋅max⁡(class_probs)conf = \sigma(objectness) \cdot \max(class\_probs)conf=σ(objectness)max(class_probs)
    • 过滤低置信度框:通常阈值如 0.25,只保留 ( conf > threshold ) 的框。
  2. 非最大抑制(Non-Maximum Suppression, NMS)

    • 去除重叠框:对于同一对象的多重检测,选择 IoU(Intersection over Union)最高的。
    • IoU 公式: IoU=A∩BA∪BIoU = \frac{A \cap B}{A \cup B}IoU=ABAB,其中 A 和 B 是两个边界框的面积。
    • NMS 步骤:
      • 按置信度降序排序所有框。
      • 选择最高置信度框,移除与其 IoU > threshold(通常 0.45)的框。
      • 重复直到无剩余框。
    • YOLOv5 支持类内 NMS 或 agnostic NMS(忽略类别)。
  3. 最终输出

    • 返回列表:每个检测为 [x1, y1, x2, y2, conf, class_id],其中 (x1,y1,x2,y2) 是左上右下角坐标。
后处理流程图

以下是后处理的详细流程图:

模型输出: (cx, cy, w, h, obj, classes)
应用 sigmoid 激活
解码边界框: 相对到绝对坐标
计算置信度: obj * max(class)
过滤: conf > threshold
排序: 按 conf 降序
NMS: 移除 IoU > nms_threshold 的重叠框
调整到原始图像大小
输出: 边界框 + 置信度 + 类别

后处理确保结果干净、无冗余,提高实际应用精度。

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值