YOLOv3:An Incremental Improvement

YOLOv3借鉴特征金字塔网络(FeaturePyramidNetwork,FPN)思想,小尺寸特征图(深层特征)用于检测大尺寸物体,而大尺寸特征图(浅层特征)检测小尺寸物体,实现效果提升

什么是YOLOv3?

  • 无论是YOLOv1,还YOLOv2,都有一个共同的致命缺陷:只使用了最后一个经过 32倍降采样的特征图(简称 C5特征图)。尽管YOLOv2使用了passthrough技术将16倍降采样的特征图(即 C4特征图)融合到了C5特征图中,但最终的检测仍是在 C5尺度的特征图上进行的,最终结果便是导致了模型的小目标的检测性能较差
  • YOLOv3通Darknet-53主干网络,借鉴特征金字塔网络(FeaturePyramidNetwork,FPN)思想,小尺寸特征图(深层特征)用于检测大尺寸物体,而大尺寸特征图(浅层特征)检测小尺寸物体,实现效果提升

YOLOv3的网络结构?

  • 输入:416 x 416 x 3 的图片
  • 输出:三个输出,分布是 13x13x255、26x26x255、52x52x255,每个输出表示对不同感受野的特征图做目标检测,255 (3x85) 是每个网格使用 3 个先验框,每个先验框计算置信度 (1)、位置 (4)、类别 (80)

YOLOv3的正负样本判定?

  • YOLOv3 同样使用锚框的概念,根据先验框和gt框的 IOU 确定正负样本,每个 gt 框分配一个预测框
  • 位置判定正负样本: 但是 YOLOv3引入multi-head预测,不能再按照“映射中心”的方法给gt框分配先验框,因此使用gt框与所有先验框的IOU来分配先验框
  • 正样本: 任取一个gt框,与所有 head 的先验框计算 IOU,IOU 最大的预测框为正例。并且一个预测框,只能分配给一个 ground truth。例如第一个 ground truth 已经匹配了一个正例检测框,那么下一个 ground truth,就在余下的 4031 个检测框中,寻找 IOU 最大的检测框作为正例,ground truth 的先后顺序可忽略
  • 负样本: 正例除外,与全部ground truth的IOU都小于阈值,则为负例
  • 忽略样本: 正例除外,与任意一个gt框的IOU大于阈值,则为忽略样例

YOLOv3 多 head 情况下如何分配正样本?

  • 在Yolov3的训练策略中,不再像YOLOv1、YOLOv2那样,每个cell负责中心落在该cell中的ground truth。原因是Yolov3一共产生3个特征图,3个特征图上的cell,中心是有重合的
  • 训练时,可能最契合的是特征图1的第3个box,但是推理的时候特征图2的第1个box置信度最高。所以Yolov3的训练,不再按照ground truth中心点,严格分配指定cell,而是根据预测值寻找IOU最大的预测框作为正例

YOLOv3的损失函数?

  • 置信度损失: 计算正、负样本的损失

    1λobji=0N×Nj=031ijobjlog(cij)+λnoobji=0N1×N1j=031ijnoobjlog(1cij)]-1\lambda_{o b j} \sum_{i=0}^{N \times N} \sum_{j=0}^{3} 1_{i j}^{o b j} \log \left(c_{i j}\right)+\lambda_{n o o b j} \sum_{i=0}^{N_{1} \times N_{1}} \sum_{j=0}^{3} 1_{i j}^{n o o b j} \log \left(1-c_{i j}\right)]

  • 位置损失

    λboxi=0N1×N1j=031ijobj[(txtx)2+(tyty)2]+λboxi=0N1×N1j=031ijobj[(twtw)2+(thth)2]\lambda_{b o x} \sum_{i=0}^{N_{1} \times N_{1}} \sum_{j=0}^{3} 1_{i j}^{o b j}\left[\left(t_{x}-t_{x}^{\prime}\right)^{2}+\left(t_{y}-t_{y}^{\prime}\right)^{2}\right]+\lambda_{b o x} \sum_{i=0}^{N_{1} \times N_{1}} \sum_{j=0}^{3} 1_{i j}^{o b j}\left[\left(t_{w}-t_{w}^{\prime}\right)^{2}+\left(t_{h}-t_{h}^{\prime}\right)^{2}\right]

  • 分类损失: 使用 sigmoid 激活函数替代 YOLOv2 中的 softmax,取消了类别之间的互斥,可以使网络更加灵活

    λclass i=0N1×N1j=031ijobjc classes [pij(c)log(pij(c))+(1pij(c))log(1pij(c))]-\lambda_{\text {class }} \sum_{i=0}^{N_{1} \times N_{1}}\sum_{j=0}^{3} 1_{i j}^{o b j} \sum_{c \in \text { classes }}\left[p_{i j}^{\prime}(c) \log \left(p_{i j}(c)\right)+\left(1-p_{i j}^{\prime}(c)\right) \log \left(1-p_{i j}(c)\right)\right]

YOLOv3中的Darknet53?

  • 在 YOLOv2使用 Darknet19基础上加深网络,并且借鉴 ResNet的思想,添加了大量残差块 (residual block),模型的最大池化层也改为 stride=2 的卷积来实现

YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5 设置先验框的区别?

  • YOLOv1:没有设置先验框,而是使用 2 个框(任意框)直接回归框位置
  • YOLOv2:生成及设置先验框:通过聚类得到 5 个先验框,为每个网格放置 5 个先验框,使用 Kmeans 聚类:通过聚类得到 9 个先验框,(10×13),(16×30),(33×23),(30×61),(62×45),(59× 119), (116 × 90), (156 × 198),(373 × 326) ,每个尺度的网格放置 3 个先验框
  • YOLOv3:按照"小尺寸特征图 (深层特征) 用于检测大尺寸物体,而大尺寸特征图 (浅层特征) 检测小尺寸物体"的思想,前 3 个先验框使用为 52x52 使用;中间 3 个先验框为 26x26 使用;最后 3 个先验框为 13x13 使用
  • YOLOv4:YOLOv3 一致
  • YOLOv5:在开始训练之前对数据集核查,计算此数据集针对默认锚定框的最佳召回率,当最佳召回率大于或等于 0.98,则不需要更新锚定框;如果最佳召回率小于 0.98,则需要重新计算此数据集的锚定框