YOLOv4 是目标检测领域的一次重大升级,由 Alexey Bochkovskiy 等人在论文《YOLOv4: Optimal Speed and Accuracy of Object Detection》中提出。
与 YOLOv3 相比,YOLOv4 引入了多个结构优化和训练策略改进,在保持实时性的同时进一步提升了模型的精度和鲁棒性。
本文将严格按照以下来源进行说明:
⚠️ 注意:YOLOv4 不是由原 YOLO 作者 Joseph Redmon 提出,而是由 Alexey Bochkovskiy 维护并改进的版本。
YOLOv4 的改进围绕三个核心方向展开:
改进方向 | 改进技术 |
---|---|
主干网络优化 | CSPDarknet53 |
特征融合优化 | PANet(Path Aggregation Network) |
自适配训练策略 | Mosaic 数据增强 + SAT(Self-Adversarial Training) |
引入 CSPNet(Cross Stage Partial Network) 结构,在 Darknet53 的基础上进行模块化重构,以提升推理效率和梯度路径多样性。
在 FPN(Feature Pyramid Network)的基础上引入 Bottom-up Path Augmentation,使得高层语义信息可以更有效地传递到低层特征图中。
“Bag of Freebies”是指不影响推理速度但能显著提升训练效果的技术手段。
技术 | 描述 |
---|---|
Mosaic 数据增强 | 随机拼接四张图像为一张图,提升小目标识别能力 |
SAT 自对抗训练 | 通过 Adversarial Attack 方式生成扰动图像,提升模型鲁棒性 |
DropBlock 正则化 | 类似 Dropout,但作用于连续区域,防止过拟合 |
CIoU Loss | 改进的 IoU 损失函数,考虑中心距离和宽高比一致性 |
DIoU-NMS | 改进 NMS,使用 DIoU 替代传统 IoU,避免误删正确框 |
YOLOv4 的输出结构与 YOLOv3 类似,仍为三级输出:
输出层级 | 特征图大小 | anchor boxes |
---|---|---|
大目标 | 20×20 | [116,90], [156,198], [373,326] |
中目标 | 40×40 | [30,61], [62,45], [59,119] |
小目标 | 80×80 | [10,13], [16,30], [33,23] |
CIoU = IoU − ρ 2 d 2 − α v \text{CIoU} = \text{IoU} - \frac{\rho^2}{d^2} - \alpha v CIoU=IoU−d2ρ2−αv
其中:
方法 | mAP@COCO | FPS(V100) | 是否单阶段 |
---|---|---|---|
Faster R-CNN ResNet-101 | ~34.3 | ~7 | ❌ 两阶段 |
SSD512 | ~31.2 | ~19 | ✅ 单阶段 |
YOLOv3 | ~33.0 | ~45 | ✅ 单阶段 |
YOLOv4 | ~43.5 | ~35 | ✅ 单阶段 |
✅ 注:YOLOv4 在 COCO 上达到了当时领先的 mAP,且保持了较高的实时性。
改进点 | 说明 |
---|---|
✅ 支持 ONNX 导出 | 可用于 TensorRT、OpenVINO 等加速推理框架 |
✅ 支持 INT8 推理 | 提升边缘设备部署性能 |
✅ 支持多种输入尺寸 | 如 416、512、608、832 等 |
✅ 支持自定义类别数 | 修改 .cfg 文件即可适配新任务 |
✅ 支持预训练权重 | 提供 COCO 预训练权重下载地址 |
.cfg
文件)[net]
batch=64
width=608
height=608
channels=3
momentum=0.949
decay=0.0005
[yolo]
mask = 6,7,8
anchors = 12, 16, 19, 36, 40, 28, 36, 75, 76, 55, 72, 146, 142, 110, 192, 243, 459, 401
classes=80
num=9
jitter=.3
ignore_thresh=.7
truth_thresh=1
iou_loss=ciou
iou_normalizer=0.07
nms_kind=diounms
beta_nms=1.0
✅ 这些配置项在 AlexeyAB/darknet 中真实存在,影响 anchor 匹配、loss 计算、NMS 后处理等流程。
局限性 | 说明 |
---|---|
❌ 不支持 Soft-NMS | 需要自定义修改 |
❌ anchor 设置固定 | 新任务需重新聚类适配 |
❌ 输出结构固定 | 不适合直接部署 ONNX |
❌ 模型较重 | 相比 YOLOv5/YOLOX 更慢一些 |
改进方向 | 内容 | 是否论文提出 | 是否开源实现 |
---|---|---|---|
主干网络 | CSPDarknet53 | ✅ 是 | ✅ 是 |
Neck 结构 | PANet | ✅ 是 | ✅ 是 |
数据增强 | Mosaic | ✅ 是 | ✅ 是 |
自对抗训练 | SAT | ✅ 是 | ✅ 是 |
损失函数 | CIoU Loss | ✅ 是 | ✅ 是 |
NMS 算法 | DIoU-NMS | ✅ 是 | ✅ 是 |
正样本匹配 | 动态标签分配(非原生) | ❌ 否 | ✅ 社区实现 |
模型轻量化 | CSP 架构 | ✅ 是 | ✅ 是 |
欢迎点赞 + 收藏 + 关注我,我会持续更新更多关于目标检测、YOLO系列、深度学习等内容!