美文网首页
yolov1网络理解

yolov1网络理解

作者: miahuang | 来源:发表于2019-10-04 20:17 被阅读0次

yolo的全称是you only look once, 意思是一次性把候选框和目标识别搞定,因此,与RCNN这类用Region Proposals方法提出候选框的算法相比,要快很多。我在看v1的文章的时候,我觉得最让我懵逼是v1的bbox是怎么计算的,loss怎么设计的.因此,本文章只对这两个点详细描述.

yolov1如何产生和确定bbox

与selective search的方法不同,yolov1的候选框选择要粗暴很多.为了更好的解释,我借用知乎文章上面的yolov1网络输入输出映射图.

输入-输出.png

在v1的版本中,图像输入分辨率固定成448*448,并且被均匀分成7*7个的格子,每个格子长的就是左边左上角的那个正方体了.每个正方体进过神经网络训练后,在最后一层输出一个30维的向量,候选框的信息就包含在30维的向量中.由于有49个格子,那么网络的输出就是7*7*30的张量.

30维向量输出.png

再具体分析一下每个30维向量都包含什么信息,实际上包括2个bounding box的位置(一个bounding box用 center_x, center_y, w,h,4个数值表示,两个bounding box占了个位置),个bbox 置信度(稍后解释),预测20个类别的概率(V0C 20类数据).8+2+20刚好就是30.

一开始神经网络训练的时候,没有预先设定bbox的大小和形状,神经网络的工作仅仅对每个格子预测出2个bbox(见上图右下角正方体的两个虚线框),也就是上面提到的30维向量里面的8个,然后选择预测得相对比较准(分别计算前向计算2个bbox 与boxground truth的 IOU,取IOU较大的那个bbox)的那个。
所以一开始,神经网络输出的bbox是乱七八糟,只是在训练的过程中,通过计算IOU,loss值,慢慢让这个杂乱的候选框慢慢变得靠谱起来,每个bbox逐渐擅长对某些情况的预测(可能是对象大小、宽高比、不同类型的对象等).

yolov1 loss的设计

解释清楚了loss的计算过程,那么就已经了解v1的贡献了.v1的loss大体来说包括回归损失, 分类损失, 置信度损失三个部分.为了下面解释公式方便,以下公式中,同一个字母代表同个意思.

v1把输入图像切成7*7个cell,S= 7,v1使用voc数据集,预测20个类别,c表示类别,取值(0,20).

分类损失

如果检测到物体,那么每个cell 的分类损失是每个分类的条件概率平方误差和.
Loss =\sum_{i=0}^{S^2}\sum_{j=0}^ BI_{ij}^{obj}\sum{c \in classes}(p_{i}(c)- \hat{p}(c))^2

如果 cell i 检测到物体,那么I_{ij}^{obj}=1 ,否则I_{ij}^{obj}=0, \hat p_{i}(c)cell i 分类为c的条件概率.

每个grid cell为会所有的分类都有一个概率,此处20个分类,会有20个概率。这个值也就是上文提到30维向量中的20.虽然每个cell 都是预测两个bbox ,不过它们是共享20个类别概率.

回归损失

回归损失计算的是预测的bbox位置与实际尺寸的误差。

\lambda_{coord} \sum_{i=0}^{S^2}\sum_{j=0}^ BI_{ij}^{obj}((x_i- \hat {x_i})^2+(y_i- \hat {y_i)}^2)+ \lambda_{coord}\sum_{i=0}^{S^2}\sum_{j=0}^ BI_{ij}^{obj}[(\sqrt w_i - \sqrt{ \hat {w_i}})^2+(\sqrt {h_i}- \sqrt {\hat h_i})^2])
如果cell i 包含预测对象,那么I_{ij} ^{obj}=1,否则为0。注意,其中的\hat {x},\hat {y}是相对于当前cell的偏移量。v1不是直接预测bbox的高宽,而是宽的二次方根和高的二次方根。这样做的目的是减少大的bbox和小的bbox带来的不公平。举个例子来说,对于一个100*10010*10的目标都预测大了10个像素,如果不用根号,那么大的目标和小的目标的损失都为200.显然,我们能接受大的目标大于10个像素,不能接受小的目标预测大了一倍。加了根号之后,小的目标损失是(\sqrt 20 - \sqrt 10)^2=3.43,大的目标损失为(\sqrt (110) -\sqrt(100))^2= 0.48.这个是我们期望的。

