吃透 YOLOv4 改进 + YOLOv5 实战跑通:一篇从原理到落地的目标检测博客
·
一、前言:目标检测与 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 执行流程
- 加载模型
- 读取图片
- 模型前向推理
- NMS 非极大值抑制
- 画框并保存结果
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 系列,并成功训练出自己的第一个目标检测模型。
更多推荐


所有评论(0)