yolo进化史:从yolov1到yolov5之yolov1

相关资源:
1,yolo进化史:从yolov1到yolov5之yolov2/yolo9000
2,yolo进化史:从yolov1到yolov5之yolov3

一,概述

自2016年yolov1问世以来,yolo系列算法在物体检测领域一直是sort级别的,它最大的创新点在于将物体检测的两个步骤(1,检测目标位置 2,对目标进行分类)融合到了一起,相比于R-CNN系列算法将上述1,2分开的two-stage算法,yolo进化成了one-stage算法。one-stage虽然精度比two-stage算法低,但是速度很快,以精度换取了速度,达到了工业级应用的需求,尤其yolov3以后,在精度和速度之间都达到了一定水准。这篇先看yolov1。

二,yolov1

1,算法特性

按照原论文中的内容,yolov1主要有3点特性:
a,Yolov1速度很快,因为使用回归的方法,而且不用非常复杂的框架。
b,Yolov1会基于整张图片信息进行预测,而其他滑窗式的检测框架,只能基于局部图片信息进行推理。
c,Yolov1学到的图片特征更为通用。作者尝试了用自然图片数据集进行训练,用艺术画作品进行预测,Yolo的检测效果更佳。

2,网络backbone,

yolov1的backbone为VGG16,如下为网络结构图
在这里插入图片描述
输入图像大小为448 * 448,经过若干个卷积层与池化层,变为7 * 7 * 1024张量(上图中倒数第三个立方体),最后经过两层全连接层,输出张量维度为7 * 7 * 30,这就是Yolo v1的整个神经网络结构,和一般的卷积物体分类网络没有太多区别,最大的不同就是:分类网络最后的全连接层,一般连接于一个一维向量,向量的不同位代表不同类别,而这里的输出向量是一个三维的张量(7 * 7 * 30)。本质上来说没有什么特别,没有使用BN层,用了一层Dropout。除了最后一层的输出使用了线性激活函数,其他层全部使用Leaky Relu激活函数。网络结构没有特别的东西,不再赘述。

3,网络输出7 * 7 * 30的含义,

3.1,7 * 7的含义

7 * 7是指图片被分成了7 * 7个格子,如下所示:
在这里插入图片描述
在Yolo中,如果一个物体的中心点,落在了某个格子中,那么这个格子将负责预测这个物体。这句话怎么理解,用上图举例,设左下角格子假设坐标为 [1,1],小狗所在的最小包围矩形框的中心,落在了 [2,3] 这个格子中。那么7 * 7个格子中,[2,3] 这个格子负责预测小狗,而那些没有物体中心点落进来的格子,则不负责预测任何物体。这个设定就好比该网络在一开始,就将整个图片上的预测任务进行了分工,一共设定7 * 7个按照方阵列队的检测人员,每个人员负责检测一个物体,大家的分工界线,就是看被检测物体的中心点落在谁的格子里。当然,是7 * 7还是9 * 9,是上图中的参数S,可以自己修改,精度和性能会随之有些变化。

3.2 30的含义

刚才设定了49个检测人员,那么每个人员负责检测的内容,就是这里的30(注意,30是张量最后一维的长度)。在Yolo v1论文中,30是由 (4 + 1) * 2 + 20得到的。其中4+1是矩形框的中心点坐标 [x,y] ,宽高 [w,h] 以及是否属于被检测物体的置信度 c;2的意思是一个格子共回归两个矩形框,每个矩形框分别产生5个预测值(x,y,w,h,c);20代表预测20个类别。这里有几点需要注意:1. 每个方格(grid) 产生2个预测框,2也是参数,可以调,但是一旦设定为2以后,那么每个方格只产生两个矩形框,最后选定置信度更大的矩形框作为输出,也就是最终每个方格只输出一个预测矩形框。2. 每个方格只能预测一个物体。虽然可以通过调整参数,产生不同的矩形框,但这只能提高矩形框的精度。所以当有很多个物体的中心点落在了同一个格子里,该格子只能预测一个物体。也就是格子数为7*7时,该网络最多预测49个物体。在强行施加了格点限制以后,每个格点只能输出一个预测结果,所以该算法最大的不足,就是对一些邻近小物体的识别效果不是太好,例如成群结队的小鸟。

4,损失函数的含义

看到这里读者或许会有疑问,Yolo里的每个格点,是怎么知道该预测哪个物体的?这就是神经网络算法的能力。首先拿到一批标注好的图片数据集,按照规则打好标签,之后让神经网络去拟合训练数据集。训练数据集中的标签是通过人工标注获得,当神经网络对数据集拟合的足够好时,那么就相当于神经网络具备了一定的和人一样的识别能力。

神经网络结构确定之后,训练效果好坏,由Loss函数和优化器决定。Yolo v1使用普通的梯度下降法作为优化器。这里重点解读一下Yolo v1使用的Loss函数:

在这里插入图片描述
论文中Loss函数,密密麻麻的公式初看可能比较难懂。其实论文中给出了比较详细的解释。所有的损失都是使用平方和误差公式,暂时先不看公式中的 λcoord与 λnoobi ,输出的预测数值以及所造成的损失有:

