先将图像分成很多小格子,然后每个小格子会做成两个预选框
然后只要iou大的那个预选框,后面微调这个被选中的框。在预选框中有参数x,y,w,h,c分别是坐标,长宽和置信度,通过置信度来分辨这个预选框中是物体还是背景
可以看到在全连接层后面得到了7x7x30的特征图,7x7是特征图的宽高,刚刚说到一个预选框会产生5个参数,一个格子有两个预选框,加起来是10,剩下的20是要做的分类数目(狗,自行车...),所以参数的计算就是,S:宽或高,B:预选框个数,C:分类数量。
损失函数
关于位置的loss,所有格子,每个格子的预选框,用来选出iou最大的预选框,当然是希望这个值越小越好,这里加了根号的原因是使它对小的物体更敏感。
置信度的loss,置信度C跟iou比较,如果iou是1,则C也是1,这就是最理想的情况,在不含物体的置信度loss中加了一个lanmbda参数,是因为一张图中背景肯定居多,所以加一个参数来平衡这种关系。
分类loss就是用的分类问题中的交叉熵
NMS(非极大值抑制)
NMS其核心思想是:选择得分最高的作为输出,与该输出重叠的去掉,不断重复这一过程直到所有备选处理完。
YOLO存在的优点是:
1.速度快,处理速度可以达到45fps,其快速版本(网络较小)甚至可以达到155fps。这得益于其识别和定位合二为一的网络设计,而且这种统一的设计也使得训练和预测可以端到端的进行,非常简便。
2. 泛化能力强 ,可以广泛适用于其他测试集。
3.背景预测错误率低,因为是整张图片放到网络里面进行预测。
YOLO存在的缺点是:
精度低,小目标和邻近目标检测效果差,小对象检测效果不太好(尤其是一些聚集在一起的小对象),对边框的预测准确度不是很高,总体预测精度略低于Fast RCNN。主要是因为网格设置比较稀疏,而且每个网格只预测两个边框,另外Pooling层会丢失一些细节信息,对定位存在影响。