YOLOv1详解

您所在的位置:网站首页 yolov1模型大小 YOLOv1详解

YOLOv1详解

2024-07-09 20:56| 来源: 网络整理| 查看: 265

Figure 1. YOLOv1架构 1. YOLOv1简介

     从目标检测任务(Object Detection Task)发展来看,主要有两类方法。一类是R-CNN系列及其类似算法,称为two-stage,将目标检测任务分为边界框回归和物体分类两个模块。虽然模型前面大量的提取特征以及候选框的选取都是单个网络完成,但回归和分类任务毕竟还是分开的,分开训练造成网络较难收敛,且预测时速度慢,但准确度较高。另一类是本文描述以及后面会更新换代的YOLO算法,称为one-stage,将目标检测任务单纯看做回归任务。YOLOv1使用端到端的网络训练模型,速度快,但准确度相对低些,主要用于实时检测,例如视频目标检测。

2. YOLOv1网络结构

     由于YOLOv1是端到端进行训练,因此YOLOv1只有一条单一的网络分支。YOLOv1输入为(448, 448, 3)的图像,经过一个修改的GoogLeNet网络(网络到底什么样的其实不用管,只要知道是一堆卷积和池化的堆叠即可),后面接一些全连接层(同样无所谓接什么全连接层,看下参数或者源码就直接懂了),最后接到一个1470 \times 1的全连接层,直接reshape为7 \times 7 \times 30(这里reshape成这样是有意图的,具体参见下面部分)。

Figure 2. YOLOv1网络结构

3. YOLOv1单一检测

     YOLOv1将一张图像(例如448 \times 448)划分为S \times S个网格(YOLOv1中S = 7,如下图所示),一共S^2个网格。

Figure 3. 图像被划分为7×7网格      每个网络在初始时会按照自身网格位置生成两个先验框(或叫锚框,根据聚类算法生成的,不用太在意其大小)。一共49个网络,每个网络生成两个先验框,会生成98个先验框,例如下图第5行第2列网络生成的两个先验框。仔细观察,横着的橘黄色先验框超出了图片左边的范围,超出部分被截去(只是操作细节,不用太计较);初始的先验框只可能大概描述到物体的位置,具体还需要后期细调锚框位置,例如下图竖着的先验框蛮符合标准,但还是没有达到更精确地步,还需要细调。 Figure 4. 网格与先验框      那么每个先验框怎么确定它的属性(位置以及预测是否包含物体)呢?YOLOv1提出首先每个先验框有五个参数,分别是表示先验框中心坐标,表示先验框宽高以及表示锚框分数(包含物体概率大小),如下图所示。从下图可以看出,为何上面网络要输出。首先输出的整个可以表示图像被分割为,其次深度30表示每个网格需要预测30个参数(2个先验框共10个参数,还有需要预测的类别数20)。 Figure 5. 每个先验框各个参数意义      可以发现,一张图像产生有个先验框,可是最终有用的先验框(和GT比较吻合的)可能只能个别几个,如下图所示,只有三个先验框有用,红色表示GT框,黄色表示有用的先验框。什么是有用的先验框呢?训练和预测时候筛选先验框方法不同,预测时需要进行NMS,而训练时不用,下面先看训练时筛选方法。 Figure 6. GT框和对应有用的先验框      我们知道训练时候需要计算loss函数,那就要知道预测值和GT值。GT值我们知道的,例如下图所示。每行表示一个GT框,第一个参数表示类别,接下来两个表示GT框中心点表示,最后两个表示GT框宽高,注意这里全是[0,1]之间的数,为什么和怎么计算的下面会讲。三个GT框应该分别对应着三个先验框。怎么选出这三个先验框呢?YOLOv1的做法是:首先分别找到图中每个物体GT框的中心点所在的网格,就如上图狗的中心点在绿色方框内,那么现在狗就由这个绿色网格对它负责,其他剩下48个网格和狗无关;而现在对狗负责的这个绿色网格有对应的两个橘黄色先验框,必须得选择一个,可以通过计算两个先验框分别与狗的GT框的IoU(不知道IoU的请自行搜索学习),选择IoU大的那个框。现在,在训练阶段,按上图所示有三个物体来算,我们就找到了三个物体GT框分别对应的先验框了。这么努力的寻找有用先验框是希望能找到和GT框相差不大的先验框,易于后面训练调节。 Figure 7. GT值      由上面给出的GT值可以知道,中心点坐标和宽高限制在[0,1]之间,怎么计算的呢?由下图可知,这里将图像分割为网格,因为物体中心点落在中间那个网络中,因此中间那个网格对物体负责,按中间那个网格计算物体的。通过自身轴坐标减去负责自己网格的轴坐标,再除以负责自己网格的宽度;通过自身轴坐标减去负责自己网格的轴坐标,再除以负责自己网格的高度;通过自身宽度除以整张图片宽度;通过自身高度除以整张图片高度。因此物体四个参数被严格限制在[0,1]之间。 Figure 8. 框中心点坐标和宽高参数的定义      表示物体的框还有一个参数——是否有物体的置信度分数。计算公式为,表示该网格是否有物体,没有物体时为0,有物体时为1,因此网格没有物体时置信度分数为0,有物体时置信度分数为预测框和GT框之间IoU值。每个网格30个参数前10个介绍过了,后面的20个表示每个网格中这20个类的概率。公式为,因此网格有物体时才有概率,没有物体时概率为0。这里仅仅预测每个网格的各个物体概率,和网格对应的先验框无关。

4.损失函数

     损失函数有多个部分,我们现在把它们分开来说,后面直接挨个加起来即可。      第一部分如下所示,计算预测边界框和GT框中心点之间的差距。其中1_{ij}^{obj}表示第i个网格的第j个边界框是否负责一个物体,是为1,不是为0。 \lambda_{coord}\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}1_{ij}^{obj}(x_i-\widehat{x}_i)^2(y_i-\widehat{y}_i)^2      第二部分类似第一部分,主要计算预测宽高和GT宽高损失。这里加上根号表示大边界框小偏差应该比小边界框小偏差更重要。 \lambda_{coord}\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}1_{ij}^{obj}(\sqrt{w_i}-\sqrt{\widehat{w}_i})^2(\sqrt{h_i}-\sqrt{\widehat{h}_i})^2      第三部分计算对于每个边界框的置信度分数与预测的置信度分数之间差距。C表示置信度分数,\widehat{C}表示预测的边界框和对应GT框的IoU。 \sum_{i=0}^{S^2}\sum_{j=0}^{B}1_{ij}^{obj}(C_i-\widehat{C}_i)^2+\lambda_{noobj}\sum_{i=0}^{S^2}\sum_{j=0}^{B}1_{ij}^{noobj}(C_i-\widehat{C}_i)^2      最后一部分计算类概率损失,1_i^{obj}表示当网格中没有物体时不惩罚。 \sum_{i=0}^{S^2}1_i^{obj}\sum_{c \in classes}(p_i(c)-\widehat{p}_i(c))^2 其中,\lambda_{coord} = 5\lambda_{noobj}=0.5

参考文献

论文原文:https://arxiv.org/pdf/1506.02640.pdf 英文博客:https://medium.com/hackernoon/understanding-yolo-f5a74bbc7967 NMS参考:https://docs.google.com/presentation/d/1aeRvtKG21KHdD5lg6Hgyhx5rPq_ZOsGjG5rJ1HP7BbA/pub?start=false&loop=false&delayms=3000#slide=id.p



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3