YOLO系列(v1-v4)

1、YOLO V1

        计算机视觉能解决哪些问题——分类、检测、分割(语义分割、实例分割)、目标检测(非常重要的基础问题)

        下图为单阶段模型和两阶段模型基本情况(YOLO属于单阶段模型)

        两阶段先提取候选框,再逐一进行甄别(如R-CNN)。单阶段不提取候选框,算法直接输出目标检测结果,端到端的检测。

        YOLO算法,无需提取候选框,无复杂上下游处理工作,一次前向推断得到bbox定位及分类结果,端到端训练优化。YOLO V1目标检测框架:

        具体实现:

        预测阶段(前向推断)

        先把图片分成S*S(7*7)个grid cell(7*7的网格),每个grid cell 生成两个预测框,这两个预测框的中心点都落在所在的grid cell 里面,预测框包含(x,y,h,w)四个定位坐标(就是中心点的坐标)和框的宽和高,有这四个就可以确定框的位置。以及包含它是不是一个物体的置信度,在图上置信度用线的粗细来表示,粗的置信度比较高,细的置信度比较低。

        每一个grid cell 还能生成所有类别的条件概率。意思就是假设它已经包含物体的情况下,它是某一个类别的概率(下面彩色的图)。把每一个bounding box 的置信度 * 类别的条件概率,就能获得每一个bounding box 的个类别的概率。下图:

        每一个grid cell 只能有一个代表类别,进而说明每一个grid cell只能预测一个物体。颜色代表类别,粗细代表每个bounding box 的置信度,然后就形成中间这个结果。总共98个bounding box,每个bounding box都有置信度和最高概率对应的类别。然后再把中间这个图进行一系列后处理(去掉重复的框等),就获得了最终的目标检测结果。如下图所示:

预测阶段 后处理(把7*7*30的张量变成最后的结果)

置信度过滤NMS、非极大值抑制

        先拿第一个和第二个比较,如果它俩的iou大于某一个阈值,会认为它们重复识别了一个物体,就把低置信度的(低概率的过滤掉)。如:黄框和绿框的交并比大于0.5,就认为它俩重复识别一个物体,就把低概率的去掉,0.5的阈值可以调,如果这一阈值比较低的话,比如0.1,那么稍微和黄框有一点重叠的就会被去掉;而如果阈值设置得很高,那需要有很高的重叠才可能被去掉。

        如上图,蓝色的和黄色的交并比没有超过0.5,就被保留。依次往后类推,每一个和第一个类比,直至全部比完,第一个最高的任务完成。随后因为第二个被去掉,再拿第三个和后面每一个进行对比。重复上述操作。这就是NMS的流程,这只是对狗这一个类别进行的,对每个类别都要进行该操作。就可以获得最终的目标检测结果。有几个类别,就进行几次NMS。

训练阶段(反向传播)最重点

损失函数:

  YOLO V1 和 Fast R-CNN 对比:

2、YOLO V2

        V2 版本舍弃了Dropout,卷积后全部加入 Batch Normalization;网络的每一层的输入都做了归一化,收敛相对更容易;经过 Batch Normalization 处理后的网络会提升 2% 的 mAP。

        YOLO V2 更大的分辨率。V1 训练时用的是224*224,测试时使用448*448;可能导致模型水土不服,V2 训练时额外又进行了 10 次 448*448 的微调;使用高分辨率分类器后,YOLO V2 的 mAP 提升了约 4%。

        YOLO V2 没有了全连接层,做了5次降采样(224→112,112→56,56→28,28→14,14→7) DarkNet,实际输入为 416*416,输出得到 13*13 的网格。

        Batch Normalization

        感受野:概述来说就是特征图上的点能看到原始图像多大区域。

        最后一层时感受野太大了,小目标可能丢失了,需融合之前的特征。

        损失函数:

Multi-scaletraining:

隔一段时间就要把不同图像的尺度进行输入。

