YOLO 系列总结
相比 RCNN系列,YOLO 系列的主要缺点:
- 识别物体位置精准性差;
- 召回率低;
主要原因是每个网格预测固定数量的物体使候选框数量减少;
网络结构
Backbone
YOLO v1
- 改进 GoogLeNet,用 1x1 和 3x3 卷积核代替 inception modules;
- Leaky ReL:f(x)=max(x, 0.1x);
YOLO v2 —— darknet19
YOLO v3 —— darknet53
- resnet 思想,添加了 residual block,降低了梯度消失的风险;
- 不使用 pooling 层,而是用步长为 2 的卷积层代替,避免了信息丢失;
Concat Layer
YOLO v1 —— 无
YOLO v2 —— 维度拼接,一次,第 16 层 26x26x512 → 13x13x2048 与第 24 层拼接;
YOLO v3 —— 维度拼接,两次
Fully Connected Layer
YOLO v1 —— 两层全连接层;
YOLO v2 —— 无(大大减少了参数规模);
YOLO v3 —— 无
Upsample Layer
YOLO v1 —— 无
YOLO v2 —— 无
YOLO v3 —— 非线性插值法,上采用两次;
Anchor Box
YOLO v1 —— 无
YOLO v2
- k-means 聚类对数据集的ground truth聚类;
- 聚类的计算方式:使用 IOU 参与距离计算,若使用欧氏距离会使较大的 BBox 比小的 BBox 产生更大的误差,而 IOU 与 BBox 尺寸无关;使用聚类方法达到相同的 IOU 结果时所需的 anchor box 数量更少。
- 5 个尺度的 anchor boxes,使用 1 种尺度的 feature map;
YOLO v3
- k-means:同 YOLO v2
- 9 个尺度的 anchor boxes,使用 3 种尺度的 feature map,每个 feature map 分配 3 个尺度的 anchor boxes;
Bounding Box
YOLO v1 —— grid cell
- 直接预测 BBox 的位置和大小;
- 一个 grid cell 预测一个类;
YOLO v2 —— anchor box + offset + sigmoid activation
- 预测 BBox 相对于 anchor boxes 的偏移量;
- 一个 anchor box 预测一类,解决临近物体检测效果不好问题;
- offset:相较于直接预测的 BBox 位置,预测物体的偏移量,更易稳定收敛;
- sigmoid activation:当预测的 region proposal 的中心点相对于 anchor boxes 中心的偏移量较大时,不好收敛,导致模型在训练初期不稳定。将预测值加以 sigmoid 运算,将 region proposal 的中心点限定在 anchor box 的中心点所在的 grid cell 里;
YOLO v3 —— 同 v2;
模型输入
数据增强
YOLO v1
- 饱和度
- 曝光度
- 色调
- 抖动
YOLO v2
- 同 YOLO v2;
- 反转180°;
- 多尺度训练;
YOLO v3 —— 同 v2;
图像输入大小
YOLO v1 —— 预训练模型输入大小为 224x224,检测模型输入大小为 448 x 448;
YOLO v2 —— Multi-Scale Training:每个 10 个 batches 随机选择一种分辨率输入(320~608,32的倍数);
YOLO v3 —— 同 v2;
模型输出
Output Shape
YOLO v1
- 每个 grid cell 预测一个类别概率;
- S × S × (B × [x, y, width, height, confidence] + C);
- 7x7x(2x5+20);
YOLO v2
- 每个 bbox 预测一个类别概率;
- S × S × B × ([x, y, width, height, confidence] + C);
- 13x13x(5x(5+80));
YOLO v3 —— 同 v2;
训练细节
防止过拟合
YOLO v1 —— 也使用了 BN,同时在 FC 中使用 dropout
YOLO v2 —— 取消 dropout 均使用 BN:提升模型泛化能力的同时使得模型更容易收敛;
YOLO v3 —— 同 v2;
优化器
YOLO v1 ——
YOLO v2 —— SGD
- learning rate = 0.001
- weight decay = 0.00005
- momentum = 0.9
YOLO v3
损失函数
Obj Loss
- 用于判断对应区域是否为物体的损失;
- One-Stage 目标检测算法的正负样本不均衡的问题比较严重,对于设计损失函数还会有一些针对创新;
Cls Loss
YOLO v1
YOLO v2 —— Softmax Loss
YOLO v3 —— Logistic Loss
-
这个改进主要是用于多标签分类。Softmax 输出的结果有互斥性,只能预测一类,而如果一个物体有多个标签(如:人和女人),Softmax 是做不到的。
-
Softmax 可被独立的多个 logistic 分类器替代,且准确率不会下降。分类损失采用 binary cross-entropy loss.
Loc Loss
YOLO v1 —— 对宽高都进行开根,使得预测相同的偏差时更小的框产生更大的损失;
YOLO v2 —— 使用 $2 - W_{ij}*h_{ij}$,使小物体的惩罚比大物体重;
YOLO v3 —— 同 v2;