YOLO V1
目标检测 object detection
能够解决图像分类classification、图像定位localization、目标检测object detection、图像分割segmentation
图像分割——语义分割semantic segmention、实例分割 instance segmention
同时还包括了关键点检测等技术
YOLOV1
预测阶段 前向推断
基准模型:
448*448*3通过一个深度卷积神经网络,最后形成7*7*1024维,拉平后喂到4096全连接层输出4096维的向量再喂到1470维的全连接层再reshape成7*7*30
这个7*7*30的tensor中包含了所有执行框的坐标、置信度、类别结果,只需要解析这个张量就可以
把如像划分成 S*S的grid cell,而volov1中s=7
每个grid cell 可以预测B个bounding box(B=2)(bounding含有xyhwc,,c表示框线粗细即object的置信度)即是:
Finally the confidence prediction represents the IOU between the predicted box and any ground truth box
最后,置信度预测表示预测框和任何地面实况框之间的 IOU
These confidence scores reflect how confident the model is that the box contains an object and also how accurate it thinks the box is that it predicts
这些置信度分数反映了模型对盒子包含对象的信心程度,以及它认为盒子预测的准确度
we define confidence as **Pr(Object)*IOU(^truth_pred)
confidence score :
Pr(Object) 非0即1;IOU(真实&预测)按实际计算;两者的乘积胃confidence score
If noobject exists in that cell, the confidence scores should bezero.
如果该单元格中不存在任何对象,则置信度分数应为零。
Otherwise we want the confidence score to equal the intersection over union (IOU交并比) between the predicted box and the ground truth
否则,我们希望置信度得分等于预测框和基本事实之间的联合交集(IOU交并比)
每一个grid cell还会生成所有类别的条件概率: P(Class_i|Object),当前bounding box 已经包含物体的条件下给类别的概率
Each grid cell also predicts C conditional class probabilities, Pr(Classi|Object).
每个网格单元还预测C条件类概率Pr(Classi | Object)。
These probabilities are conditioned on the grid cell containing an object.
这些概率取决于包含对象的网格单元。
We only predict one set of class probabilities per grid cell, regardless of the number of boxes B.
我们只预测每个网格单元的一组类别概率,而不考虑框B的数量
每个grid cell 只预测一组条件类别率它对应的B个bunding box都共享这条件类别概率
bounding box的置信度×类别概率=每一个bounding box 各类别的概率
如下图:上图表示所有有类别的bounding box的存在,再通过下图的grid cell类别概率过滤,过滤出置信度最高的框
Our system models detection as a regression problem. It divides the image into an S * S grid and for each grid cell predicts B bounding boxes, confidence for those boxes,
and C class probabilities. These predictions are encoded as an
S* S *(B *5 + C) tensor
我们的系统将检测建模为一个后悔问题。它将图像分割为一个S* S网格和每个网格单元预测B边界框、这些框的置信度和C类概率。这些预测被编码为S* S *(B *5 + C) 张量
For evaluating YOLO on PASCAL VOC, we use S = 7,B = 2. PASCAL VOC has 20 labelled classes so C = 20.Our final prediction is a *7* 7 * 30 tensor.
为了在 PASCAL VOC 上评估 YOLO,我们使用 S = 7,B = 2。PASCAL VOC 有 20 个标记类别,因此 C = 20。我们的最终预测是 7* 7 * 30 张量。
用图展示过程
- YOLO通过一系列卷积,将图转换成7*7*30的张量,其中可以分成49个grid cell,可以将一个grid cell 取出单独看;
30层中包含了bounding box的中心位置——x,y;长宽——w,h;以及bounding box的条件类别概率 (class score P(obj is class_i | obj in box))
- 如下图堆叠,5,5,30
- 把 20个 条件概率 拿出来和 bbox 的 置信度 相乘获得;
条件概率和条件本身的概率相乘就是全概率
- 两个框都乘,每个grid cell就获得了两个20维全概率,一共49个grid cell,共98个20维的向量
以上这98个全概率可视化后就是这样:
预测阶段 后处理
后处理 :过滤上图
按类别进行以下操作:
- 设置阈值
- 排序
- NMS算法将冗余BBoxe的核心设置为零 (NMS Non-Maximum Suppression 非极大值抑制)
NMS Non-Maximum Suppression 非极大值抑制
存在一些不是0的并排好序的class
先把第一个和第二个比,把他们的IOU>阈值,则把较低的过滤
lf loU(bbox_max, bbox_cur) >0.5 then set 0 scoreto bbox_cur.
第三个的IOU没超过阈值就留着
重复以上步骤,第一个和他后面的比,超过阈值的抹去,未超的保留,全部比完后转至第一个之后还有值的概率开始比较,重复以上步骤。
全部比完之后剩余的非0class score 的就是第一个类别的框了
之后重复以上操作,将所有类别遍历完全
最后会形成一个稀疏矩阵
把类别索引和分数领出来与0比较
预测使用NMS 训练阶段不用
训练阶段 反向传播
监督学习
训练集中存在标记出目标框的中心位置
训练时,会选择中心位置落入目标所在的 grid cell 中,每一个cell会产生两个框,选择IOU较大的去拟合训练中的框,即生成的框和标记的框重合的最多,即IOU最大的一个
没有中心点落入cell中时,生成的bbox全部放弃
损失函数
设:负责检测物体的bbox为λ_coord = 5 ; 不负责检测物体的bbox为λ_coord = 0.5; 计算时用长宽的平方根代替整数*1
we increase the loss from bounding box coordinate predictions and decrease the loss from confidence predictions for boxes that don’t contain objects.
我们增加了边界框坐标预测的损失,并减少了不包含对象的框的置信度预测的损失
Our error metric should reflect that small deviations in large boxes matter less than in small boxes
我们的误差度量应该反映出 大盒子 中的 小偏差 比 小盒子 中的 小
*1:绝对误差对于大小框都适用,为了减少大框误差,我们采用平方根代替原数,小框会更敏感,如下图:
公式内容如图所示