Faster

        YOLOv2采用了一种称为Darknet-19的卷积神经网络作为基础网络架构。这个网络由19层卷积层和5层最大池化层组成,它同时负责提取图像特征和进行目标检测。通过在网络结构上的改进,YOLOv2提高了在小目标上的检测性能,并减少了网络中的参数数量。

此外,YOLOv2还引入了一些新的技术来提升检测的准确性。其中包括:

  1. 多尺度训练:YOLOv2在训练过程中使用了不同尺度的图像,这有助于提升对不同大小目标的检测能力。

  2. Anchor Boxes:YOLOv2引入了锚框机制,将目标检测任务转化为预测锚框的位置和类别。这使得YOLOv2能够更好地适应不同形状和尺寸的目标。

  3. Darknet-19网络的修改:YOLOv2对Darknet-19网络进行了调整,得到了更高的特征提取能力和更好的感受野。

  4. Batch Normalization:YOLOv2使用批归一化技术,加速了收敛速度,提高了模型准确性。

        YOLO9000是一个变种,它是YOLOv2和YOLOv3之间的中间版本。YOLO9000在YOLOv2的基础上引入了一些改进,主要包括两个方面的更新。

        首先,YOLO9000引入了WordTree来处理大量类别的目标检测问题。传统的目标检测算法通常只能处理几十个类别,而YOLO9000可以同时处理数千个类别。WordTree是一种层次结构的标签关系图,将类别分解为更小的子类别,这样可以更有效地进行目标检测。通过这种层次化的分类方式,YOLO9000可以处理大规模的目标检测任务,并且在识别新类别时具有较好的通用性。

        其次,YOLO9000采用了联合训练的策略,同时使用了自身数据集和ImageNet数据集进行训练。在YOLOv2中,使用了Darknet-19网络进行目标检测,而YOLO9000则使用了Darknet-53网络,增加了更深的网络层次,提升了检测精度和性能。

        YOLO9000的主要优势在于速度和准确性的平衡。它以实时性著称,相对于其他目标检测算法,YOLO9000可以在较快的速度下进行准确的目标检测。然而,与YOLOv3相比,YOLO9000在准确性方面稍逊一筹。

3、YOLO V3

        最大的改进就是网络结构,使其更适合小目标检测;特征做得更细致,融入多持续特征图信息来预测不同规格物体;先验框更丰富了,3 种 scale,每种 3 个规格,一共 9 种;softmax 改进,预测多标签任务。

        多scale 基本框架,输入416*416*3的图像,输出三个尺度,不同尺度预测不同尺度的物体。

        分别对应13*13的grid cell,每个grid cell三个anchor。13*13的下采样32倍,对应原图像上的感受野是32*32,就是每一个grid cell代表原图像32*32的区域。13*13负责预测大物体;

        26*26的grid cell,每个grid cell三个anchor。26*26的下采样16倍,对应原图像上的感受野是16*16。26*26的中等感受野负责预测中等大小的物体;

        52*52的grid cell,每个grid cell三个anchor。52*52的下采样8倍,对应原图像上的感受野是8*8。52*52小感受野对应预测小物体。

        残差连接 - 为了更好的特征:从今天的角度来看,基本所有的网络架构都用上了残差连接的方法;V3 中也用了 resnet 的思想,堆叠更多的层来进行特征提取。

        Darknet53主干网络(没有池化和全连接层,全部卷积)如下图所示:

        核心网络架构:

损失函数:

 小目标 / 密集目标改进:

        1.grid cell 个数增加(兼容任意图片大小输入);

        2.Anchor。预先设置了一些小的anchor,对于小目标,先预设一些固定长宽比的anchor。

        3.多尺度预测(FPN);

        4.损失函数 惩罚小框项;

        5.网络结构(骨干网络 跨层连接)

4、YOLO v4

