yolo系列是目标检测中一个具有传承的系列。这里的“传承”就是尤为关键的——在现有的基础上分析与提高。这也是最难能可贵的。就像我们做研究,沿着一个方向,能一直前进。这也是最快乐的。通过这一个系列的对比,让我们找到做研究,做算法的大方向。

YOLOV1

在faster rcnn之后出现,提出了一种端到端的训练方式,想法和思路都更加简单清晰。这也是yolo系列的开山之作,这里我们需要主要理解yolo系列目标检测算法的思想——目标中心点落到哪个cell,就由哪个cell进行回归。

同时,这里我们会抛开一些论文中的细节,只保留算法最核心的部分(而这也是一个算法的开端,也是最重要的地方)。我们通过数据的方式来分析。

2.1 网络结构与原理

【目标检测】one-stage YOLO系列 | YOLOV1 | YOLOV2 | YOLOV3 | YOLOV3-tiny_损失函数

  1. 特征采集
    这里最核心的就是网络通过一个CNN网络采集特征之后,输出一个7* 7 * 30的矩阵

  2. 求解损失
    所有的深度学习算法,特征采集模块的输出都是有“实际意义”的。这里的实际意义是:每一个数字都有一个意义。而yolo输出的7* 7 * 30表示的意义,可以由以下几点来展开:

  • 7 * 7 ,就表示把原图平均分成7 * 7的49块小矩形块
  • 30表示:x1,y1, w1, h1, confidence1, x2, y2, w2, h2, confidence2, label1, label2…label20
    【目标检测】one-stage YOLO系列 | YOLOV1 | YOLOV2 | YOLOV3 | YOLOV3-tiny_损失函数_02
    整个合起来解释就是:一个小方块(有的叫一个点)预测2个box和20个label(其实这就是yolo的主要思想了,这就完了???No)

核心思想出来了,这里就要自己想一下,怎么求损失函数呢?怎么回归呢?所以这一步就是要把计算loss的target找出来。

我当时想的就是:

  • 计算物体的中心,如果中心落在某个小方块中就由方块对应的点来回归

但是,有个问题:物体的中心落在小方块中,但是小方块有两个输出box,由哪一个box负责回归呢?

答案:在训练阶段,对于物体中心点落在网格中的输出,计算两个bounding box和target box的iou,由iou较大的bounding box负责回归target box

2.2 损失函数

我觉得不是核心思想。可以自己有想法了再去看论文/程序的实现。我觉得box的回归可以用:L1loss, iouloss, diouloss
分类的损失可以用:交叉熵,L1loss

YOLO V2

reference

YOLO V3

1. 模型结果

【目标检测】one-stage YOLO系列 | YOLOV1 | YOLOV2 | YOLOV3 | YOLOV3-tiny_损失函数_03

  • Backbone 下图给出了YOLOv3的网络架构图,在原始YOLOv3中,骨干网络为DarkNet53并用于提取多尺度特征。在这里作者采用ResNet50-vd替换DarkNet53并作为PP-YOLO的骨干网络。考虑直接替换会损害YOLOv3的性能,作者采用形变卷积替换ResNet50-vd中的某些卷积层。注:DCN并不会导致参数量与FLOPs的增加,但会影响推理速度。因此,为平衡精度与效率,作者仅对最后一个阶段的卷积进行替换。此时骨干网路为ResNet50-vd-dcn,输出特征分别为C3, C4, C5。

  • Detection Neck 作者采用FPN构建特征金字塔进行特征的横向连接,C3, C4, C5被送入FPN模块,我们采用表示输出特征,见上图。

  • Detection Head YOLOv3的检测头非常简单,它包含两个卷积层:3x3卷积后接1x1卷积用于得到最终的预测。预测的输出通道数为 3(K+5),其中K表示类别数。在预测的特征图每个位置上赋予三个不同的锚点,对于每个锚点,前K个通道表示K类的预测概率,后续4个通道表示位置,最后通道表示目标得分。对于分类与定位而言,其损失函数分别为CrossEntropyLoss与L1Loss。

YOLO V3-tiny

为了写代码时,和原理相对应。

1. 模型图

yolov3-tiny只有两个分支,特征图大小分别为13×13, 26×26
【目标检测】one-stage YOLO系列 | YOLOV1 | YOLOV2 | YOLOV3 | YOLOV3-tiny_目标检测_04

2. 网络输出

【目标检测】one-stage YOLO系列 | YOLOV1 | YOLOV2 | YOLOV3 | YOLOV3-tiny_卷积_05

  • 网络输出(tx,ty,tw,th,t0,class1, class2 …),(bx, by, bw, bh)是目标的真实中心,宽高
  • o(tx), 是sigmoid
  • pw,ph是anchor的宽高