Yolov1--v3目标检测解读

Yolo v1
YOLO把目标检测设计成一个回归问题,使用一个神经网络直接在整张图上预测bounding box和类别概率。因为整个检测的流水线是单独的网络,所以可以端到端地优化。YOLO可以实时处理图像,达到45帧每秒

检测原理

在这里插入图片描述
1.将图像resize到448 * 448作为神经网络的输入。
2.运行神经网络,得到一些bounding box坐标、box中包含物体的置信度和class probabilities。
3.进行非极大值抑制,筛选Boxes。
扩展:
非极大值抑制(Non-maximum suppression,NMS)是一种去除非极大值的算法,常用于计算机视觉中的边缘检测、物体识别等。
算法流程:
给出一张图片和上面许多物体检测的候选框(即每个框可能都代表某种物体),但是这些框很可能有互相重叠的部分,我们要做的就是只保留最优的框。假设有N个框,每个框被分类器计算得到的分数为Si, 1<=i<=N。
a. 建造一个存放待处理候选框的集合H,初始化为包含全部N个框;建造一个存放最优框的集合M,初始化为空集。
b. 将所有集合 H 中的框进行排序,选出分数最高的框 m,从集合 H 移到集合 M
c. 遍历集合 H 中的框,分别与框 m 计算交并比(Interection-over-union,IoU),如果高于某个阈值(一般为0~0.5),则认为此框与 m 重叠,将此框从集合 H 中去除。
d. 回到第1步进行迭代,直到集合 H 为空。集合 M 中的框为我们所需。
需要优化的参数:
IoU 的阈值是一个可优化的参数,一般范围为0~0.5,可以使用交叉验证来选择最优的参数。
示例:
比如人脸识别的一个例子:
在这里插入图片描述
已经识别出了 5 个候选框,但是我们只需要最后保留两个人脸。
首先选出分数最大的框(0.98),然后遍历剩余框,计算 IoU,会发现露丝脸上的两个绿框都和 0.98 的框重叠率很大,都要去除。
然后只剩下杰克脸上两个框,选出最大框(0.81),然后遍历剩余框(只剩下0.67这一个了),发现0.67这个框与 0.81 的 IoU 也很大,去除。
至此所有框处理完毕,算法结果
在这里插入图片描述
•本文中NMS:针对某一类别,选择得分最大的bounding box,然后计算它和其它bounding box的IOU值,如果IOU大于0.5,说明重复率较大,该得分设为0,如果不大于0.5,则不改;这样一轮后,再选择剩下的score里面最大的那个bounding box,然后计算该bounding box和其它bounding box的IOU,重复以上过程直到最后。
•它在整图上进行训练并且直接优化,具有以下三个好处:
1)非常快。把检测问题建模成一个回归问题就无需复杂的pipeline。每秒45帧(更快的版本每秒150帧)。
2)YOLO在预测时可以推理整张图片。也就是说,它能够在训练和预测阶段看到整幅图的信息,即包含类别及其外观的语义信息。这是个滑动窗方法不一样的地方。Fast RCNN会把背景误判为目标因为他不能看到大的场景信息。YOLO的background error比Fast RCNN少了一半。
3)YOLO能够学习到目标更加泛化的特征。当它被应用到新的场景或者输入不寻常的图像时,性能不会下降得很厉害
在这里插入图片描述
首先,把输入图片分为S×S个格子,如果目标的中心落入到一个网格内,则这个网格负责检测该目标。每个网格预测出B个bounding boxes和分数,分数反映了这个box包含一个模型的置信度和这个模型预测的准确性。定义置信度为:
在这里插入图片描述
Pr(Object),当边界框包含目标时,为1,不包含目标时,为0.如果那个网格不包含这个目标,则置信度为0,如果包含,则置信度为预测的box和ground truth之间的IOU。
每个bounding box包含5个预测:x,y,w,h和confidence。(x,y)是box的中心相对于网格的坐标。注意,(x,y)是相对于每个单元格左上角坐标点的偏移值,单位是相对于单元格的大小。而边界框的宽高也是相对于整张图片的宽高的比例,这四个值的大小应该都在0-1之间。
每个网格也预测了C个条件类别概率,Pr(Classi|Object) .一个网格不论有多少个Bboxes,都只预测一组条件类别概率。
公式:在这里插入图片描述
计算每个box的特定类别的分数:该类别出现在这个box内的概率,以及这个box和目标的匹配程度。

网路设计

在这里插入图片描述
网络的初始卷积层从图像中提取特征,而全连接层预测输出概率和坐标。
网络架构受到GoogLeNet图像分类模型的启发。网络有24个卷积层,后面是2个全连接层。只使用1x1降维层,然后跟着3x3的卷积层,而不是GoogLeNet使用的Inception模块。
在ImageNet分类任务上以一半的分辨率(224x224的输入图像)预训练卷积层,然后将分辨率加倍来进行检测。最终输出是7x7x30的预测张量。

训练

首先,在ImageNet1000类竞赛数据集上预训练前20层卷积层,然后,加了随机初始化的4层卷积层和2个全连接层。检测任务需要精细粒度的视觉信息,因此在检测的时候把网络的输入分辨率从224×224变成448×448。
为了防止过拟合,在第一个全连接层后面接了一个 ratio=0.5 的 Dropout 层。
在这里插入图片描述
最后一层预测类别概率和bound ing box的坐标。
在最后一层使用一个线性激活函数,其他层都使用leaky rectified线性激活函数:
在这里插入图片描述

损失函数

在这里插入图片描述
第一项是边界框的中心坐标误差,指的是第i个单元格存在目标,且该网格中的第j个边界框负责预测该目标。 第二项是边界框的宽高误差项。 第三项是包含目标的边界框的置信度误差项。 第四项是不包含边界框的置信度误差项。 最后一项是包含目标的单元格的分类误差项,指的是第i个单元格存在目标。
yolo v2改进
Batch Normalization
去掉了Dropout,在每个卷积层后面加了BN层,模型收敛速度有了很大提升,且不会过拟合。
-效果:mAP提升了2%
High Resolution Classifier
预训练尺寸从224224提高到448448
–效果:mAP提升了4%.
Convolutional With Anchor Boxes
YOLO直接使用卷积网络顶层的全连接层直接预测bounding box的坐标。
YOLOv2中,移除了全连接层并且使用anchor box来预测边界框。
首先,去掉了一个池化层来使得网络卷积层的输出具有更高的分辨率。
其次,调整网络输入为416×416,使得最后的feature map的宽高都为奇数,这样就只会产生一个center cell。原因是:大的物体一般都会占据图像的中心,这样在预测时就可以只使用中心cell,而不用周围的四个cell来预测,提高了效率。使用卷积层降采样,factor为32,这样最终得到(13×13)的输出特征图。
另外,使用anchor box之后,可以解耦类别预测和空间定位,由anchor box同时预测类别和坐标。
Dimension Cluster
由于使用anchor时,需要手动选择box的维度(个数,宽,高),因此设想能否一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就应该更容易学到准确的预测位置。
使用统计学习中的K-means聚类方法,通过对数据集中的ground truth box做聚类,找到ground truth box的统计规律。以聚类个数k为anchor boxs个数,以k个聚类中心box的宽高维度为anchor box的维度。
传统的K-means聚类方法使用的是欧氏距离函数,也就意味着较大的框会比较小的框产生更多的误差,聚类结果可能会偏离。为此,作者采用IOU得分作为评价标准,这样的话,误差就和框的尺度无关了。
–公式:
d(box,centroid)=1−IOU(box,centroid)
未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值