置信损失

\sum_{i=0}^{S^2}\sum_{j=0}^BI_{ij}^{obj}(C_{i}- \hat{C_{i}})^2 + \lambda _{noobj} \sum_{i=0}^{S^2}\sum_{j=0}^BI_{ij}^{noobj}(C_{i}- \hat{C_{i}})^2

公式中的C为confidence,​是上文提到30维向量中的2维. 表示目标的中心是否出现在网格单元​中,​表示网格单元​中的第​i个边界框预测器“负责”该预测,第i个边框的confidence 计算公式P(obj)*IOU_{pred}^{truth}
如果某个物体在box中被检测到,其置信度损失(衡量的是box中的物体)\sum_{i=0}^{S^2}\sum_{j=0}^BI_{ij}^{obj}(C_{i}- \hat{C_{i}})^2\hat C_i是预测与groundtruth 的IOU.
如果某个物体不在box中,其置信度损失为\lambda _{noobj} \sum_{i=0}^{S^2}\sum_{j=0}^BI_{ij}^{noobj}(C_{i}- \hat{C_{i}})^2,\hat C_{i}=0.同样的,I_{ij}^{noobj} 是对I_{ij}^{obj}的一种补充。\lambda _{noobj}降低背景检测损失的权重(noobj即背景) 。因为大部分cell不包含任何物体,这会导致分类(正负样本)的不均衡。(Retinanet网络提出解决正负样本不均衡问题)因此,我们降低了背景检测损失的权重,即\lambda _{noobj}默认值为0.5。

图片参考:https://zhuanlan.zhihu.com/p/46691043

相关文章

  • yolov1网络理解

    yolo的全称是you only look once, 意思是一次性把候选框和目标识别搞定,因此,与RCNN这类用...

  • detection_layer层的实现

    detection_layer对应Yolov1的实现,理解detection_layer的实现主要需要理解Yolo...

  • 详解 YOLOv2

    YOLOv2 简单回归 YOLOv1 yolov1 中存在问题 yolo 难以应付小目标 yolo 漏检,也就是召...

  • YOLOv1——YOLOv5

    YOLOv1 YOLOv1提出单阶段anchor-free的目标检测方法将图像分为SxS的grid cell,每个...

  • YOLOv1 随笔

    YOLO 系列 YOLOv1 作者 AlexAB 计算机视觉 随着深度学习中卷积神经网络的发展,掀起了一次目标检测...

  • 目标检测 | 让YOLOv2告诉你Trick的力量

    0.简介 在前一篇文章目标检测 | 让YOLOv1算法告诉你回归网络的能力中我们见证了回归网络的能力,本文就利用Y...

  • 目标检测 | YOLOv3开启的回归网络下的多尺度策略

    1.简介 通过文章目标检测 | 让YOLOv1算法告诉你回归网络的能力和目标检测 | 让YOLOv2告诉你Tric...

  • YOLOv1, SSD

    YOLOv1, SSD 今年四月份的时候,在一个研究院实习时学习了YOLOv1, SSD系列Object Dete...

  • YoloV1

    YOLO(You Only Look Once)是一种基于深度神经网络的对象识别和定位算法,其最大的特点是运行速度...

  • Yolov1

    贴两个yolov1写的比较好的链接: 目标检测|YOLO原理与实现:https://zhuanlan.zhihu....

网友评论

      本文标题:yolov1网络理解

      本文链接:https://www.haomeiwen.com/subject/ehbzyctx.html