YOLO系列目标检测算法目录 - 文章链接
本文总结:
深度学习知识点总结
专栏链接:
https://blog.csdn.net/qq_39707285/article/details/124005405
此专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。
2015.6.8 YOLOv1:《You Only Look Once: Unified, Real-Time Object Detection》
YOLO——是一阶段目标检测的开端。之前的目标检测算法通常是调整分类器的用途以用作目标检测,例如像deformable parts model(DPM)这样的系统使用滑动窗口方法,分类器在整个图像上各个位置运行。R-CNN使用区域候选的方法,首先在图像中生成潜在的边界框,然后对这些候选框进行分类,分类后,使用后处理用于细化边界框,消除重复检测框,并基于场景中的其他目标重新扫描框。这些复杂的算法很慢,很难优化,因为每个单独的组件都必须单独训练。
本文将目标检测重新定义为一个单一的回归问题,直接从图像像素预测边界框坐标和类别概率。使用该系统,只需看一次图像(YOLO)即可预测存在的目标及其位置。
YOLO对完整图像进行训练,并直接优化检测性能。单个卷积网络同时预测多个边界框和这些框的类概率,与传统的目标检测方法相比,这种一体化模型有几个优点:
YOLO在精确度方面仍然落后于最先进的检测系统。虽然它可以快速识别图像中的对象,但它很难精确定位某些对象,尤其是小对象。
YOLO联合所有的组件到一个神经网络中。网络使用整个图片的特征去预测每一个目标框,同时预测每个框的类别。YOLO的设计能确保端到端的训练和实时的预测速度,同时保证高的精度。
YOLO把输入的图片划分成S×S的网格,如果目标的中心落在某个网格单元中,则该网格单元负责去预测该目标。
每一个网格单元预测B个框和这些框置信度分数。这些置信度分数反映了模型对预测框包含目标的信心以及它认为框预测的准确性。定义置信度为 Pr(Object)*IOU^{truth}_{pred}。如果没有目标落入网格单元,则置信度分数应为0,否则值为预测的框与GT框的IOU。
每一个预测框有5个预测值:x,y,w,h和置信度。(x,y)表示框相对于网格单元边界的中心,(w,h)表示相对于整个图片的宽和高,最后置信度表示预测框和GT框的IOU。每一个网格单元同时预测C个类别的概率Pr(Class_i|Object)。这些概率取决于包含目标的网格单元,每个网格单元仅预测一组类别概率,与方框B的数量无关。
在测试时,将条件类别概率和单个框置信度值相乘,
P r ( C l a s s i ∣ O b j e c t ) ∗ P r ( O b j e c t ) ∗ I O U p r e d t r u t h = P r ( C l a s s i ) ∗ I O U p r e d t r u t h Pr(Class_i|Object)*Pr(Object)*IOU^{truth}_{pred}=Pr(Class_i)*IOU^{truth}_{pred} Pr(Classi∣Object)∗Pr(Object)∗IOUpredtruth=Pr(Classi)∗IOUpredtruth
这给了每个预测框的特定类别的置信度得分,这些分数编码了该类出现在框中的概率以及预测框与GT目标的匹配程度。
对于VOC数据集,使用S=7,B=2,VOC数据集包含20个类别,所以YOLO最终预测7×7×(2×5+20)=7×7×30个向量。
网络结构包含24层卷积层和2个全连接层,在3×3卷积后使用1×1卷积,整体网络结构图如图3所示。
另外还设计了一个Fast YOLO,用于突破目标检测速度的界限,Fast YOLO使用9层卷积层和每层使用较少的卷积核数,其他与YOLO完全一致。
在ImageNet-1000分类数据集上预训练模型,预训练时使用图3结构中的前20层,再加上一个全局池化层,和一个全连接层。
然后转换模型用于检测训练,去除分类训练时添加的层,添加4个卷积层和2个全连接层,因为检测需要更细粒度的特征,所以改变输入图片大小从224×224到448×448。
最后一层预测类别概率和框坐标,使用图片的宽和高归一化预测框的宽和高,使其取值范围在[0,1]。将边界框x和y坐标参数化为特定网格单元位置的偏移量,以便它们也在0和1之间。
对最后一层使用线性激活函数,其他所有层使用以下leaky非线性激活函数:
ϕ ( x ) = { x , if x > 0 0.1 x , otherwise \phi(x)= \begin{cases} x, & \text{if $x>0$} \\ 0.1x, & \text{otherwise} \end{cases} ϕ(x)={x,0.1x,if x>0otherwise
使用误差平方和优化模型,之所以使用平方和是因为它很容易优化,但它与最大化平均精度的目标并不完全一致。它将定位误差和分类误差同等权重,会导致分类误差可能并不理想。此外,在每个图像中,许多网格单元不包含任何目标,这会将这些单元格的“置信度”分数推向零,通常会压倒包含目标的单元格的梯度。这可能导致模型不稳定,导致训练过早偏离。
为了解决这个问题,增加了边界框坐标预测的损失,并减少了不包含目标框的置信预测的损失。使用两个参数 λ c o o r d \lambda_{coord} λcoord和 λ n o o b j \lambda_{noobj} λnoobj,并设置 λ c o o r d = 5 \lambda_{coord}=5 λcoord=5和 λ n o o b j = 0.5 \lambda _{noobj}=0.5 λnoobj=0.5。
平方和误差也同样区别对待了大框和小框中的误差,从平方和计算方式可以看出,大框中的小偏差比小框中的重要。为了解决这个问题,预测边界框宽度和高度使用它们的平方根,而不是直接预测宽度和高度。
每个网格单元会预测多个边界框,在训练时,对于每个目标只需要一个边界框预测器来负责,计算预测的边界框与GT的IOU,取最大的那个作为预测器,这会导致边界框预测器之间的专门化,每个预测器都能更好地预测物体的尺寸、纵横比或类别,从而提高整体召回能力。
训练过程中的损失函数如下:
注意,如果网格单元中存在目标,损失函数只惩罚分类错误的。如果该预测框为“负责”GT目标的,它也只惩罚边界框坐标错误,其他预测的框不参与loss计算。
就像在训练中一样,预测测试图像的检测框只需要一次网络评估,例如对于VOC数据集,每张图片只需要预测98个框。
网格设计加强了边界框预测中的空间多样性。通常很清楚一个目标属于哪个网格单元,网络只为每个目标预测一个框。然而,一些大型目标或多个单元格边界附近的目标可以通过多个单元格很好地定位,NMS可用于修复这些重复检测框。虽然与R-CNN或DPM一样,NMS对性能并不重要,但会增加2-3%的mAP。
YOLO对边界框预测施加了很强的空间限制,因为每个网格单元只能预测两个框,并且只能有一个类。这种空间限制限制了模型可以预测的附近目标的数量,很难处理成群出现的小目标对象,例如成群的鸟。
由于YOLO从数据中学习预测边界框,因此它很难推广到具有新的或不寻常的纵横比或配置的目标。YOLO模型还使用相对粗糙的特征来预测边界框,因为YOLO的体系结构包含多个下采样层。
最后,当训练接近检测性能的,此时YOLO的损失函数对小边界框和大边界框中的错误处理相同。大框中的小错误通常是良性的,但小框中的小错对IOU的影响更大,主要错误来源是不正确的定位。
本文介绍了一种用于目标检测的统一的模型——YOLO,机构简单,直接端到端训练。Fast YOLO是目前速度最快的通用目标检测器,YOLO还可以很好地推广到新的领域,使其成为依赖快速、优秀目标检测的应用程序的理想选择。