专栏链接:深度学习和论文精读
本文并非对论文直接进行翻译,增加了自己对于论文的理解,如有问题请及时指出~
前言
本文将介绍YOLO系列的演变,具体YOLO每个版本的请查看深度学习和论文精读专栏中的对应文章。
YOLO系列演变
版本 | 输入端 | Backbone | Neck | 输出端 | 其他 |
---|---|---|---|---|---|
YOLOv1 | 1.输入固定为448x448像素的图像 2.图像被划分为7x7的网格 | 自定义CNN网络,包含24个卷积层和2个全连接层 | 无 | 7x7网格,每个网格预测2个边界框和20个类别概率 | 损失函数为均方误差 |
YOLOv2 | 随机多尺度训练 | 引入Darknet-19,包含19个卷积层和5个最大池化层 | 采用Passthrough层 | 引入Anchor,预测13x13网格中每个单元的边界框和类别,且限定预测框的中心点只能在cell内 | 1.BN代替dropout 2. 完全卷积 |
YOLOv3 | 无 | 引入Darknet-53,结合了残差连接,有53个卷积层。 | 引入了多尺度预测(FPN) | 每个尺度上的网格单元都预测3个边界框,包括类别和对象置信度 | 分类器从Sigmoid改为Softmax |
YOLOv4 | 1.Mosaic数据增强 2.自对抗训练(SAT) | 引入CSPDarknet53,采用了CSPNet结构 | SPP(空间金字塔池化)和PAN(路径聚合网络) | 无 | 1.CIoU Loss 2.Mish激活函数 3.DropBlock正则化 4.标签平滑 |
YOLOv5 | 自适应图片缩放 | Focus结构,CSP结构 | FPN+PAN结构 | CSP2结构 | 1. GIoU Loss 2. DIOU_Nms |
相关面试问题
其实主要还是需要了解每代中的每个模块的作用以及YOLO系列的变化过程,并没有特别多针对性的问题。此外大部分还与其他目标检测算法做对比(SSD、Faster-RCNN等),但由于博主目前还尚未学习,因此未包含此部分。如果大家有相关问题可以补充~
YOLO系列
Q1:YOLO每一代的不同
见上表
Q2:YOLO为什么比其他检测算法快
- 单一神经网络: YOLO使用一个单一的卷积神经网络(CNN)直接从输入图像预测边界框和类别概率。这种一步到位的方法与传统的两步法(如先提议候选区域,再分类的R-CNN系列)相比,大幅提高了速度。
- 全图预测: YOLO将整个图像视为整体进行分析和预测,这避免了选择性搜索区域的需求。它将图像分割成多个格子,每个格子预测多个边界框和概率。这种方法减少了计算步骤,加速了处理过程。
具体模块
Q1:如何解决小目标检测的问题
在YOLO算法中,检测小目标常常是一个挑战,因为原始的YOLO版本更倾向于检测中等大小或大型的目标。不过,随着YOLO算法的迭代更新,开发者们采取了多种策略来提高对小目标的检测性能。以下是一些常用的方法:
- 多尺度预测(Multi-Scale Predictions):
YOLOv3和后续版本通过采用多尺度预测来改善小目标的检测。这种方法在不同尺度的特征图上进行预测,较深层的特征图捕获更细节的信息,有助于检测小目标。例如,在YOLOv3中,除了主要的特征图,还会在更高分辨率的特征图上进行预测,这样就可以检测到更小的目标。- 特征金字塔网络(Feature Pyramid Networks, FPN):
特征金字塔网络是一种常用于目标检测的结构,它可以有效地将高层的语义信息和低层的细节信息结合起来。在YOLO的一些变体中,通过利用FPN可以改进对不同尺度目标的检测能力,特别是小目标。- 锚框优化(Anchor Boxes Optimization):
在YOLO中,通过调整锚框(anchor boxes)的尺寸和比例,可以对小目标进行更好的预测。通过分析训练数据集中目标的大小和形状,可以自定义锚框以适应不同大小的目标,包括小目标。- 数据增强(Data Augmentation):
使用数据增强技术如随机缩放、裁剪和颜色变化等,可以使模型更好地泛化到不同大小的目标上。特别是通过放大图像中的小部分,可以帮助模型学习到更多小目标的特征。- 损失函数调整(Loss Function Adjustment):
在训练过程中,可以调整损失函数来给予小目标更高的权重,这样模型在训练时会更加注重小目标的检测准确性。- 使用注意力机制(Attention Mechanisms):
引入注意力机制可以帮助模型聚焦于图像中的关键部分,从而提高小目标的识别率。注意力模块可以集中模型的计算资源到图像的重要区域,增强对小目标的检测能力。
Q2:假设两个目标靠的很近,则会识别成一个bbox,会有什么问题,怎么解决?
当两个目标靠的非常近时,置信度低的会被置信度高的框抑制掉,从而两个目标靠的非常近时会被识别成一个bbox。为了解决这个问题,可以使用softNMS(基本思想:用稍低一点的分数来代替原有的分数,而不是直接置零)
Q3:YOLOv2中的anchor如何生成
YOLOv2中引入K-means算法进行anchor的生成,可以自动找到更好的anchor宽高的值用于模型训练的初始化。但如果使用经典K-means中的欧氏距离作为度量,意味着较大的Anchor会比较小的Anchor产生更大的误差,聚类结果可能会偏离。
由于目标检测中主要关心anchor与ground true box(gt box)的IOU,不关心两者的大小。因此,使用IoU作为度量更加合适,即提高IoU值。因此YOLOv2采用IoU值为评判标准:
d ( box , centroid ) = 1 − IOU ( box , centroid ) d(\text{box}, \text{centroid}) = 1 - \text{IOU}(\text{box}, \text{centroid}) d(box,centroid)=1−IOU(box,centroid)
具体anchor生成步骤与经典K-means大致相同。主要的不同是使用的度量是,并将anchor作为簇的中心。
参考
YOLO系列算法全家桶——YOLOv1-YOLOv9详细介绍 !!
2022-02-目标检测算法面试问题汇总
算法工程师的独孤九剑秘籍(经典&热门模型高频面试题大汇总)