YOLO V1详解

1.网络概述

        处理检测问题最直接的方法是使用不同尺度和形状的候选框在图像上密集采样,以此判断候选框是否包含目标,这种方法极为耗时。另一种方法是两阶段算法中采用的策略,先通过Selective Search等方法生成一系列候选框,然后使用分类器判断候选框是否包含目标,再对目标的位置进行精细修正。这种方法的优点是能够得到比较准确的目标位置,缺点仍然是消耗较多的计算时间。那么如何进一步降低算法耗时呢?一个比较便捷的方法是直接回归目标框的位置坐标和分类概率,把检测问题转化成回归问题,这也是YOLO算法的基本思路。YOLO另一个显著特点是将一整张图作为输入,每个回归的目标都基于整张图像的信息,因此YOLO能够利用更加全面的上下文信息。
        YOLO也有一些明显的局限性,其有一个默认的假设,认为图像中的目标都比较大,不存在密集小目标,因此需要根据实际的应用场景判断是否适合使用YOLO算法。

2.算法原理 

        YOLO算法通过一个S行×S列的均匀网格,将一张输入的图像均匀分成S×S个子图像块,如果目标的中心点落在某个子图像块内,就认为这个目标归属于这个子图像块,也可以说这个子图像块包含这个目标(其实是包含目标的中心)。在每一个子图像块中,会预测B个目标框的坐标以及这B个目标框框中目标的置信度,这个置信度反映的是当前预测框框中目标的概率以及预测框位置的准确程度。具体可以通过如下公式描述:

        

         如果当前预测框没有框中目标,则Pr(Object)=0;反之,如果当前预测框框中了目标,则Pr(Object)=1。是预测框和目标真值框的交并比,反映预测框和真值框的重合度。这里说明一下何为框中目标,如果一个目标的中心点没有落在当前子图像块内,则这个目标不属于当前子图像块,当前子图像块的预测框不会框中这个目标;如果一个目标的中心点落在当前子图像块中,就需要分别计算各个预测框与目标真值框的交并比,认为loU最大的预测框框中了目标,其他预测框没有框中目标,其实这个约定并不见得合理,仅是YOLO的一个策略。另外,如前所述,因为YOLO默认图像中的目标都比较大,以至于不会出现一个子图像块中有多个目标的情况,所以如果有多个非常小的目标的中心落在同一个子图像块内,算法就会出现问题,最终只有一个目标会被检测出来。
        对于每一个预测框,都需要回归框的中心点坐标(x,y)框的宽w和高h以及预测框的置信度。预测框的置信度如上所述,描述的是预测框框中目标的概率以及预测框与真值框的交并比,(x,y)是当前子图像块的相对坐标,坐标原点位于子图像块的左上角,且坐标值通过除以子图像块的宽、高,进行了归一化处理。w、h也是经过归一化处理的宽和高,是将预测框的宽和高,分别除以整幅图像的宽和高得到的。
        每个子图像块都会回归C个条件概率,用Pr(Class,|Object)表示,表示在框中目标的前提下,目标属于某个类别的概率。因为YOLO默认每个子图像块只包含一个目标,所以无论要预测多少个目标框,只需要回归一组条件概率。在测试的时候,由预测框的置信度和条件概率相乘得到最终的置信度,其中融合了位置和类别的信息,可以用下面的公式描述。

        如图所示,测试时将图像分成S×S个子图像块,总共回归S×Sx(B×5+C)个参数(5表示4个位置参数和1个置信度),基于回归的结果,分别计算每个框的Pr(Class,)×IoU 的值,当该值为所在子块中的最大值,且大于预设的检出國值时,输出对应的预测框。

  2.训练方法


       基于PASCAL VOC数据集,取S=7、B=2,则图像被划分成7×7个子图像块,每个子图像块需要预测2个目标框,这是因为PASCAL VOC数据集有20个类别,则最后需要回归的参数数量为7×7×[2x(4+1)+20]=7×7×30,其中7×7为子图像块的数量,2为每个子图像块需要预测的框的数量,4+1代表框的4个位置参数x、y、w、h,以及1个框的置信度,20表示20个类别的分类概率。
YOLO第一版的网络结构如图所示,借鉴了GoogleNet的结构,先通过24个卷积层提取特征,然后2层使用全连接层回归框的坐标、置信度以及分类概率,最后输出的参数共7×7×30维。因为网络最后2层是全连接层,所以要求整个网络具有固定尺度的输入。


        训练模型时,仍然采用基于ImageNet分类数据集进行预训练的方式。取上述网络的前20个卷积层,后面接一个全连接层训练分类模型。在这个过程中,用于分类模型训练的图像尺度为224×224。分类模型训练完成后,在20个预训练的卷积层之后加上4个新的卷积层和2个全连接层,构造YOLO网络,其中4个新的卷积层和2个新的全连接层的参数可以通过随机的方式进行初始化,为了使用更加精细的信息,YOLO第一版网络适配了全连接层的尺度,使得输入的图像尺度为448×448。
训练的损失函数L定义如下。

         YOLO第一版中有个并不合理的默认假设,就是一个子图像块中最多只能包含一个目标,因此YOLO第一版不适合小目标的检测场景。另外,YOLO第一版中约定了每个子图像块中与目标框IoU最大的预测框是框中目标的,其余的预测框认为未框中目标。式(10-3)中,是一个指示函数,当第i个子图像块的第j个预测框框中了目标时,=1,否则=0。因此式中

表示包含目标的框的位置损失和置信度损失如前所述,式中x、y和\hat{x},\hat{y}分别表示预测框和目标框的中心点相对于子图像块的归一化坐标,w、h和\hat{w},\hat{h}分别表示预测框和目标框相对于整幅图像的宽和高的归一化宽和高,这部分仅将框中目标的预测框的损失进行计算和梯度回传;表示未包含目标的预测框的置信度损失,因为没有目标,其框中目标的置信度\hat{C}_{i}的值为0;公式中表示包含目标的分类损失。式中的\lambda表示加权系数,用于平衡各部分损失的比例。
        为了防止模型过拟合(在训练集上模型的预测效果很好,在测试集上效果明显变差),YOLO第一版使用了dropout策略同时在图像尺度和图像HSV颜色空间上进行样本的扰动扩充,使得训练的模型具有更好的泛化能力。
        其实,YOLO第一版中的具体实现方法未必都很合理,比如一个子图像块的各个预测框都对应同一组分类概率的约定就有些问题,对于不同的预测框,完全可以让每个框对应各自的分类概率。另外,在计算损失的时候,也可以把同一子块中各个预测框与真值框的损失都进行统计并加入梯度回传,这样看起来会更合理一些。
        基于YOLO进行检测和其他检测方法类似,对7×7×2=98个预测框,分别计算框中目标的概率与最大分类概率的乘积,当其大于指定阔值时,将预测框作为目标框输出,再对所有的目标框进行非极大值抑制处理,得到最终的结果。
 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樱花的浪漫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值