GIOU 与 IOU 区别

        GIOU(Generalized Intersection over Union)与IOU(Intersection over Union)是用于测量目标检测中边界框相似性的两种度量方法。它们的区别在于考虑了不同方面的相似性。

        IOU 是通过计算两个边界框的交集面积除以它们的并集面积来度量相似性。然而,IOU 没有考虑到边界框之间的排布和形状等因素,可能在一些情况下得到不准确的结果。

        GIOU 引入了额外的信息来改进 IOU 的缺点。具体而言,GIOU考虑了边界框之间的排布和形状,并考虑了边界框的最小闭合区域,从而更准确地度量了相似性。它将边界框之间的距离也考虑在内,可以更好地表示物体之间的重叠程度。

        因此,相对于 IOU,GIOU 在一些情况下可以提供更准确的相似性度量,尤其在处理物体形状变化、大小变化或者物体之间有遮挡等情况下效果更好。

        上面公式的意思是:先计算两个框的最小闭包区域面积 [公式] (通俗理解:同时包含了预测框和真实框的最小框的面积),再计算出 IOU,再计算闭包区域中不属于两个框的区域占闭包区域的比重,最后用 IOU 减去这个比重得到 GIOU。Ac 就是下图中虚线的框:

 DIOU

优点:

        1、与 GIOU loss,DIOU loss([公式])在与目标框不重叠时,仍然可以为边界框提供移动方向。

        2、DIOU loss 可以直接最小化两个目标框的距离,因此比 GIOU loss 收敛快得多。

        3、对于包含两个框在水平方向和垂直方向上这种情况,DIOU 损失可以使回归非常快,而GIOU  损失几乎退化为 IOU 损失。

        4、DIOU 还可以替换普通的 IOU 评价策略,应用于 NMS 中,使得 NMS 得到的结果更加合理和有效。

NMS

        NMS(Non-Maximum Suppression)是一种常用的目标检测算法中的后处理技术。它用于在多个候选框(bounding box)中选择最具代表性的目标框,以避免重复检测或者多次计数同一目标。

        在目标检测任务中,通常会生成一系列候选框,这些候选框可能存在大量的重叠,即多个候选框都包含同一个目标。为了准确计算每个目标的位置和类别,需要去除冗余的候选框。

NMS 的工作原理如下

  1. 对所有的候选框按照预测得分进行排序,得分高的排在前面。
  2. 选择得分最高的候选框,将其作为最终输出的一个目标框,并将该候选框从候选框列表中移除。
  3. 计算其他剩余候选框与已选择的目标框的重叠程度(例如,使用IOU),若重叠程度高于设定的阈值,则将该候选框从列表中移除。
  4. 重复步骤2和步骤3,直到所有候选框都被处理完毕。

        NMS 通过比较候选框的得分和重叠程度,保留得分最高且与其他候选框重叠度较低的框,从而实现目标检测结果的筛选和去重。

Soft - NMS(YOLO v4 没有用这个方法)

        核心就是降低置信度,比如一张人脸上有 3 个重叠的 bounding box,置信度分别为 0.9, 0.7, 0.85。选择得分最高的建议框,经过第一次处理过后, 得分变成了0.9, 065, 0.55 (此时将得分最高的保存)。这时候再选择第二个 bounding box 作为得分最高的,处理后置信度分别为 0.65, 0.45 (这时候 3 个框也都还在),最后选择第三个,处理后得分不改变。最终经过 soft- nms 抑制后的三个框的置信度分别为 0.9, 0.65, 0.45。最后设置阈值,将得分 si 小于阈值的去掉。

CIOU(Complete-IOU)

        在 bbox 回归三要素中的长宽比还没被考虑到计算中,因此,进一步在 DIOU 的基础上提出了CIOU。其惩罚项如下面公式:

