时间来到yolo发布的几年后,我们可以看到yolo实际上是一个比较稚嫩的模型,每张图片划分了7X7的cell来预测98个bbox显然对于当今的计算机视觉目标识别是远远不够的。
而时间过去,深度学习领域出现了许多的tricks来提升网络性能,yolov2就是在这样的背景下诞生的。
yolov2是一篇比较偏向于工程类的文章,从他的身上我们可以看到许多其他论文的身影, 当然也可以学习到不少新的tricks。
我主要讲一下我觉得比较新颖的可以借鉴学习的一些方法:
1. anchor boxes代替全连接层
YOLOv2借鉴了Faster R-CNN中RPN网络的先验框(anchor boxes,prior boxes,SSD也采用了先验框)策略。RPN对CNN特征提取器得到的特征图(feature map)进行卷积来预测每个位置的边界框以及置信度(是否含有物体),并且各个位置设置不同尺度和比例的先验框,所以RPN预测的是边界框相对于先验框的offsets值。这部分可以参考RCNN论文。
2. kmeans聚类得到先验anchor boxes
这部分我写了文章,详情可见:
https://blog.csdn.net/hgj1h/article/details/121422788
3. Direct location prediction
作者引入了sigmod函数处理使得预测边界框的中心位置会约束在当前cell内部。
- Fine-Grained Features
也是一个很有意思的操作。YOLOv2的输入图片大小为 [公式] ,经过5次maxpooling之后得到 [公式] 大小的特征图,并以此特征图采用卷积做预测。 [公式] 大小的特征图对检测大物体是足够了,但是对于小物体还需要更精细的特征图(Fine-Grained Features)。因此SSD使用了多尺度的特征图来分别检测不同大小的物体,前面更精细的特征图可以用来预测小物体。YOLOv2提出了一种passthrough层来利用更精细的特征图。YOLOv2所利用的Fine-Grained Features是 [公式] 大小的特征图(最后一个maxpooling层的输入),对于Darknet-19模型来说就是大小为 [公式] 的特征图。passthrough层与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的2倍,passthrough层抽取前面层的每个 [公式] 的局部区域,然后将其转化为channel维度,对于 [公式] 的特征图,经passthrough层处理之后就变成了 [公式] 的新特征图(特征图大小降低4倍,而channles增加4倍,图6为一个实例),这样就可以与后面的 [公式] 特征图连接在一起形成 [公式] 大小的特征图,然后在此特征图基础上卷积做预测。