美文网首页嵌牛IT观察
计算机视觉——典型的目标检测算法(YOLOv1算法)(七)

计算机视觉——典型的目标检测算法(YOLOv1算法)(七)

作者: 茶新味 | 来源:发表于2022-03-20 10:34 被阅读0次

    姓名:贾轶名    学号:21011210011     学院:通信工程学院

    【嵌牛导读】目标检测在现实中的应用很广泛,我们需要检测数字图像中的物体位置以及类别,它需要我们构建一个模型,模型的输入一张图片,模型的输出需要圈出图片中所有物体的位置以及物体所属的类别。在深度学习浪潮到来之前,目标检测精度的进步十分缓慢,靠传统依靠手工特征的方法来提高精度已是相当困难的事。而ImageNet分类大赛出现的卷积神经网络(CNN)——AlexNet所展现的强大性能,吸引着学者们将CNN迁移到了其他的任务,这也包括着目标检测任务,近年来,出现了很多目标检测算法。

    【嵌牛鼻子】计算机视觉

    【嵌牛提问】如何理解目标检测算法——YOLOv1

    【嵌牛正文】

    原文链接:https://blog.csdn.net/qq_29893385/article/details/81177912

    1、YOLOv1基本思想

    YOLO的核心思想就是将目标边框定位问题转化为回归问题,利用整张图作为网络输入,直接在输出层回归bounding box (边界框)的位置和bounding box 所属的类别。YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体。

    简单说一下YOLOv1的检测步骤:

    (1) 给个一个输入图像,首先将图像划分成7 * 7的网格。

    (2) 对于每个网格,每个网格预测2个bouding box(每个box包含5个预测量)以及20个类别概率,总共输出7×7×(2*5+20)=1470个tensor

    (3) 根据上一步可以预测出7 * 7 * 2 = 98个目标窗口,然后根据阈值去除可能性比较低的目标窗口,再由NMS去除冗余窗口即可。

    总结:YOLO的CNN网络将输入的图片分割成的网格,每个单元格会预测 B个边界框(bounding box)、边界框的置信度(confidence score)以及C个类别概率值,最终预测值为大小的张量。bbox信息(x,y,w,h)为物体的中心位置相对格子位置的偏移及宽度和高度,均被归一化.置信度反映是否包含物体以及包含物体情况下位置的准确性,定义为Pr(Object)×IOU    ,其中Pr(Object)∈{0,1}.

    2.YOLOv1网络结构

    YOLOv1网络借鉴了GoogLeNet分类网络结构,包含24个卷积层和2个全连接层。不同的是,YOLO未使用inception module,而是使用1x1卷积层(此处1x1卷积层的存在是为了跨通道信息整合)+3x3卷积层简单替代。

    YOLOv1网络在最后使用全连接层进行类别输出,因此全连接层的输出维度是 S×S×(B×5+C)S×S×(B×5+C)。

    YOLOv1网络比VGG16快(浮点数少于VGG的1/3),准确率稍差。

    缺馅:

    输入尺寸固定:由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。其它分辨率需要缩放成该分辨率.

    占比较小的目标检测效果不好.虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。

    3.YOLOv1损失函数

    YOLO全部使用了均方和误差作为loss函数.由三部分组成:坐标误差、IOU误差和分类误差。

    简单相加时还要考虑每种loss的贡献率,YOLO给coordErr设置权重λcoord=5λcoord=5.在计算IOU误差时,包含物体的格子与不包含物体的格子,二者的IOU误差对网络loss的贡献值是不同的。若采用相同的权值,那么不包含物体的格子的confidence值近似为0,变相放大了包含物体的格子的confidence误差在计算网络参数梯度时的影响。为解决这个问题,YOLO 使用λnoobj=0.5 λnoobj=0.5修正iouErr。(此处的‘包含’是指存在一个物体,它的中心坐标落入到格子内)。对于相等的误差值,大物体误差对检测的影响应小于小物体误差对检测的影响。这是因为,相同的位置偏差占大物体的比例远小于同等偏差占小物体的比例。YOLO将物体大小的信息项(w和h)进行求平方根来改进这个问题,但并不能完全解决这个问题。

    综上,YOLO在训练过程中Loss计算如下式所示:

    其中有宝盖帽子符号(x^,y^,w^,h^,C^,p^x^,y^,w^,h^,C^,p^)为预测值,无帽子的为训练标记值。1objij1ijobj表示物体落入格子i的第j个bbox内.如果某个单元格中没有目标,则不对分类误差进行反向传播;B个bbox中与GT具有最高IoU的一个进行坐标误差的反向传播,其余不进行.

    4.训练过程

    1)预训练。使用 ImageNet 1000 类数据训练YOLO网络的前20个卷积层+1个average池化层+1个全连接层。训练图像分辨率resize到224x224。

    2)用步骤1)得到的前20个卷积层网络参数来初始化YOLO模型前20个卷积层的网络参数,然后用 VOC 20 类标注数据进行YOLO模型训练。检测通常需要有细密纹理的视觉信息,所以为提高图像精度,在训练检测模型时,将输入图像分辨率从224 × 224 resize到448x448。

    训练时B个bbox的ground truth设置成一样的.

    5.YOLOv1优缺点

    最后有必要总结一下YOLO的优缺点。首先是优点,YOLO采用一个CNN网络来实现检测,是单管道策略,其训练与预测都是end-to-end,所以YOLO算法比较简洁且速度快(这是最大的优点)。第二点由于YOLO是对整张图片做卷积,所以其在检测目标有更大的视野,它不容易对背景误判。另外,YOLO的泛化能力强,在做迁移时,模型鲁棒性高。

    最后不得不谈一下YOLO的缺点,首先YOLO各个单元格仅仅预测两个边界框,而且属于一个类别。对于小物体,YOLO的表现会不如人意。另外YOLO对于在物体的宽高比方面泛化率低,就是无法定位不寻常比例的物体。当然YOLO的定位不准确也是很大的问题。

    相关文章

      网友评论

        本文标题:计算机视觉——典型的目标检测算法(YOLOv1算法)(七)

        本文链接:https://www.haomeiwen.com/subject/svpodrtx.html