ASPP

        ASPP(Atrous Spatial Pyramid Pooling)是用于图像语义分割的一种特征提取模块。语义分割是指将图像中的每个像素分配到其语义类别的任务,它需要深度特征表示,以便捕获对象的语义信息。ASPP 结构图如下:

        ASPP 通过使用不同采样率的空洞卷积(dilated convolution)来捕捉不同尺度下的特征信息,提高了特征的感受野并增加了网络的感受视野,使得网络能够更好地处理不同尺度的物体。同时,ASPP 还通过空间金字塔池化(spatial pyramid pooling)来提取图像中多个尺度的全局信息,从而得到更全面的特征表示。

        ASPP 的主要结构包括一个输入层、4个并行的空洞卷积层和一个金字塔池化层,其中每个空洞卷积层都有不同的空洞率,以获取多尺度特征信息。在金字塔池化层中,输入特征图被划分为不同大小的区域,并且对于每个区域进行一个 max-pooling 操作,以捕获不同尺度的全局特征信息。

空洞卷积

        也称为扩张卷积或膨胀卷积,是一种在传统卷积操作中引入空洞或间隔的技术,用于扩大感受野并捕捉更广泛的上下文信息。

        在传统的卷积操作中,卷积核在输入特征图上滑动进行卷积计算,每个位置的感受野即为卷积核的大小。而空洞卷积通过在卷积核的周围引入间隔(通常为1)就是在标准的卷积中注入空洞,使得卷积核在输入特征图上以指定的间隔进行卷积计算。这样做的效果是,在不增加卷积核参数量的情况下,有效地增加了卷积核的感受野。

        具体地说,空洞卷积通过在卷积核的索引位置之间引入0值来实现感受野的扩展。这使得卷积核能够跳过一些像素位置,从而在保留原始分辨率的同时,获取更远处的上下文信息。同时,空洞卷积还可以通过调整间隔的大小来控制感受野的范围,进一步适应不同尺度的特征提取需求。

        空洞卷积在深度学习中的应用非常广泛,特别是在图像处理领域。它可以帮助模型捕获更大范围的上下文信息,提高特征的表示能力和语义理解能力。空洞卷积被广泛应用于各种任务,例如图像分割、目标检测、人体姿态估计等。

SAM

         "Spatial Attention Module",即空间注意力模块。它是一种用于计算机视觉任务中的注意力机制,主要用于增强模型对输入图像中不同区域的关注和重要性

        在图像处理中,SAM 通过引入空间注意力机制来捕捉输入特征图中不同位置的相关性和依赖关系。它能够在不同尺度上自适应地调整特征图的权重,将更多的注意力放在重要的区域上,同时减弱对无关区域的关注。

        SAM 的核心思想是通过学习得到一个权重矩阵,该矩阵表示了特征图的不同位置与其他位置之间的关联度。权重矩阵可以通过一些方法获得,比如基于卷积操作或非线性变换。然后,将权重矩阵与输入特征图进行相乘,得到加权后的特征表示,以此来实现对特定区域的加强或抑制

        SAM 可以帮助模型在图像处理任务中更好地关注和利用重要的图像区域,提高模型的性能和鲁棒性。它在很多任务中都得到了广泛应用,如目标检测、图像分割、图像生成等。通过引入空间注意力机制,SAM 能够提供更准确、更具区分性的特征表示,从而有助于提升模型在复杂场景下的表现能力。

Mish(非线性激活函数)

为什么 Mish 表现那么好?

        1、以上无边界(即正值可以达到任何高度)避免了由于封顶而导致的饱和。理论上对负值的轻微允许,允许更好的梯度流,而不是像 ReLU 中那样的硬零边界。

        2、最后,可能也是最重要的,目前的想法是,平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化。

        通过Mish激活曲线平滑性来推送信息的能力如下图所示,在该测试中,越来越多的层被添加到一个测试神经网络中,而没有一个统一的函数。随着层深的增加,ReLU 精度迅速下降,其次是 Swish。相比之下,Mish 能更好的保持准确性,这可能是它能更好地传播信息:

