YOLO v2网络结构分析

原论文网址:《YOLO9000: Better, Faster, Stronger》 

项目地址:http://pjreddie.com/darknet/yolo/

1.Darknet-19 模型结构

2.YOLO v2 模型结构

YOLO v2网络结构分析_第1张图片

YOLO2网络中第0-22层是Darknet-19网络,后面第23层开始,是添加的检测网络。

说明:route层的作用是进行层的合并

         在第27层 直接添加了一个passthrough layer 得到26*26的细粒度的特征,然后将26*26*512的feature map的resize 变为 13*13* 2048。和原先13*13*1024的feature map拼接起来,这样就得到了多尺度的信息。这里mAP提高了1%。

30层输出的大小是13*13,是指把图片通过卷积或池化,最后缩小到一个13*13大小的格。每一个格子的output参数是125。所以最后输出的参数一共是13*13*125。

3.关于YOLOv2 边框预测计算

  上面说了最后输出参数是13*13*125,  是因为一共有13*13个格子,每个格子预测出5个bounding box,每个bounding box预测25个数,其中20个是class的probability,其余5个参数中有四个表示stx、sty、tw、th,这4个来识别边框的位置和大小,还有1个数是confidence,表示边框预测里有真正的对象的概率,所以一共是13*13*125个数。

125 = 5*25    ------》 25 =  (20 + 4 + 1)

 上图的左边可以看出,有5中类型的长宽比例。后面预测出stx、sty、tw、th,四个参数,再根据上图右边的计算就可以计算出预测出的box大小了,注意!上图右边里面的σ(tx)可以理解为stx,σ(ty)可以理解为sty。每一个输出的bbox是针对于一个特定的anchor,anchor其实是bbox的width及height的一个参考。pw和ph是某个anchor box的宽和高,一个格子的Cx和Cy单位都是1,σ(tx),σ(ty)是相对于某个格子左上角的偏移量。
 

4.关于损失函数

5.关于YOLOv2表现

6、YOLOv2相比YOLOv1的改进

6.1.Batch Normalization(批规范化BN层应用)

YOLO v2在每一个卷积之后增加了BN层,提高了网络训练的速度,加快了收敛,消除了对其他正则化的依赖,且正则化效果更好,使调参更简单,即使去掉Dropout层也不会产生过拟合。

6.2. High resolution classifier(高分辨率)
YOLO v1先使用224×224的分辨率在ImageNet上Fine Tune,而后为了提高定位精度,更改分辨率为448×448后,在VOC2007上继续训练,这在一定程度上干扰了Fine Tune的网络,需要重新调整参数适应新的分辨率。
v2直接使用448×448的分辨率在ImageNet上Fine Tune 10个epoch,一开始就使用了更高的分辨率。

6.3. Convolution with anchor boxes(基于卷积的候选区域)

anchor boxes其实就是有可能存在物体的候选区域,这里的anchor boxes其实是YOLOv2从Fast-RCNN系列检测算法借鉴来的。在Fast-RCNN中,先通过区域建议网络(RPN,仅含卷积层,不含全连接层)预测出潜在含物体的anchor boxes(候选区域)的偏移(注意是偏移而不是坐标)和置信度,再从这些挑出的anchor boxes中去检测物体。
作者在v2中发现自己在v1中吐槽过的RPN步骤效果还是蛮不错的,并且通过预测boxes的偏移量而不是坐标值可以简化问题,使网络更容易训练。
v2中去掉了全连接层,使用卷积来预测Anchor Boxes,并且去掉了v1网络中的一个池化层,以提高卷积输出的分辨率。

6.4. Dimension clusters(维度聚类)

Dimension clusters(维度聚类),YOLO v2中的这个改进是关于初始Anchor Boxes的大小和数量的。之前使用Anchor Box的系统都是手动设定初始Box的大小的,V2中作者使用k-means聚类的方法在训练集的物体边框数据集(注意不是图像本身,而是边框的数据)上得到了不同数量个Box,并作了对比实验,聚类的Box多了,会导致模型的计算量增大,错误率升高,Box少了会导致召回率降低。
经过实验,作者确定在他的训练数据集上聚类数量是5的时候是一个准确率和召回率的平衡值。
总之,作者在维度聚类这个点上优化了Anchor Boxes的赋值方式,包括数量和Box大小,通过在训练数据上的物体的边框数据集上经过5个分类的k-means的聚类,得到5个初始Anchor Boxes的大小。
所以咱们训练的时候,最好也根据自己的训练集的特点,生成自己的Anchor Boxes数据,作者的数据是 anchors = 1.08,1.19,  3.42,4.41,  6.63,11.38,  9.42,5.11,  16.62,10.52。


6.5. Direct location prediction(直接位置预测)
YOLOv2不去预测Boxes的偏移,而是采用跟YOLOv1中类似的方式,预测Boxes相对于网格单元位置的坐标,并通过逻辑激活函数将坐标值约束在[0,1]。
通过这个“相对坐标”到“绝对坐标”的优化,YOLOv2训练更容易,参数更容易学习,网络更稳定。

6.6.Fine-Grained Features(细粒度特征)

6.7. Multi-ScaleTraining(多尺度训练)

v1的输入是448×448,v2中加入了anchor Boxes,输入尺寸变成了416×416(为了获得奇数×奇数特征图),YOLO v2作者同时希望v2版本在不同尺寸输入图片上都可以稳健检测,所以作者在训练过程上进行了优化。
不同于固定输入网络的图片尺寸的方法,作者在训练过程中每经过10个epoch之后就会随机选择新的图片尺寸。YOLO网络图片尺寸更改使用的参数为32,每次把图像扩大或缩小32的倍数大小,最小的尺寸为320 * 320,最大的尺寸为608 * 608。接着按照输入尺寸调整网络进行训练。
这种机制使得网络可以更好地预测不同尺寸的图片,意味着同一个网络可以进行不同分辨率的检测任务,在小尺寸图片上YOLOv2运行更快,在速度和精度上达到了平衡。
 

你可能感兴趣的:(深度学习,目标检测)