跟学视频
炮哥带你学——YOLOv1、YOLOv2、YOLOv3目标检测算法原理与实战
1.Yolov2目标检测的背景
2. Yolov2模型改进点
1. 使用 Anchor Boxes(锚框)
- YOLOv1 的问题:YOLOv1 每个网格单元只能预测固定数量的边界框(通常为 2 个),这在面对不同形状和大小的目标时存在局限性,特别是对于小目标或者比例不对称的目标,效果较差。
- YOLOv2 的改进:引入了 Anchor Boxes 的概念,每个网格单元预测多个预设的边界框(通常为 9 个),每个边界框有不同的比例和大小。这些边界框通过 K-means 聚类从训练数据中自动学习得到。
- Anchor Boxes 提供了一种更加灵活的方式来适应不同形状的目标。
- 网格单元不再直接预测边界框的坐标,而是预测与每个 Anchor Box 相对应的偏移量,使得边界框更加精确。
2. 批量归一化(Batch Normalization)
- YOLOv1 的问题:YOLOv1 在训练时较为容易发生梯度消失或梯度爆炸的问题,导致训练不稳定。
- YOLOv2 的改进:引入了 批量归一化(Batch Normalization),在每个卷积层后进行归一化处理。这不仅改善了训练的稳定性,还加速了收敛,并提高了模型的准确性。批量归一化减少了对初始化和学习率的依赖。
3. 高分辨率输入
- YOLOv1 的问题:YOLOv1 的输入图像大小为 448×448,这虽然加快了速度,但限制了图像的分辨率和细节,导致在细节捕捉和小物体检测方面效果较差。
- YOLOv2 的改进:YOLOv2 增加了对更高分辨率输入的支持,默认使用 416×416 的图像大小,且在训练时可以使用不同大小的图像进行多尺度训练,增强了模型的鲁棒性和小物体检测能力。
4. 多尺度训练
- YOLOv1 的问题:YOLOv1 固定输入尺寸为 448×448,无法适应不同尺度的目标。
- YOLOv2 的改进:引入 多尺度训练,在训练过程中动态改变输入图像的尺寸,使得模型能够更好地适应不同大小的目标。通过多尺度训练,YOLOv2 能够检测不同尺寸的目标,并且在面对各种不同分辨率的图像时表现更好。
5. 改进的损失函数
- YOLOv1 的问题:YOLOv1 的损失函数设计较为简单,容易在训练过程中忽略某些边界框的精度,尤其是在小物体检测时。
- YOLOv2 的改进:优化了损失函数,特别是在边界框回归和分类任务之间的平衡。增加了 log(1 + IoU) 损失,以更精确地优化边界框位置和大小的回归。
6. 更深的网络结构
- YOLOv1 的问题:YOLOv1 的网络深度相对较浅,不能充分提取高层次的特征,导致对一些复杂场景的检测能力不足。
- YOLOv2 的改进:YOLOv2 使用了更深的网络结构,采用了 Darknet-19 作为骨干网络,并加入了更多的卷积层。这使得模型能够学习到更丰富的特征,从而提升了检测精度。
7. 空间金字塔池化(Spatial Pyramid Pooling, SPP)
- YOLOv1 的问题:YOLOv1 将所有图像压缩到固定的大小(448×448),这可能丢失图像的空间信息,尤其是对于大小不一的目标。
- YOLOv2 的改进:引入 空间金字塔池化(SPP) 模块,允许网络在不同的空间尺度下进行池化,从而提高了对不同尺寸目标的检测能力。SPP 能够在不同尺寸的图像上进行池化操作,有效保留了空间信息,并提升了模型的多尺度检测能力。
8. 预训练模型
- YOLOv1 的问题:YOLOv1 从头开始训练,参数初始化和训练过程可能不稳定。
- YOLOv2 的改进:YOLOv2 引入了 预训练模型,使用 ImageNet 上训练好的模型作为初始化,增强了模型的性能和训练稳定性。这种方式减少了训练时间,并提高了模型的泛化能力。
9. 目标检测精度提升
- YOLOv2 相比 YOLOv1 提高了 目标检测的精度,特别是在小物体和边界框定位方面表现得更好。通过引入 Anchor Boxes 和更深的网络结构,YOLOv2 能够更精确地预测目标的位置和类别。
10. YOLO9000(检测 9000 种目标)
- YOLOv2 的一个重要创新是 YOLO9000,它不仅可以通过常规的检测任务识别目标,还能够结合 类间层次结构(如 WordTree)进行 联合训练,从而在一个模型中同时进行 目标检测 和 目标分类,能够检测多达 9000 种 目标类别。
2.1BN层
第四步是BN层的精髓。
一般CNN后后都加一个BN层。
BN层和Drouput操作不共用。
mAP(mean Average Precision,均值平均精度) 是目标检测任务中常用的评估指标,用来衡量模型在多个类别上综合的检测精度。它结合了 精确率(Precision) 和 召回率(Recall),并在多个阈值下计算,最终给出一个综合评分,用以反映模型的整体性能。
2.2Hi-res classifier 更高分辨率的分类模型
2.3Convolutional+Anchor boxes
- 奇数大小的 grid cell(如 13x13、26x26 等)能够确保每个网格单元的中心位置对齐。这意味着每个网格会有一个明确的“中心”,这个中心可以用于定位目标(bounding box)。使用奇数大小的 grid cell 可以更好地捕捉目标的空间结构,并且避免出现偏移问题。
- 假设我们使用 13x13 的网格,在该网格中,每个 cell 的中心都会位于网格的中心点,这有助于准确地定位物体,并且将物体中心与其所在的 grid cell 对齐。这样,模型的空间推理能力会更强。
2.4DarkNet19网络
2.5dimension priors
如何确定 Dimension Priors?
在实际应用中,通常通过以下步骤来获得 dimension priors:
数据集统计:
- 从训练数据集中提取所有物体的 边界框(bounding box),即每个物体的宽度和高度。
- 统计所有物体的尺寸,并找出常见的物体尺寸分布。
聚类算法:
- 使用聚类算法(如 k-means)对物体的尺寸进行聚类,确定出最常见的尺寸(即尺寸先验)。
- 这些聚类的中心点代表了常见物体的尺寸,也就是 Anchor boxes 的初步尺寸。
Anchor Boxes 配置:
- 一旦确定了常见的尺寸,Anchor boxes 的尺寸就可以作为 dimension priors 用于模型训练。在训练时,网络会根据这些尺寸来预测物体的边界框。
2.6location predication直接位置预测
2.7Passthrough
2.8multi-scale-training
不同分辨率的训练使模型精度提高,模型更加坚挺,鲁棒性加强。
2.9hi-res detector
3.Yolov2损失函数
4.总结
YOLOv2 整体流程总结:
- 数据预处理:调整图像大小、数据增强。
- 卷积层特征提取:使用卷积层提取图像特征。
- Anchor Boxes 生成候选框:为每个网格单元生成多个候选框,并预测边界框位置、尺寸和置信度。
- 类别预测:每个网格单元预测物体的类别。
- NMS 处理:去除重叠框,保留最优框。
- 输出结果:生成目标检测结果,包括边界框和类别。