Mish 总结

        ReLU 有一些已知的弱点,但是通常它执行起来很轻,并且在计算上很轻。Mish 具有较强的理论渊源,在测试中,就训练稳定性和准确性而言, Mish 的平均性能优于 ReLU。

        复杂度只稍微增加了一点 V100 GPU 和 Mish,相对于 ReLU,每 epoch 增加大约1秒,考虑到训练稳定性的提高和最终精度的提高,稍微增加一点时间似乎是值得的。

        最终,在今年测试了大量新的激活函数后,Mish 在这方面处于领先地位,我怀疑它很有可能成为 AI 未来的新 ReLU。

BoF 、BoS

        BOF 和 BOS 是两种特征池化操作,常用于图像处理和计算机视觉任务中。

        BOF 全称为 Bag-of-Features,是一种基于局部特征的图像表示方法,广泛应用于图像分类、目标检测等任务中。BOF 将图像中的每个局部区域提取出来,并将其表示为一个特征描述符,然后通过对这些特征描述符进行聚合来获取整个图像的表示。常用的聚合操作有加权直方图表示、词袋模型、VLAD 等。BOF 常用于传统的图像特征提取和识别方法中,如SIFT、SURF等。

        BOS 全称为 Bag-of-Subregions,也是一种图像表示方法,与 BOF 类似,不同之处在于BOS 会对图像进行分割,然后对分割后的子区域进行特征提取和聚合。具体地,BOS 对图像进行多尺度划分,然后提取每个子区域的特征描述符,最后对所有子区域的描述符进行聚合,得到图像的整体表示。BOS 通常用于卷积神经网络中的特征提取和图像分类等任务中,也可以用于图像检索和目标识别等领域。

        总之,BOF 和 BOS 都是常用的特征池化方法,用于将局部特征聚合成整体的图像表示。它们在不同的场景下有着广泛的应用,能够有效地提高计算机视觉任务的性能和速度。

PAN

        FPN(feature pyramid networks)。原来多数的 object detection 算法都是只采用顶层特征做预测,但我们知道低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。另外虽然也有些算法采用多尺度特征融合的方式,但是一般是采用融合后的特征做预测,而不一样的地方在于预测是在不同特征层独立进行的。

主要分为3个模块的改进:

        1、改进的FPN:Bottom-up Path Augmentation

        2、改进之前的pool策略:Adaptive Feature Pooling

        3、改进mask分支:Fully-connected Fusion

Bottom-up Path Augmentation

        FPN 已经证明了加入一条 top-down 的旁路连接,能给 feature 增加 high-level 的语义性有利于分类。
        但是 low-level 的 feature 是很利于定位用的,虽然 FPN 中 P5 也间接得有了 low-level 的特征,但是信息流动路线太长了如红色虚线所示(其中有 ResNet50/101 很多卷积层),本文在 FPN 的 P2-P5 又加了 low-level 的特征,最底层的特征流动到 N2-N5 只需要经过很少的层如绿色需要所示(仅仅有几个降维的卷积)
        具体操作如下图所示,P2 直接 copy 到 N2,然后 N2 通过步长为 2 的 3*3 卷积后分辨率缩小 2倍,和 P3 尺寸一致,然后 element-wise 相加。注:所有 channel 和 FPN 中一致 P2-P5, N2-N5 都是256。

        构建该新支路的优势在于缩短了底层尺寸大的特征到高层尺寸小的特征之间的距离,让特征融合更加有效。其变化可以参考网络结构图中红色(原 FPN 特征融合路径)和绿色( PANet 特征融合路径)虚线。绿色虚线所跨越的卷积层会更少。

Adaptive Feature Pooling

        文章作者认为高低层特征各有优势。高层特征的视野域更大,小的 Rol 可以在这些特征上获取更丰富的上下文信息。低层特征可以帮助大的 proposal 更好地定位。这里提出的池化方法则是在所有尺度的特征上操作,之后进行融合,如下图所示:

