
YOLO系列目标检测
¶基于锚点框的目标检测方法
该方法为空间每一个位置设定多个矩形框,以便尽可能地覆盖图像中所有存在的物体。该方法可分为两类:两阶段目标检测方法(e.g. R-CNN,Fast R-CNN,Faster R-CNN)和单阶段目标检测方法(e.g. YOLO,SSD)

¶YOLO v1
Redmon, Joseph, et al. “You only look once: Unified, real-time object detection.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.
¶预测阶段

由下图的预测示例中,对于每个图片分成 7 × 7 的 grid cell
每个 grid cell 包含:
预测出两个 bounding box
20个类别的条件概率:
Class Score ~ P(obj is class_i | obj in box)可理解为:在当前grid cell下已经包含物体的条件(即它是候选框)下,各类别的概率
每个 bounding box 对应着五个值:
x,y,w,h,c(相对于grid cell左上角格点的中心点坐标及宽高,置信度)
所以,输出结果为:

置信度(Confidence Score):
训练阶段: 即为 Confidence Score 的标签值,其中, 的标签值为 0 或 1, (Bounding Box与人工标注框的交并比)则按实际计算
我们希望,预测出来 Confidence Score 越接近于标签值越好
显然,负责预测该物体的Bounding box,其标签值直接等于 (即);相反地,
预测阶段:回归出多少就是多少,无需计算
¶预测阶段后处理
(1)遍历所有grid cell,计算每一个bounding box所对应的 20 * 1 尺寸的张量(总共 7 * 7 * 2 个张量)

(2)对于每一个类别,判断所有张量(bb)在该位置(该类别)下的元素值是否低于阈值,若低于则置0

(3)对于每一个类别,使用NMS算法去除冗余的bboxes
NMS(Non-Maximum Suppression)算法流程如下:
1 | |

¶训练阶段
损失函数 loss function 中每一项均是平方和误差——将目标检测问题视为回归问题
- 负责检测物体的 bbox 中心点定位误差
- 负责检测物体的 bbox 宽高定位误差
- 负责检测物体的 bbox confidence 误差
- 不负责检测物体的 bbox confidence 误差
- 负责检测物体的 grid cell 分类误差

小细节:
- 要远高于
由于图片中大部分 grid cell 中并不会包含物体,将会导致这些 grid cell 的置信度会趋向于0,其梯度也会比包含物体的 grid cell 更有影响力。
为此,需要加强「定位误差损失」的权重,削弱「不包含物体的bbox置信度损失」
- 宽高误差使用了平方根
没有使用绝对误差,而是使用了平方根,从而使得小框对误差更加地敏感(联系 的导数变化—— 越大,其导数越小)
特点:
速度快但mAP较低,定位性能较差,召回率较低(该检的检不出),小目标或密集目标检测效果较差
¶YOLO v2
Redmon, Joseph, and Ali Farhadi. “YOLO9000: better, faster, stronger.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2017.
网络结构:https://ethereon.github.io/netscope/#/gist/d08a41711e48cf111e330827b1279c31
¶Batch Normalization
参考链接:https://zhuanlan.zhihu.com/p/34879333
问题: Internal Covariate Shift——深层网络训练的过程中,由于网络中参数变化而引起内部结点数据分布发生变化
上层网络需要不停调整来适应输入数据分布的变化,导致网络学习速度的降低
中间层变量可能具有更广的变化范围,若一个层的可变值是另一层的100倍,则可能需要对学习率进行补偿调整
网络的训练过程容易陷入梯度饱和区,减缓网络收敛速度
训练算法: 对于一个 mini-batch:,有两个超参数:
- 求出mini-batch的均值
求出mini-batch的方差
正则化
Scale and shift:引入 与 是为了恢复数据本身的表达能力,对规范化后的数据进行线性变换
特别地,当,时可实现等价变化且保留原始输入特征的分布信息
测试/预测阶段:由于预测阶段样本数量少,我们可使用整个训练样本的统计量来对Test数据进行归一化。因此训练时需要保留每组mini-batch训练数据在网络中每一层的 与,计算均值与方差的无偏估计:
在训练过程中,我们无法得知使用整个数据集来估计平均值和方差,所以只能根据每个小批次的平均值和方差不断训练模型。
意义:
- 更容易训练,允许较大的学习率,加快收敛
- 改善梯度,远离梯度饱和区
- 对初始化不敏感
- 正则化作用,避免过拟合
¶高分辨率分类模型(High Resolution Classifier)
为了适应高分辨率的输入图像,先在 分辨率使用 ImageNet 数据集上训练 10 epochs,再在目标检测训练中进行微调

¶Anchor
将 YOLOv1 最后的全连接层去掉、部分汇聚层去掉(更高分辨率)
输入图像尺寸变为,经过一系列的下采样(倍数为),输出的Feature Map 中包含 的 grid cell
- 每个 grid cell 包含:
- 预测出 个 Anchor Box
- 每个 Anchor Box 对应着 个值: 个类别的条件概率
- 每个 Anchor Box 已预先设置好比例(先验框)
所以,输出结果为
总性能下降, 增大, 降低(预测框个数大大增加)
Anchor Boxes 机制的后处理
Anchor Boxes 的尺寸(长宽比)需要手动挑选——训练集中进行 K-Means 聚类,挑选出若干类的合适的尺寸比例(调参:5)

距离度量指标,不使用欧氏距离(大框错误更多),使用如下式子:
候选框中心点坐标公式不受约束导致模型不稳定——预测相对于 grid cell 的偏移量(通过 函数进行限制,使得其中心约束在grid cell 之内,大小不一定)
bounding boxes 的尺寸计算公式:

虚线框为 Anchor ,蓝线框为预测框
即为预测框的, 即为 grid cell 左上角, 与 为 Anchor 的宽高
¶passthrough 层检测细粒度特征(Fine-Grained Features)
输入图像经过多层网络提取特征后输出 Feature Map,较小的目标的特征有可能会被忽略掉。
为了检测更小的目标, 引入了 passthrough layer ——在最后一个 pooling 之前,其 Feature Map 尺寸为 ,将其 拆 ,直接传递(passthrough)到 pooling 后(并且又经过一组卷积)的Feature Map,两者叠加到一起作为输出的 Feature Map

¶多尺度图像训练(Multi-scale training)
YOLOv2 模型中仅使用卷积层和池化层,因此输入图像的尺寸不局限于,为此,不妨可以利用该特性,增强模型的鲁棒性,采用多尺度训练策略:
每隔 10 个 batch,输入图像的尺寸就从该尺寸集合中进行随机挑选: (对应输出的Feature Map 尺寸为),使网络能够适应各种尺度的目标检测
尺寸集合中均是 的倍数,是因为 YOLOv2 下采样倍数为