3.1 预测框的中心点[x,y] 。造成的损失是图五中的第一行。其中Ⅱobj/i j 为控制函数,在标签中包含物体的那些格点处,该值为 1 ;若格点不含有物体,该值为 0。也就是只对那些有真实物体所属的格点进行损失计算,若该格点不包含物体,那么预测数值不对损失函数造成影响。[x,y] 数值与标签用简单的平方和误差。

3.2 预测框的宽高[w,h] 。造成的损失是图五的第二行。Ⅱobj/i j 的含义同上,也是使得只有真实物体所属的格点才会造成损失。这里对 [w,h] 在损失函数中的处理分别取了根号,原因在于,如果不取根号,损失函数往往更倾向于调整尺寸比较大的预测框。例如,20个像素点的偏差,对于800 * 600的预测框几乎没有影响,此时的IOU数值还是很大,但是对于30 * 40的预测框影响就很大。取根号是为了尽可能的消除大尺寸框与小尺寸框之间的差异。

3.3 第三行与第四行,都是预测框的置信度C。当该格点不含有物体时,该置信度的标签为0;若含有物体时,该置信度的标签为预测框与真实物体框的IOU数值(IOU计算公式为:两个框交集的面积除以并集的面积)。

3.4 第五行为物体类别概率P,对应的类别位置,该标签数值为1,其余位置为0,与分类网络相同。

此时再来看 λcoord与 λnoobi,Yolo面临的物体检测问题,是一个典型的类别数目不均衡的问题。其中49个格点,含有物体的格点往往只有3、4个,其余全是不含有物体的格点。此时如果不采取点措施,那么物体检测的mAP不会太高,因为模型更倾向于不含有物体的格点。λcoord与 λnoobi的作用,就是让含有物体的格点,在损失函数中的权重更大,让模型更加“重视”含有物体的格点所造成的损失。在论文中, λcoord与 λnoobi 的取值分别为5与0.5。

5,网络中的几个小技巧

5.1 回归相对位置坐标(offset)代替直接回归坐标

[x,y] 不直接回归中心点坐标数值,而是回归相对于格点左上角坐标的位移值。例如,第一个格点中物体坐标为 [2.5,3.6] ,这2个数值让神经网络暴力回归,有一定难度。所以这里的offset是指,既然格点已知,那么物体中心点的坐标一定在格点正方形里,相对于格点左上角的位移值一定在区间[0, 1)中。让神经网络去预测 [0.5,0.6] 会更加容易,在使用时,加上格点左上角坐标[2,3]即可。

5.2 同一格点的不同预测框有不同作用

前文中提到,每个格点预测两个或多个矩形框。此时假设每个格点预测两个矩形框。那么在训练时,见到一个真实物体,我们是希望两个框都去逼近这个物体的真实矩形框,还是只用一个去逼近?或许通常来想,让两个人一起去做同一件事,比一个人做一件事成功率要高,所以可能会让两个框都去逼近这个真实物体。但是作者没有这样做,在损失函数计算中,只对和真实物体最接近的框计算损失,其余框不进行修正。这样操作之后作者发现,一个格点的两个框在尺寸、长宽比、或者某些类别上逐渐有所分工,总体的召回率有所提升。

5.3 使用非极大抑制生成预测框

通常来说,在预测的时候,格点与格点并不会冲突,但是在预测一些大物体或者邻近物体时,会有多个格点预测了同一个物体。此时采用非极大抑制技巧,过滤掉一些重叠的矩形框。但是mAP并没有显著提升。

5.4 推理时将 p * c作为输出置信度
在这里插入图片描述
在推理时,使用物体的类别预测最大值 p 乘以预测框的最大值 c,作为输出预测物体的置信度。这样也可以过滤掉一些大部分重叠的矩形框。输出检测物体的置信度,同时考虑了矩形框与类别,满足阈值的输出更加可信。

6,与当时已有的算法对比

在这里插入图片描述
backbone同为VGG-16,Yolo比Faster R-CNN少了将近7点mAP,但是速度变为三倍,Fast Yolo和Yolo相比,少11点mAP,但是速度可以达到155张图片每秒。后续的Yolo v3中,准确率和速度综合再一次提升,所以v1的性能不再过多分析。

下面重点看论文中的错误分析:

在这里插入图片描述
首先给出图中各个单词的含义:

• Correct: correct class and IOU > .5
• Localization: correct class, .1 < IOU < .5
• Similar: class is similar, IOU > .1
• Other: class is wrong, IOU > .1
• Background: IOU < .1 for any object

其中,Yolo的Localization错误率更高,直接对位置进行回归,确实不如滑窗式的检测方式准确率高。但是Yolo对于背景的误检率更低,由于Yolo在推理时,可以“看到”整张图片,所以能够更好的区分背景与待测物体。作者提到Yolo对于小物体检测效果欠佳,不过在v2与v3中都做了不少改进。

三,参考资料

1,yolov1原论文:You Only Look Once: Unified, Real-Time Object Detection
2,Yolo三部曲解读-Yolov1

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CrystalheartLi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值