两阶段目标检测方法,第一阶段:提取候选框;第二阶段:用分类器筛选候选框
因为随机候选框是不能看到全景,所以会丢失很多东西(背景和前景的关系,不同物体之间的关系)
YOLOv1是单阶段目标检测方法,不需要像Faster RCNN这种两阶段目标检测方法一样,需要生成先验框。Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测。
1.快,每秒处理45帧,实现实时处理
2.对图像全景有上下文关联
3.泛化能力强,在艺术作品上进行测试得到好的结果
将目标检测问题当作回归问题解决
不需提取候选框(单阶段)端到端、快速、捕捉全图上下文信息、recall高、迁移泛化好
1.每个网格只对应两个bounding box,当物体的长宽比不常见(也就是训练数据集覆盖不到时),效果较差。
2.原始图片只划分为7x7的网格,当两个物体靠的很近时,效果比较差。
3.最终每个网格只对应一个类别,容易出现漏检(物体没有被识别到)。
4.对于图片中比较小的物体,效果比较差。这其实是所有目标检测算法的通病。
5.定位误差高(对大小框同等对待,分类正确但定位误差大是yolo误差的主要来源)
YOLO目标检测:首先将输入图片resize到448x448×3,然后送入CNN网络,最后处理网络预测结果得到检测的目标。相比R-CNN系列算法,其是一个统一的框架,其速度更快,而且Yolo的训练过程也是end-to-end的。
具体来说,YOLO将全图划分为S × S的格子, 每个格子负责对落入其中的目标进行检测,一次性预测所有格子所含目标的边界框、置信度、以及所有类别概率向量
1.将一幅图像分成SxS个网格,如果某个物体的中心落在这个网格中,则这个网络就负责预测这个物体
2.每个网格要预测B个bounding box,每个bounding box,除了要预测位置之外,还要附带预测一个confidence值。每个网格还要预测c个类别的分数
对于每个网格单元cell
1.YOLOv1会预测两个边界框
2.每个边界框包含5个元素:( x , y , w , h ) 和 边界框的置信度得分(box confidence score)
3.只负责预测一个目标
4.预测 C个条件概率类别(conditional class probabilities)
具体细节
输入4484483的图像,输出7730(5+5两个框+20类别)的张量grid cell还包含每个类别的概率,用grid cell的类别概率 * grid cell自己生成的bounding box的置信度,就获得该bounding box对应各个类别的概率(不再是条件概率了)。
ss个grid cell,每个gridcell生成b个bounding box,每个gridcell包含2个bounding box,和20个类别。这里是77*2=98个框,最后设定一个阈值,把概率太低的删去。
每个bounding box又包含5个参数分别是。置信度参数,四个坐标参数 [中心坐标。宽高]。
因为每个gird cell最多只能预测一个物体,所以7*7最多只能预测49个物体,所以这是yolov1预测小目标或者密集目标差的原因。
YOLO输入图像的尺寸为448 × 448,经过24个卷积层,2个全连接的层(FC),最后在reshape操作,输出的特征图大小为7 × 7 × 30。
1.YOLO主要是建立一个CNN网络生成预测 7 × 7 × 1024的张量,
2.然后使用两个全连接层执行线性回归,以进行7 × 7 × 2边界框预测。将具有高置信度得分(大于0.25)的结果作为最终预测。
3.在3 × 3的卷积后通常会接一个通道数更低1 × 1的卷积,这种方式既降低了计算量,同时也提升了模型的非线性能力。
4.除了最后一层使用了线性激活函数外,其余层的激活函数为 Leaky ReLU
(下边有解释)
5.在训练中使用了 Dropout 与数据增强的方法来防止过拟合。(下边有解释)
6.对于最后一个卷积层,它输出一个形状为 (7, 7, 1024) 的张量。 然后张量展开。使用2个全连接的层作为一种线性回归的形式,它输出个参数,然后重新塑形为 (7, 7, 30) 。
置信度过滤,非极大值抑制
对预测框筛选过滤,把重复的预测框只保留一个,最终保留预测的结果(包含把低置信度的框过滤掉,重复的框去掉,这个过程叫做nms,非极大值抑制)
注意
每个bb的类别概率有一个概率排序,从大到小。从最大的开始,后边的全部与之做IOU值比较,若小于某个阈值就直接置0,以此类推。
深度学习和监督学习的训练是通过梯度下降和反向传播迭代的去微调神经元中的权重来使得损失函数最小化的过程,目标检测是一个典型的监督学习的过程。
YOLO使用预测值和GT之间的误差平方的求和(MSE)来计算损失。
损失函数包括
localization loss -> 坐标损失(预测边界框与GT之间的误差)
classification loss -> 分类损失
confidence loss -> 置信度损失(框里有无目标, objectness of the box)
红框代表的是““好孩子”,绿框代表的是“坏孩子”,紫框代表的是“好的学习小组””
grid cell分为两类:一种负责检测物体的(包括一类负责物体检测的bb好孩子
,另一类被淘汰的bb坏孩子
),另一种不负责检测物体的(不负责物体检测的bb坏孩子
)
FPS
每秒处理多少张图片
mAP
平均准确度
前者的区分背景能力差
原因:因为它只识别了候选框中的图像,所以丧失了全图的信息,会把很多背景误判为目标
后者的精准定位差
原因:1.输入图片尺寸小
2.一个网络干了整个目标检测的事(一般情况下速度和性能是不能兼得的)
1.一般每秒处理30张图片就算得上是实时监测了( in real-time at 45 frames per second)
2.AP(PR曲线围成的面积,面积越大越好)
3.PR曲线中的P代表的是precision(精准率),R代表的是recall(召回率),其代表的是精准率与召回率的关系
4.训练阶段:ground truth框中心点落到哪个grid cell里哪个grid cell就应负责检测这个物体。检测这个物体的bbox就应由这个grid cell生成。
5.bb分为3类:①负责预测bb的预测框②不负责预测物体的bb,iou值小③不负责预测物体,不在同一个grid cell中
6.leaky ReLu(yolov1中提到)
7.平方和误差:回归问题损失函数,易于优化
但对于定位和分类误差一视同仁、对包含物体和不包含物体的bb一视同仁、对大框和小框一视同仁
解决办法:增大负责预测物体bb的权重,减小不负责检测物体的bb的权重
求根号来减少大框误差
8.yolov2初始化都带有anchor,固定长宽;yolov1初始框都是随机的(yolov1无anchor机制,B个框逐渐特化,每个框都聚焦至特定形状或长宽比)
9.集成模型要“好而不同”优势互补,避免“近亲繁殖”