YOLOv1
First, YOLO is extremely fast.Since we frame detection as a regression problem we don’t need a complex pipeline.Second, YOLO reasons globally about the image when making predictions. Unlike sliding window and region proposal-based techniques, YOLO sees the entire image during training and test time so it implicitly encodes contextual information about classes as well as their appearance.Third, YOLO learns generalizable representations of ob- jects. Since YOLO is highly generalizable it is less likely to break down when applied to new domains or unexpected inputs.
- YOLO很快,因为采用回归的方法
- YOLO会基于整个图片进行预测
- YOLO学到的图片特征更通用,更能适应新的领域
网络架构
- 输入图片大小:
- 24个卷积层+2个全连接层
- 采用
Leaky ReLU**函数,最后一层采用线性**函数 - 经过卷积层后的输出:
- 经过全连接层后的输出:
- reshape后:
对输出的解释:
所谓7x7是将图片分为了7x7的网格,对应的每个网格负责两个预测框,那么30是由,4代表,1代表是否处于被检测物体的置信度,如果没有物体在该框,则值为0,如果有物体在该框,则值的意义为预测框与gt box的IoU,20代表20个类别置信度(一个网格只预测一次类别置信度)。
test阶段,通过下式就可以得到每个格子类别特定置信度得分:
关于负责:
YOLO predicts multiple bounding boxes per grid cell. At training time we only want one bounding box predictor to be responsible for each object. We assign one predictor to be “responsible” for predicting an object based on which prediction has the highest current IOU with the ground truth. This leads to specialization between the bounding box predictors. Each predictor gets better at predicting certain sizes, aspect ratios, or classes of object, improving overall recall.
虽然每个方格只产生两个矩形框,其中与gt box之间的IoU更大的预测框来负责这个cell的物体类别,而其它边界框认为不存在目标。即每个方格只输出一个矩形框,格子数是49,那么最多预测49个物体。这就造成了方法的缺点对邻近小物体的识别效果差,例如集群的小鸟。
Loss
所有的Loss都是平方和误差函数,这样易于去优化,但是如果让8维的位置损失和20维的类别损失的系数相等是不合理的,并且不包含物体的比包含物体的多得多,所以引入了修正系数、 分别表示坐标回归损失的系数和不包含物体的回归框类别损失的系数,表示第个里是否有物体,表示第个里第个预测框是负责这个的物体类别。具体我们一项一项来解释:
- 第一项表示坐标回归损失:之所以对取
平方根是因为小物体的预测偏差带来的损失应该比大物体的预测偏差损失大。在标签中负责该物体的那些格点处,为 1 ;若格点不含有物体或者不负责该物体,为 0。
Note:预测的回归框实际上预测的是相对每个边界的坐标,所以我们需要先给预测框加偏置后再和gt box做计算。 - 第二项表示预测框的置信度损失:当该不负责物体或者没有物体时,置信度的标签为0,的标签为1;若含有物体时,该置信度的标签为预测框与真实物体框的IoU(希望最好的话,可以将IOU取1),而的标签为0。
- 第三项表示类别损失:标签是关于20个类别的
one hot形式。
YOLOv2
| YOLO | mAP(voc 2007+2012 train) | fps |
|---|---|---|
| v1 | 63.4 | 45 |
| v2 | 78.6 | 40 |
改进策略
Batch Normalization:
Batch Normalization可以提升模型收敛速度,而且可以起到一定正则化,降低模型的过拟合。在YOLOv2中,每个卷积层后面都添加了Batch Normalization层,并且不使用droput。使用Batch Normalization后,YOLOv2的mAP提升了2.4%。
High Resolution Classifier:
YOLOv1在采用分类模型预训练后,将分辨率增加至 ,并使用这个高分辨率在检测数据集上finetune。但是直接切换分辨率,检测模型可能难以快速适应高分辨率。所以YOLOv2增加了在ImageNet数据集上使用输入来finetune分类网络这一中间过程(10 epochs),这可以使得模型在检测数据集上finetune之前已经适用高分辨率输入。使用高分辨率分类器后,YOLOv2的mAP提升了约4%。
Convolutional With Anchor Boxes:
- 问题:YOLOv1最后采用的是全连接层直接对边界框进行预测,其中边界框的宽与高是相对整张图片大小的,而由于各个图片中存在不同尺度和长宽比的物体,YOLOv1在训练过程中学习适应不同物体的形状是比较困难的,这也导致YOLOv1在精确定位方面表现较差。
- 解决:引入先验框,输入变为,所以最终特征图大小为,这样特征图恰好只有一个中心位置,大物体的中心点往往落入图片中心位置,所以要
保证特征图大小是奇数。YOLOv2使用了anchor boxes之后,每个位置的各个anchor box都预测一套分类概率值,这和SSD比较类似(但SSD没有预测置信度,而是把background作为一个类别来处理)。mAP虽有稍微下降,但召回率大大提高,因为可以预测上千个预测框(之前是49个)。
Dimension Clusters:
- 先验框维度合适的话模型更容易学习
- YOLOv2采用k-means聚类方法对训练集中的边界框做聚类
距离指标:
值代表相对于预测的特征图大小
COCO: (0.57273, 0.677385), (1.87446, 2.06253), (3.33843, 5.47434), (7.88282, 3.52778), (9.77052, 9.16828)
VOC: (1.3221, 1.73145), (3.19275, 4.00944), (5.05587, 8.09892), (9.47112, 4.84053), (11.2364, 10.0071)
New Network: Darknet-19:
使用Darknet-19之后,YOLOv2的mAP值没有显著提升,但是计算量却可以减少约33%。
Direct location prediction:
沿用YOLOv1的方法,预测边界框中心点相对于对应cell左上角位置的相对偏移值,是cell的左上角坐标。计算后要除以特征图的大小,然后再乘上图片的宽度和长度就可以得到边界框的最终位置和大小。
Fine-Grained Features:
利用passthrough层来利用更精细的特征图,从而用来预测小物体。
Multi-Scale Training:
在训练过程中每间隔一定的iterations之后改变模型的输入图片大小,由于YOLOv2的下采样总步长为32,输入图片大小选择一系列为32倍数的值。
训练
- 对于训练图片中的ground truth,若其中心点落在某个cell内,那么该cell内的5个先验框所对应的边界框负责预测它。
- 具体是哪个边界框预测它,需要在训练中确定,即由那个与ground truth的IOU最大的边界框预测它,而剩余的4个边界框不与该ground truth匹配。
- 对于某个ground truth,首先要确定其中心点要落在哪个cell上,然后计算这个cell的5个先验框与ground truth的IOU值,YOLO中一个ground truth只会与一个先验框匹配(IOU值最好的)。