Fully-connected Fusion

        Mask RCNN 中 Mask 分支就是个简版的 fcn, fcn  是全卷积网络,它根据一个局部的视野域来预测,且参数是全图共享,而全连接 fc 是全图视野域对位置更敏感,看得更大,这一点 sunjian老师的 large kernel 也间接证明了大视野域的作用。因此本文打算多加一条用全连接层预测的支路来做 mask 预测,然后和 fcn 融合,具体做法如下图所示,至于 conv4_ fc 接在 fcn 支路哪一个卷积后后面消融实验有做对比,conv3 后面结果更好一点。

CSPDarknet53

        CSPNet全称是Cross Stage Partial Network ,主要从一个比较特殊的角度切入,能够在降低20%计算量的情况下保持甚至提高CNN的能力。

        CSPNet 提出主要是为了解决三个问题:

        1、增强 CNN 的学习能力,能够在轻量化的同时保持准确性。

        2、降低计算瓶颈。

        3、降低内存成本。

Cross-lteration Batch Normalization (CBN)

        当 batch 很小的时候,BN 的一个众所周知的问题就是它的有效性大大降低。这是因为小批量包含很少的样本,在训练迭代期间,无法从中可靠地估计定义规范化的统计信息。为了解决这个问题,我们提出了交叉迭代批处理规范化(CBN),其中联合使用来自多个最近迭代的示例来提高估计质量。然而计算多个迭代的统计信息的一个挑战是,由于网络权值的变化,不同迭代的网络激活是不可比较的。因此,我们提出了一种基于泰勒多项式的方法来补偿网络权值的变化,从而可以准确地估计统计量,并有效地应用批处理规范化。在小批量的目标检测和图像分类中,CBN 的性能优于原始的批量规范化和直接计算统计信息。

        Cross-lteration Batch Normalization (CBN) 的动机是观察到由于随机梯度下降(SGD) 的迭代性质,网络权值在连续训练迭代之间逐渐变化,而不是突然变化。因此,针对当前网络权重,最近迭代的样本的均值和方差可以通过一个低阶泰勒多项式很好地逼近。将最近多次迭代的补偿均值和方差与当前迭代的均值和方差进行平均,以产生更好的统计估计。

参考文献:

1、YOLOV3-DarkNet代码复现_哔哩哔哩_bilibili

2、23:YOLOv4_BOS_SAM_PAN_CSP_CmBN_ev_哔哩哔哩_bilibili

需要学习ubuntu系统上YOLOv4的同学请前往:《YOLOv4目标检测实战:原理与源码解析》 【为什么要学习这门课】 Linux创始人Linus Torvalds有一句名言:Talk is cheap. Show me the code. 冗谈不够,放码过来! 代码阅读是从基础到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。YOLOv4是最近推出的基于深度学习的端到端实时目标检测方法。YOLOv4的实现darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。【课程内容与收获】 本课程将解析YOLOv4的实现原理和源码,具体内容包括:- YOLOv4目标检测原理- 神经网络及darknet的C语言实现,尤其是反向传播的梯度求解和误差计算- 代码阅读工具及方法- 深度学习计算的利器:BLAS和GEMM- GPU的CUDA编程方法及在darknet的应用- YOLOv4的程序流程- YOLOv4各层及关键技术的源码解析本课程将提供注释后的darknet的源码程序文件。【相关课程】 除本课程《Windows版YOLOv4目标检测:原理与源码解析》外,本人推出了有关YOLOv4目标检测的系列课程,包括:《Windows版YOLOv4目标检测实战:训练自己的数据集》《Windows版YOLOv4-Tiny目标检测实战:训练自己的数据集》《Windows版YOLOv4目标检测实战:人脸口罩佩戴检测》《Windows版YOLOv4目标检测实战:中国交通标志识别》建议先学习一门YOLOv4实战课程,对YOLOv4的使用方法了解以后再学习本课程。【YOLOv4网络模型架构图】 下图由白勇老师绘制  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值