论文地址 相关图片内容取自原文及b站 霹雳吧啦Wz大佬的讲解视频

本文目录:

  1. 论文思想
  2. 网络结构
  3. 损失函数
  4. 模型缺陷

1. 论文思想

YOLOv1 将一幅图像中所有类别的目标检测统一到了一个端到端的框架之中。在这个框架中,只需要执行三步:

首先,将输入的图像分成 S×S 个网格 (grid cell),如果某个 object 的中心落在这个网格中,则这个网格就负责预测这个 object。每个网格需要预测 B 个 bounding box,每个 bounding box 除了要预测位置之外,还要附带预测一个 confidence 值,除此之外,每个网格还要预测 C 个类别的分数。在论文中,使用了 PASCAL VOC 数据集,共 20 类目标,设置 S=7, B=2, C=20,输出维度为 7×7×30。YOLOv1 没有 anchor 的概念,所有的关于位置的信息都是通过卷积直接生成的。

输出的结构:

对于每个 bounding box,有 5 个参数,分别是 x, y, w, h, confidence。其中,(x, y) 坐标表示相对于网格单元边界的框的中心,范围在 0 到1 之间。(w, h)相对于整个图像预测的,范围也是在 0 到 1 之间。最后,confidence 分数反映了模型对该方框包含一个物体的置信度,以及模型认为其预测的方框的准确度,形式上定义为:

\[\mathrm{confidence} = \mathrm{Pr}(\mathrm{Object})*\mathrm{IOU}_{\mathrm{pred}}^{\mathrm{truth}} \tag1\]

其中,$\mathrm{Pr}(\mathrm{Object})$ 相当于一个二值函数,如果当前网格 (cell) 中没有需要检测的 object,那么 $\mathrm{Pr}(\mathrm{Object})=0$ ,置信度分数为零。否则,我们希望置信度分数等于预测框与 GT 之间的交集。也就是说,confidence 反映的是当前预测的这个 bounding box 内包含物体的概率以及其预测的方框的准确度,具体要想判断是哪一类 object,需要结合后面的 20 类分数。

每个网格单元还能预测 C条件类别概率 (conditional class probabilities),这些概率以包含对象的网格单元为条件,形式上定义为:

\[\Pr(\text{Class}i|\text{Object}) \tag2\]

每个网格只预测一组类概率,与方格 B 的数量无关。测试时,将条件类别概率和单个方框置信度预测值相乘:

\[\mathrm{Pr}(\mathrm{Class}_i|\mathrm{Object})*\mathrm{Pr}(\mathrm{Object})*\mathrm{IOU}_{\mathrm{pred}}^{\mathrm{truth}}=\mathrm{Pr}(\mathrm{Class}_i)*\mathrm{IOU}_{\mathrm{pred}}^{\mathrm{truth}} \tag3\]

从而得出每个方框中特定类别的置信度分数。这些分数既表示该类出现在方框中的概率,也表示预测方框与对象的匹配程度

2. 网络结构

网络结构如上图所示,只是包含了 24 个卷积层和 2 个全连接层。

3. 损失函数

整个损失函数包含了三个方面的损失,主要使用了误差平方和 (sum-squared error) 的形式:

其中,\(\mathbb{1}_i^{\mathrm{obj}}\) 表示物体是否出现在单元格 \(i\) 中,\(\mathbb{1}_{ij}^{\mathrm{obj}}\) 表示单元格 \(i\) 中的第 \(j\) 个边框预测器对该预测 “负责”。请注意,损失函数只在对象出现在该网格单元时才会对分类错误进行惩罚(因此才有了前面讨论的条件类概率)。如果预测因子对地面实况框 “负责”(即在该网格单元的所有预测因子中具有最高的 IOU),它也只对边界框坐标错误进行惩罚。

至于为什么在计算宽高的损失时使用了根号差,这是为了消除目标尺寸对偏移误差带来的影响。偏移相同的距离,对小尺寸目标的检测带来的影响更大,所以我们需要扩大在相同偏移量下小目标的损失来提高对小目标的检测精度。

4. 模型缺陷