Improvements:
1. Batch Normalization:显著提高模型收敛速度, 不需要其他正则手段(比如Dropout)。给每个卷基层都增加BN后,mAP提高了2个点。
2. High Resolution Classifier:将图像分辨率从224 x 224扩大为448 x 448,finetune之后,mAP提高了4个点。
3. Convolutional With Anchor Boxes:将YOLO V1的全链接层删除了,用anchor boxes来预测bboxes。具体如下:
(1)移除一个pooling层,是的卷基层输出的分辨率更高。
(2)将图像分辨率收缩为 416 x 416,这样最终的feature map为13 x 13,边长是奇数,有一个中心cell。这样做是为了只用一个cell来预测中心的物体,而不用相邻的4个cell来一起预测。
(3)和YOLO V1相同,objectness prediction仍旧预测 ground truth 和 proposed box 的 IOU。但是,V2是在每一个 anchor box 上都会预测类别概率,如下图所示。V1只会预测98个boxes,但是V2预测超过一千个boxes,使得mAP从69.5下降到95.2,但是recall从81%提高到88%。
4. Dimension Clusters:YOLO在使用anchor boxes的过程中遇到了两个问题,第一个是box尺寸的选择:
(1)虽然网络能够学习调整box的坐标和尺寸,但是假如我们能提供更好的鲜艳,会使得网络能够更容易的做出好的预测。
(2)我们没有使用人工选择的box,而是在训练集上使用k-means聚类自动选择。
我们希望能通过anchor boxes获得好的IOU scores,并且IOU scores是与box的尺寸无关的,为此定义了新的距离公式:
d(box,centroid)=1−IOU(box,centroid)
实验结果表明,5种k-means生成的boxes的Avg IOU(61.0)就和Faster R-CNN的9种Avg IOU(60.9)相当。说明k-means方法的生成的boxes更具有代表性,使得检测任务更好学习。
5. Direct location prediction:YOLO在使用anchor boxes的过程中遇到的第二个问题是模型不稳定:
(1)在RPN中,网络是根据偏移量,预测box中心点的,公式如下:
假如tx=1,就会把box向右移动anchor box的宽度;假如tx=-1,就会把box向左移动anchor box的宽度。
这个公式有个问题,假如对tx和ty取值范围没有限制,那么在任意cell,预测出的box可以在整张图片的任意位置,导致模型需要很长时间才能收敛。
因此没有采用这个公式,而是预测box相对于cell的偏移,即把ground truth限制到0,1之间。我们使用logistic激活函数来限制输出在这个区间内。
网络在feature map每个cell预测5个bboxes。每个bbox预测5个坐标,tx,ty,tw,th和to。假设一个cell左上角的坐标是(cx,cy),bbox的先验宽度和高度是pw,ph,则预测结果为:
这个限制使得参数更容易学习,网络更稳定。Dimension Clusters,Direct location prediction和Anchor boxes使得mAP提高了5个点。
6. Fine-Grained Features:改进的YOLO模型最终在13 x 13的feature map做检测,但是检测小的物体,可能需要更细粒度的feature。Faster R-CNN和SSD都在不同尺度的feature map做预测。我们采用不同的策略,添加了一个passthrough层,将26 x 26分辨率下的特征融合起来。
类似于ResNet的Identity Mapping,passthrough层通过将相邻特征堆叠到不同的通道,将较高分辨率特征与低分辨率特征的信息融合。这使得26×26×512的特征图转换为与原始特征相连接的13×13×2048的特征图。YOLO V2的检测器在这个扩展的特征图的顶部运行,以便利用细粒度的特征。使得mAP提高了1个点。
7. Multi-Scale Training:YOLO V2只使用了卷基层和pooling层,因此可以动态调整输入图像的尺寸。我们希望YOLO V2对于不同尺寸图像的检测都有较好的鲁棒性,因此做了针对性训练。
训练时每迭代10次,就会随机选择新的输入图像尺寸。因为YOLO V2的网络使用的downsamples倍率为32,所以使用32的倍数调整输入图像尺寸{320,352,…,608}。训练使用的最小的图像尺寸为320 x 320,最大的图像尺寸为608 x 608。
这种策略让YOLO V2不得不学着对不同尺寸的图像都要预测得很好,这意味着同一个网络可以胜任不同分辨率的检测任务。在网络训练好之后,在使用时只需要根据需求,修改cfg文件中的网络输入图像尺寸(width和height的值)即可,使得检测速度和精度很容易折中。
检测网络结构: