1、 概括:yolo是一个端到端的目标检测算法,总体思想是将目标检测看成回归问题,得到空间上的分类边界边框以及对应类别概率,论文中提到其优势:速度快、全局性预测(预测背景中假阳性目标情况减少)、学习抽象特征(对预测抽象图像具有优势);缺点:yolov1检测准确率不如当时主流的检测算法;定位误差相对大一些;一个cell只能预测一种类别,空间约束性很强,如果在这个cell里附近有小物体就预测不到,所以yolov1不适合预测小目标物体。
2、 检测思想:
和r-cnn系列不同的是,yolo是统一检测,只需要一次原图片输入,经过一次网络处理,通过整个图像的特征来给出预测出的物体的边框位置以及物体类别概率(一次性给出),yolov将输入图像划分为S*S个grid cell,每个cell可以有B个bbox,论文设置B=2,S=7,所以输入图片一共就有98个bbox边框, 如果对象的中心位置是在某个cell里,那这个cell对应的预测结果就要对这个对象负责,每个cell含有B对信息,每对信息里包含(x,y,w,h,confidence),并且每个cell里还包含20(因为PASCAL VOC数据集中有20个标记类)个类别的检测概率Pr(class|Object),这里对这里几个变量进行解释:
x,y,w,h的解释:
x,y是物体中心所在的位置坐标;w,h是预测边框bbox的宽与高
(此图引于视频https://www.bilibili.com/vide...)
其实x,y,w,h都是经过归一化处理过的,如上图,已图片左上角为(0,0)中心坐标点,x,y未归一化处理前是相对左上角的坐标,,该cell的左上角坐标是(149,149),如图中公示处理后的结果就是我们得到的
x,y;w,h是预测边框的绝对宽(高)除以输入图片的绝对宽(高)处理而来的;
confidence的解释:
$confidence=Pr(object)*IoU$
其中Pr(object)的意思是如果该grid cell里有包含物体中心,那么他的值就是1,否则就是0;
IoU的意思是cell预测出来的bbox位置与真实边框位置的交并比:
论文中还提到,将cell对应的Pr(class|Object)与confidence做乘积,就可以得到每个类别与IoU的乘积,公式如下,也就是知道里每个类别的得分值,这些得分值代表该类别物体出现在框中的概率和边界框与物体的拟合程度。
其实看到这里,就已经将yolov1检测的核心思路讲完了,可以计算出来,最后输出的具有$7*7*(2*5+20)$个张量,计算公式论文中也说的很清楚:
$S*S*(B*5+C)=7*7*(2*5+20)$
补充:正是因为gird与bbox这些检测思路,也导致了yolov1一个gird只能预测一类物体,这两个bbox预测的是同一个物体,这里到yolov2会对此做改进;
3、 网络
论文称受googLeNet启迪,设计的网络结构:
由上图可以可看出该网络结构设计里24层卷积层,最后两层是全连接层;在ImageNet会先进行预训练,前20层卷积层+1个平均池化层+1个全连接层,预训练的输出作为输入再经过四个随机初始化的卷积层+2个全连接层(因为预训练模型中加入卷积层和全连接层可以提高性能),最后的输出是$7*7*30$,即为$7*7$个cell,每个cell携带30个维度的信息量,前面已经介绍过这30个信息是什么了。
补充卷积层计算相关知识:
下面连接可查看动图
(图片引于https://img-blog.csdn.net/201...)
对于全连接网络,会需要很多参数,其实参数过多是很容易产生过拟合(拟合结果在训练集上表现的很好,在测试数据上容易出现很大偏差)的现象的,而且参数过多势必会增加计算时间,卷积计算对此有很好的解决方案:局部连接和参数共享,卷积计算的过程就很好的体现了他的局部连接的特性(如上图)——输入的局部特征和卷积核做计算,其实卷积核也可以称为滤波器,输入矩阵与卷积核计算的输出结果,其实本质上就是完成了一次滤波,这样的处理能做到输出是感兴趣的特征信号,去除其他干扰信号,滤波的实际物理意义是根据卷积核的不同而不同的,常见的卷积核滤波功能有平滑,模糊,去燥,锐化,边缘等;
而对于权值共享,从上述过程动图也可以看出,每次按步长移动取输入部分特征参与卷积时,他们都是共用同一个卷积核,直到此次输入特征全部参与完卷积核的处理(每层卷积网络可能不止一个卷积核,多个就重复多次上述过程即可,因为权值共享同样意味着经过一个卷积核处理后,其输出是对整体输入特征的其中一种特征的提取,每层卷积网络可能需要提取出多个特征)。
经卷积核计算后输出size:W或H=[(输入W或H-卷积核W或H+2*Pad)/步长] +1
4、损失函数
该损失函数公式的组成可以分为三部分误差和,如图说明:
对于这个标示,论文中给的解释是,对于第i个cell的第j个bbox(一个cell有B个bbox,j是其中置信度最大的那个bbox),如果有物体中心点在改cell中,那就取置信度最大的那个第bbox;
则指是(总bbox-上述的bbox),剩下的这些bbox;
文中有解释到,由上面这两个标注量的意义可以知道,如果不给定位误差加权重的话,因为定位误差具备的bbox相对noobj的情况会少很多,这样公式不加权重同等对待系数为1相加显然是不合理的,因此论文加了λcoord = 5和λnoobj =0 .5两个权重变量,最后组成了上式的误差公式
5、预测
预测和训练时一样,输入图片经过一次网络的处理,最后输出得到$7*7*30$,对于可能出现重检的问题,作者提出了NMS(极大值抑制的方法),文中并没有介绍具体处理过程,过程如下:
输出结果共有98个bbox,每个bbox都有预测的置信度confidence,乘以20个类别就能得到20个分数,
1)、设置一个分数阈值;
2)、对98个bbox,按类别分数进行降序排列(假设类别是dog),将98个bbox的dog类别的分数降序排列;
3)、执行操作 IOU(bbox_max,bbox_cur) > 阈值,then set 0 to bbox_cur,说明重叠度很高,预测的是同一个,否则就保留分数;
4)、再对其次大的分数进行同样操作,直至98个分数处理完毕。
这样就能做到过滤掉重检的预测结果并保留最好的预测结果
6、yolov1的局限:
一个gird只能预测两个框并且只能预测一种类别,并规定输入尺寸,不适合对小目标物体检测
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。