一、前言:目标检测与 YOLO 系列

目标检测是让计算机看懂画面:哪里有物体?是什么物体?在工业检测、安防监控、人脸识别、口罩检测等场景广泛使用。

YOLO(You Only Look Once)是目前最流行的单阶段检测器,最大特点是:速度快 + 精度高 + 工程友好。

其中:

  • YOLOv4:传统检测算法的巅峰,堆料之王
  • YOLOv5:PyTorch 时代的工程王者,简单、能跑、好用

下面我们从改进点到实战,一次性讲透。


二、YOLOv4 的核心改进(完全看懂版)

YOLOv4 并没有发明特别多新模块,而是把当时最有效的涨点技巧全部融合在一起。它在 YOLOv3 的基础上做了以下关键升级:

1. 主干网络改进:CSPDarknet53

  • 替换原有的 DarkNet53
  • 使用 CSP 结构分流梯度,让网络学得更稳、更快
  • 提高特征提取能力,同时降低计算量

2. 颈部特征融合:SPP + PAN

  • SPP 金字塔池化:捕捉大、中、小不同感受野,提高大图检测能力
  • PAN 路径增强:自下而上加强定位信息,让小目标更容易被检测
  • 最终实现:强语义 + 强定位 双优势

3. 数据增强:Mosaic 增强

  • 将 4 张图片随机拼接成 1 张
  • 提升小目标、遮挡目标检测能力
  • 降低对大型数据集的依赖

4. 损失函数升级:CIoU Loss

  • 不仅考虑 IoU(重叠)
  • 还考虑中心点距离、宽高比
  • 让框回归更准、更稳定

5. 后处理优化:DIoU-NMS

  • 更合理过滤重复框
  • 密集目标、遮挡目标效果显著提升

6. 训练策略拉满

  • 余弦退火学习率
  • 标签平滑
  • 混合精度训练
  • 自适应锚框

一句话总结:YOLOv4 = 更强的主干 + 更强的特征融合 + 更强的数据增强 + 更优的损失函数。


三、YOLOv5 介绍:工程化最强的 YOLO

YOLOv5 基于 PyTorch 开发,一发布就成为工业界、学生党首选。它的核心不是创新,而是简单、稳定、能跑、能部署。

特点:

  • 代码简洁,极易修改
  • 训练极快,支持 GPU 加速
  • 提供 n/s/m/l/x 不同大小模型
  • 一键导出 ONNX/TensorRT 部署
  • 非常适合口罩检测、行人检测、车牌识别等项目

四、YOLOv5 实战:从训练到检测完整跑通(基于真实代码)

下面内容全部来自你提供的 train.py、detect.py 和训练日志,可直接复现。

1. 项目结构

plaintext

yolov5-2.0/
├── train.py        # 训练脚本
├── detect.py       # 推理脚本
├── utils/          # 工具库
├── models/         # 模型结构
├── MaskDataSet/    # 口罩数据集
└── weights/        # 预训练权重

2. 训练脚本 train.py 关键逻辑

(1)混合精度加速(Apex)

try:
    from apex import amp
    mixed_precision = True
except:
    mixed_precision = False

减少显存占用,加速训练。

(2)加载模型权重

ckpt = torch.load(weights, map_location='cpu')
model.load_state_dict(ckpt['model'], strict=False)

兼容 CPU/GPU 设备。

(3)损失函数计算

loss, loss_items = compute_loss(pred, targets.to(device), model)

包含:

  • GIoU 框定位损失
  • obj 置信度损失
  • cls 分类损失

(4)验证与指标计算

results, maps, times = test.test(...)

输出精确率、召回率、mAP 等指标。

3. 开始训练(GPU 命令)

python train.py --data ./MaskDataSet/data.yaml --weights ./weights/yolov5s.pt --batch-size 1 --cache-images --device cuda

4. 训练日志解读(你的真实日志)

  • GIoU:框回归损失
  • obj:置信度损失
  • cls:分类损失
  • total:总损失
  • 最后三列:val_giou、val_obj、val_cls(验证集损失)

训练过程损失持续下降,说明模型正常收敛、GPU 正常工作。


五、YOLOv5 推理检测:detect.py 运行

训练完成后,用 best.pt 进行检测。

1. 检测命令

python detect.py --weights ./runs/exp28/weights/best.pt --source 图片路径

2. detect.py 执行流程

  1. 加载模型
  2. 读取图片
  3. 模型前向推理
  4. NMS 非极大值抑制
  5. 画框并保存结果
model = attempt_load(weights, map_location=device)
pred = model(img)
pred = non_max_suppression(pred)

3. 输出结果

检测后图片自动保存到:

inference/output/

画面中会出现预测框、类别、置信度。


六、YOLOv4 vs YOLOv5 总结

特点 YOLOv4 YOLOv5
框架 DarkNet PyTorch
难度 难配置 简单易用
速度 较慢 更快
部署 复杂 简单
适用 科研、竞赛 项目、毕设、落地

新手、做项目、跑口罩检测 → 直接选 YOLOv5。


七、总结

  • YOLOv4 是传统目标检测的巅峰,技巧强大、精度极高。
  • YOLOv5 是工程化的王者,简单、快速、稳定、易部署。

不管你是学习目标检测,还是做课程设计、毕业设计,YOLOv5 都是最适合上手、最容易跑通的方案。

希望本篇博客能帮助你理解 YOLO 系列,并成功训练出自己的第一个目标检测模型。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