目标检测学习-YOLO-v2

改进

YOLO v2相对于v1做了不少改进,使得速度和准确率都有所提升,具体的看下面的介绍,新版的口号叫做更好,更快,更强。
目标检测学习-YOLO-v2

Batch Normalization(批量归一化)

批量归一化,其实就是一种在每个卷积层输入数据前,把数据进行归一化,希望数据分布基本相似,避免了模型总是要对于不同分布的数据进行适应,加快了训练速度,同时还能避免梯度爆炸和梯度消失的问题,且有一定的正则化作用,避免过拟合,取消了Dropout使用。

High Resolution Classifier(高分辨率分类器)

为了适应高的分辨率,在训练的最后几个epoch用448x448的分辨率进行调整,以便于适应高分辨率。

Convolutional With Anchor Boxesr(带有锚框的卷积)

用类似于RPN网络的锚框来进行预测边界框,删除了全连接层,缩小了网络,减少了参数,输入为416x416,最后卷积为13x13,为奇数,为了让中心点只属于1个格子,而不是周围的4个格子,否则要用4个格子来预测物体了,提高了效率。另外yolo v1的特征是关于1个格子里5xB+c个特征,而v2是每一个预测框都有5+c个特征,从关注格子到关注每一个框了。

Dimension Clusters(维度聚类)

解决挑选框的问题,利用了聚类的方法来选出比较合适的框,发现k=5的时候最为合适。距离定义为:
d(box,centroid)=1IOU(box,centroid)d(box,centroid)=1-IOU(box,centroid)
box是要聚类的框,centroid的分类的中心。这样就是以交并比来作为衡量的标准,比较合适,而不是单一的欧拉距离。
目标检测学习-YOLO-v2

Direct location prediction(直接位置预测)

x=(txwa)xax = (t_x ∗ w_a) - x_a
y=(tyha)yay = (t_y ∗ h_a) - y_a
这个是先前的公式,当txt_x等于正负1时,会移动锚框的宽度,比较大,而我们希望的时得到网格单元的相对位置0-1就可以。

我们给每个网格5个边界框,每个框5个维度tx,ty,tw,th,tot_x,t_y,t_w,t_h,t_o,单元格距离图像左上角偏移(cx,cy)(c_x,c_y),边界框的先验宽度pw,php_w,p_h,预测为:

bx=σ(tx)+cxb_x=\sigma (t_x)+c_x
by=σ(ty)+cyb_y=\sigma (t_y)+c_y
bw=pwetwb_w=p_we^{t_w}
bh=phethb_h=p_he^{t_h}
Pr(Object)IOU(b,Object)=σ(to)Pr(Object)*IOU(b,Object)=\sigma (t_o)

目标检测学习-YOLO-v2

Fine-Grained Features(细粒度特征)

为了能够检测小的物体,使用了类似残差网络的那种方式,直接将浅层的特征和深层的特征合并作为输入,使得能一定程度的保留小物体的特征。

Multi-Scale Training(多尺度训练)

为了在不同的分辨率上检测,把全连接层改成了卷继承,尝试了一系列不同的分辨率训练,每几个批次换不同的分辨率,以便于网络适应多分辨率。

Darknet-19

提出了一种新的网络结构,更加小,更加快。参考了很多经典网络,用了较多的3x3的卷积升维,用了1x1进行降维。
目标检测学习-YOLO-v2

Hierarchical classification(分层分类)

为了让ImageNet和COCO的数据集融合,提出了一种分层分类的概念。即构建一棵树,让每一类都可能有的子类作为他的分支,直到没有子类为止,这样就可以融合两个数据集:
目标检测学习-YOLO-v2
从最开始的根节点出发,选择概率最大且超过一定阈值的子树,一层层的找下去,直到概率小于阈值,说明不是该类,或者没有子类了。从概率的计算来说,就是条件概率,比如一只金毛,那他的概率应该是动物,狗,金毛这条路线,所以应该是这样:
Pr()=Pr()Pr()Pr()Pr()Pr(金毛)=Pr(物体)*Pr(动物|物体)*Pr(狗|动物)*Pr(金毛|狗)
其实就是很多个子类的softmax再softmax:
目标检测学习-YOLO-v2

yolo v2整体来说都是不错的:
目标检测学习-YOLO-v2

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自网络,侵删。