目标检测系列—YOLOv5 详解

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

目标检测系列—YOLOv5 详解

1. 引言

YOLOv5 由 Ultralytics 于 2020 年发布,是 YOLO 系列的一个重要版本。它基于 PyTorch 实现,并且在 训练优化、轻量化设计、推理速度 方面进行了大幅改进。

YOLOv5 主要有以下几个特点:

  • 更加轻量化,支持多种模型规模(YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x)。
  • 支持 AutoAnchor 机制,自动优化锚框,提高检测精度。
  • 采用 Mosaic 数据增强,提升小目标检测能力。
  • 支持 ONNX、TensorRT 导出,方便部署。

本文将详细解析 YOLOv5 的 网络结构、关键改进点,并提供 PyTorch 代码示例。


2. YOLOv5 的关键改进

相比 YOLOv4,YOLOv5 在以下方面进行了优化:

改进点描述
1. 轻量化设计提供 s、m、l、x 四种规模,适应不同算力
2. 训练优化采用 Mosaic 数据增强、AutoAnchor,提高精度
3. 便捷的 PyTorch 训练直接基于 PyTorch,省去了 Darknet 框架依赖
4. 高效部署便捷导出至 ONNX、TensorRT、CoreML

YOLOv5 在 COCO 数据集上的 AP50 达到了 66.7%,相比 YOLOv4 有小幅提升,同时计算速度更快。


3. YOLOv5 的网络结构

YOLOv5 采用 CSPDarknet 作为主干网络,并结合 FPN+PAN 进行特征融合

3.1 CSPDarknet 主干网络

  • 输入640×640×3640 \times 640 \times 3640×640×3 的 RGB 图像。
  • 特征提取
    • 采用 CSP 结构 提高计算效率。
    • 采用 SiLU(Swish)激活函数 代替 Leaky ReLU,提高梯度流动性。
  • 多尺度预测
    • 采用 FPN+PAN 结构 进行特征融合,提高检测能力。

CSPDarknet 代码示例(PyTorch 实现):

import torch
import torch.nn as nn

class CSPDarknet(nn.Module):
    def __init__(self):
        super(CSPDarknet, self).__init__()
        self.conv1 = nn.Conv2d(3, 32, kernel_size=3, stride=1, padding=1)
        self.bn1 = nn.BatchNorm2d(32)
        self.silu = nn.SiLU()
        self.res_block = nn.Sequential(
            nn.Conv2d(32, 64, 3, padding=1),
            nn.BatchNorm2d(64),
            nn.SiLU()
        )
    
    def forward(self, x):
        x = self.silu(self.bn1(self.conv1(x)))
        x = self.res_block(x)
        return x

model = CSPDarknet()
print(model)

4. YOLOv5 的 FPN+PAN 结构

YOLOv5 采用 FPN(Feature Pyramid Network)+ PAN(Path Aggregation Network) 进行特征融合,提升目标检测性能。

FPN+PAN 代码示例(PyTorch 实现):

class FPN_PAN(nn.Module):
    def __init__(self):
        super(FPN_PAN, self).__init__()
        self.conv1 = nn.Conv2d(256, 128, kernel_size=1)
        self.upsample = nn.Upsample(scale_factor=2, mode='nearest')
        self.conv2 = nn.Conv2d(128, 64, kernel_size=3, padding=1)
    
    def forward(self, x):
        x = self.conv1(x)
        x = self.upsample(x)
        x = self.conv2(x)
        return x

model = FPN_PAN()
print(model)

5. YOLOv5 的损失函数

YOLOv5 继续使用 CIOU 损失 进行边界框回归,并优化了分类损失。

损失函数代码示例(PyTorch 实现):

import torch

def ciou_loss(pred_boxes, target_boxes):
    iou = torch.sum(torch.min(pred_boxes, target_boxes)) / torch.sum(torch.max(pred_boxes, target_boxes))
    center_dist = torch.sum((pred_boxes[:, :2] - target_boxes[:, :2]) ** 2)
    aspect_ratio = torch.sum(torch.abs(pred_boxes[:, 2:] - target_boxes[:, 2:]))
    loss = 1 - iou + center_dist + aspect_ratio
    return loss

6. YOLOv5 的训练和部署

YOLOv5 通过 PyTorch 训练,并支持多种导出格式。

6.1 训练 YOLOv5

git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt
python train.py --img 640 --batch 16 --epochs 50 --data coco.yaml --weights yolov5s.pt

6.2 导出 YOLOv5 到 ONNX

python export.py --weights yolov5s.pt --include onnx

7. 结论

YOLOv5 进一步优化了 轻量化设计、训练策略、特征融合,使得目标检测更加高效易用。

下一篇博客将介绍 YOLOv6 的创新点,敬请期待!


如果觉得本文对你有帮助,欢迎点赞、收藏并关注! 🚀

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

PyTorch 2.8

PyTorch 2.8

PyTorch
Cuda

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值