【CV经典模型-Detection】YOLO v2

basic idea:

yolo最大的问题有两个:一个是recall较低,另外一个是localization不准确。与一般的增加网络复杂度和深度的思路不同,yolo v2 希望能保持yolo网络处理速度快的优势。因此,v2在不扩大网络的基础上,使用了一些技巧来使模型更容易学到有用的features。
接下来从模型的最终效果,处理速度和训练方法三方面来总结一下yolo v2使用到的算法和技巧。

Performance(better):

Batch Normalization

BN 可以使每层layer的输入在训练过程中保持分布一致,避免了随着batch不同,输入分布随之改变,而加大神经元的学习难度。在yolo v2上,这体现于加了BN之后,模型收敛更快。并且BN 也可以看作是在神经元之间引入了额外的依赖性或者说限制,迫使模型更简单,也可能部分代替正则化和drop out的工作。

High resolution detection

和很多其他的CV模型一样,yolo也使用了开源数据集做transfer learning。和之前不同的是,v2使用了和后续detection数据集相同的高分辨率的图片做预训练,使模型不用调整参数以适应新的分辨率,略微减轻了task的难度。

Anchor box with prior: k-means for box dims

yolo之前是不限制预测的bounding box的比例和大小的,唯一的先验信息是bounding box的中心落在对应的grid cell中。这使得预测的自由度太高,而所获的信息又太少。对于训练集中较少出现的大小和比例的bounding box,预测起来便更加困难。
因此v2借鉴了Region CNN的思想,引入了先验知识,为每个grid cell规定了k个(文献中k=5)比例和尺寸固定的anchor box。预测时并不直接预测box的起始位置和宽高,而是预测起始位置相对于grid cell位置的偏移和宽高的缩放系数。这一操作引入了先验知识,减小了task的难度。在使用了这个方法之后,模型的recall有明显的提升。
当然,要正真发挥Anchor box的作用,每个Anchor box的尺寸和比例需要仔细设计。文中使用了k-means聚类算法来产生5个cluster,把每个cluster的平均比例尺寸作为一个Anchor box。值得一提的是,为了和之后的detection配合,聚类使用的距离metric是1IOUclusteri,ground truthj1- IOU_{cluster_i,ground\ truth_j}

Predict offset to each grid cell(5 d)

具体来说,模型在每个grid cell上会预测5个bounding box,并且与之前不同,每个bounding box都有自己的objectness和conditional class probability,这样一来同一cell的bounding box之间便不会相互影响。
每个bounding box会对应5个输出:tx,ty,tw,th,t0t_x,t_y,t_w,t_h,t_0
最后需要的bounding box的中心位置bxby(b_x,b_y),宽高bwbh(b_w,b_h),以及它包含每类物体的概率Pr(ObjectclassiObject)IOU(Object,b)Pr(Object\in class_i|Object) * IOU(Object, b)可以由如下公式算得:

bx=σ(tx)+cxb_x=\sigma(t_x)+c_x
by=σ(ty)+cyb_y=\sigma(t_y)+c_y
bw=pwetwb_w=p_w*e^{t_w}
bh=phethb_h=p_h*e^{t_h}
Pr(ObjectclassiObject)IOU(Object,b)=σ(t0)Pr(Object\in class_i|Object) * IOU(Object, b) =\sigma(t_0)

cxcy(c_x,c_y):此cell相对于feature map左上角的offset。
pwph(p_w,p_h):此anchor box的先验宽高。
注意:

  • grid cell的尺寸做过归一化,每个cell的大小为1*1。因此每个属于此grid cell的bounding box的中心位置bxby(b_x,b_y)与grid cell起始位置cxcy(c_x,c_y)之间的偏差一定小于1。
  • IOU(Object,b)IOU(Object, b)代表了此bounding box包含物体的概率,对应于yolo中的Pr(Objectness)Pr(Objectness)。公式中的ObjectObject是指中心落在此grid cell中的任意ground truth。只关心是否包含物体,因此ground truth的类别不限。
  • Pr(ObjectclassiObject)Pr(Object\in class_i|Object):在bounding box包含物体的情况下,此物体属于某一类的概率。

Passthrough layers for fine features

为了能得到分辨率更高的信息,v2设置了Passthrough layers把模型前部分layer的高分辨率输出(262626*26)连接到后部分,与之后的低分辨率输出(131313*13)融合/重叠起来。融合方法是把高分辨率feature map上临近的4个feature重叠起来,成为一个拥有4倍channels数目的新feature,从而减小map的二维尺寸使其可以叠加。
例如:高分辨率的feature map从 262632131312826*26*32\Rightarrow 13*13*128 后,即可与低分辨率的feature map重叠。

Train on image with different size


Speed(faster):

  • vgg16:
  • googlenet: Inception module with dimension reductions
  • darknet:Global average pooling, 1x1 conv for channel reduction, batch normalization

training methods (stronger):

  • joint training:
    • classification data:
      只反向传播loss中条件类概率的部分
    • detection data:
      反向传播整个loss的error
  • multi-label dataset: structual label / multi-label / word tree
    -很有趣实用的话题,怎么使用多个数据集来训练同一个模型。主要要解决数据集之间的标签不一致的问题。 比如同样是‘狗’这一类别,在一个数据集里可能是‘柴犬’,另外一个数据集里可能是‘动物’,他们之间有层级关系。使用最小的effort来统一这些标签,使数据集间有一致性。
  • loss function && classification part: ???
    具体的loss公式文中没有提到,而且关于分类的部分,论文原话是“The network predicts 5 coordinates for each bounding box”。根据我对这句话的理解,每个bounding box应该是只输出一个值t0t_0来表示包含某类物体的概率,而不是我之前以为的一个维度为类数目的vector。这一点让我费解,之后研究清楚了补上。

Results:

在这里插入图片描述

Reference:

v2: https://arxiv.org/abs/1612.08242

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章