YOLO v1
1、核心思想
YOLO算法的核心思想是,将整张图片作为输入,利用网络的输出结果直接回归预测出bounding box的调整参数和物体所属类别。
2、结构流程
YOLOv1的整体结构流程是,对于一张输入的图片进行特征提取,输出的特征层可以看做把原始图片划分成s×s的网格,如果我替的中心点络在某一网格内则这个物体就由该网格负责预测。
每一个网格有B个bounding box.除了需要预测Bounding box位置信息,还需要预测一个值confidence,这个值在faster CNN网络中是没有的。confidence的计算方法:
如果bounding box中存在物体,则第一个值等于1,否则等于0。第二个指标是预测框和真实框的重和程度。
论文中yolo模型的结构如图所示,输出特征层大小为7×7×30.
通道数30表示的含义是:对于VOC数据集物体类别总数为20,每一个网格对应2个bounding box,每一个bounding box对应框中是否存在物体和bounding box的调整参数(h,w,x,y)。
在test 过程中,计算
包含三个信息:预测框中是否存在物体,预测框的调整参数,还有物体所属类别。
class信息是针对每个网格的,confidence信息是针对每个bounding box的。
3、Loss计算方法
yolo v1损失函数包括三部分:
bounding box位置和宽高信息,confidence,class
这三部分内容和上面式子中的内容是对应的:confidence计算预测框中是否存在物体的 loss(存在物体判断为不存在物体,不存在物体判断为存在物体),bounding box 计算框的位置和大小信息的 loss,class计算网格中物体所属类别的 loss.(个人理解)
论文中loss计算:
宽高的损失值为什么要用开根号计算
论文里是这么解释的
简单说:用根号这个函数,让小目标和大目标在中心点偏移量相同的情况先,使得小目标能够有更大的loss值
这里构造loss函数的思想可不可以用到其他目标检测网络小物体难以识别的情况?(个人理解)
论文中还提到了λ noobj和λ noobj参数。
论文里是这么说的
因为condfidence 的loss值表示:预测框中存在物体存在物体被判断为不存在;预测框中不存在物体判断为存在。
而目标检测任务主要处理的是有物体存在的框,所以对于预测结果为有物体的框增加了loss的权重。
还有一个细节问题
物体中心所在的grid cell负责对该物体的预测,那么网络的输出结果作用于该网格,调整参数也不能超出该网格范围的
为什么呢,因为超出这个网格的范围到了别的网格,就应该由别的网格进行预测了呀,各管各的哈。
所以网络又对bounding box的调整参数进行归一化,归一化到0-1之间,用的是 leaky relu
最后,设置阈值,筛选掉得分较低的框,然后用NMS进一步筛选得到最终的目标检测结果。
YOLOv1有什么不足之处:
- 对于小物体的识别,聚集在一起的小目标,预测的效果差,因为网络中每一个网格只有两个bounding box ,当小物体分布在一个网格内,就无法准确预测。
- 另外当同一类物体以不同的比例出现时,预测效果差,还是由于,每个网格只有两个bounding box而且两个bounding box识别的都是同一类物体
YOLO V2
相对于YOLOv1的改进之处
-
网络中增加了BN,作用是有利于模型收敛,起到正则化的作用,同时,可以代替dropout起到防止过拟合的作用。
-
使用了更高分辨率的分类器
输入特征层大小224×224→448×448 -
基于anchors来预测 bounding box
网络的模型有更大的改进空间 -
使用k-mean聚类的方法选择prior
得到的5个聚类中心就是5个先验框的宽和高 -
Fine-Grained Features
将包含小目标信息的底层特征和包含全局信息的高层特征层进行信息融合 -
Multi-ScaleTraining
多尺度训练
区别于之前的补全图片的尺寸的方法,YOLO v2每迭代几次都会改变网络参数。每10个Batch,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320,352……608},最小320320,最大608608,网络会自动改变尺寸,并继续训练的过程。
这一政策让网络在不同的输入尺寸上都能达到一个很好的预测效果,同一网络能在不同分辨率上进行检测。当输入图片尺寸比较小的时候跑的比较快,输入图片尺寸比较大的时候精度高,所以你可以在YOLO v2的速度和精度上进行权衡。
而且YOLO V2中特征提取网络使用的是DarkNet 19
对网络输出进行解码,对先验框进行调整。
输出特征层reshape成:[-1, 13 * 13, 5, 80 + 5],特征层13×13可以看做将原图片划分成13×13的网格,每个网格上对应5个先验框。通道数85表示coco数据集对应物体所属类别总数为80。5表示每一个先验框中是否存在物体还有先验框中心点坐标和宽高的调整参数。
最后计算每一个预测矿的score,筛选掉得分低的框,然后用非极大抑制来进一步筛选,得到最终的预测框。
YOLO V3
yolo v3的改进之处
- 首先YOLOv3使用的基础分类网络是DarkNet53,它其中包含残差卷积块。
参考博客 - Yolo v3 bounding box 的score预测采用逻辑回归的方法,对于与真实框重合程度超出thresh但是并不是最优的预测框,在计算loss时,只计算框中是否存在物体的loss并不会计算物体所属类别和框的信息的Loss。
- 对于分类器的分类预测,不使用sigmoid而是用逻辑预测。
原因是每一个预测框中可能存在不止一种物体,而sigmoid不适合多标签分类。sigmoid可以有多个独立的逻辑分类器代替,损失函数采用的是 binary cross-entropy loss。 -
多尺度预测
每个网格对应9个先验框,包含三种不同的scale.
每种尺度预测3个box, anchor的设计方式仍然使用聚类,得到9个聚类中心,将其按照大小均分给3中尺度.
尺度1: 在基础网络之后添加一些卷积层再输出box信息.
尺度2: 从尺度1中的倒数第二层的卷积层上采样(x2)再与最后一个16x16大小的特征图相加,再次通过多个卷积后输出box信息.相比尺度1变大两倍.
尺度3: 与尺度2类似,使用了32x32大小的特征图.
YOLO和Faster rcnn网络的区别
YOLO是已整张图片作为输入,在进行回归预测
而FASTER RCNN网络使用的是proposal和anchor机制,proposal是通过卷积来完成的。训练过程需要反复训练rpn网络和FasterRCNN网络。
感谢:
https://blog.csdn.net/App_12062011/article/details/77554288
睿智的目标检测6——yolo2详解及其预测代码复现
睿智的目标检测11——Keras搭建yolo3目标检测平台
https://www.bilibili.com/video/BV1yi4y1g7ro
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:YOLO 目标检测网络学习笔记 - Python技术站