yolov2学习笔记

yolov2学习笔记

  • 关于anchor box的理解
  • YOLOv2中用的一些trick
    • better
    • faster
    • stronger

关于anchor box的理解

对于YOLOv2中的anchor box我是这样来理解的:
首先,类似于v1同样如果物体的中心落到哪个grid cell里面,就让这个grid cell负责预测物体。当然一个grid cell文中是产生了5个anchor box,也是用交并比更大的那一个负责产生预测框,然后用产生的预测框来和真实的框来计算损失的操作,从而进行梯度下降,优化网络参数。这里的anchor box实际上就相当于对于预测框进行一个约束,这样的话,避免网络最开始输出的框和真实框相差比较大,从而使得网络难以收敛。
因为YOLOv2的anchor box的大小,是从训练集中聚类得到的,所以说他们和真实的框的大小是比较相近的。
其他的算法中用到的anchor box也是这个原理,只不过anchor box的大小不一定是通过聚类得到的,有可能是根据经验等等得到的。

YOLOv2中用的一些trick

better

1.在提取特征的过程中,每一层卷积层后面都加了BN。

2.用更高分辨率的图片进行预训练。(ImagNet中448x448的图片进行预训练)

3.用AnchorBox替换v1网络中的全连接层。

4.Dimension Clusters。就是在用AnchorBox的时候,事先的框的大小,并不是人为指定的,而是将训练数据中的所有框都拿出来,然后进行聚类,你要用几个AnchorBox聚类过程中的k就设置为几。
聚类的过程中,必须选用一下距离函数。这里的距离采用交并比。选用这个的目的是,使得每个框产生的误差不受框的大小的影响。用欧几里得距离,大框就会比小框产生更多的误差。

5.Direct location prediction:
其他流行的位置检测算法一般用如下公式计算(Faster-rcnn):
网络中输出的是tx和ty,这两个值实际上就是anchor和物体真实的框之间的一个偏移值,就是让预测出的框和anchor box的偏移值尽可能的接近实际的情况。
yolov2学习笔记_第1张图片
作者认为,这样预测offset,会导致模型在训练过程中的不稳定,尤其是模型在训练初期。
在阅读网上找的一篇关于yolov1的代码,针对预测框是这样来算的,就是直接预测了一个0到1之间的数字,作为归一化后的坐标。target在构造的时候也是,用实际的x,y直接除以原图的w和h,这样直接就得到归一化后的target。这就会导致一个问题,最左上角这个grid cell,他预测出来的的bounding box可能在整张图片的右下角。换句话说就是一个grid cell预测出来的bounding box,会在整幅图的任何地方。作者认为这样会导致模型在训练过程中的不稳定性,因此在v2中特意解决了这个问题。
用的就是如下公式:
其中tx和ty可以是任何数,经过一个sigmod函数后,落在0-1之间,这样其实就将预测出来的的框的中心,直接限制在对应的grid cell里面了。
yolov2学习笔记_第2张图片
6.Fine-Grained Features。就是增加了一层,将13x13前一层的26x26x512变成13x13x2048的结构。具体操作可能是直接将特征图切两刀,然后再拼接在一起。或者是用一个4x4的框来遍历整个feature map,从而将其分成4部分。
这样做的原因是作者认为,一些小目标的物体,在卷积的过程中,直接丢失了,所以这里没有用max pooling等方式来将其变成13x13的feature map。

7.Multi-Scale Training 。就是在训练过程中,不断改变(文中是每10个batch)输入图像的大小,进行训练。图片的大小设置为32的倍数,从320开始。因为网络结构中,没有全连接层,只有卷积和池化,这就导致,可以随便改变输入图片的大小,只要满足是32的倍数即可。
比如说是320x320,这样得到的就是10x10,假设每个grid cell有5个anchor box,那么一共就有500个预测结果。

8.为了提高速度,作者自己提出了一种backbone,darknet-19。
yolov2学习笔记_第3张图片
最后输出的是一个13x13x125维度的tensor。一共有13x13个grid cell,每个产生5个anchor box,每个anchor box都有4个坐标参数和1个置信度,以及20个类别概率。==注意:==这里和v1不同,每个grid cell对应的5个anchor box都会单独预测一个类别概率。这是因为在v1中,虽然每个grid cell都产生两个bounding box,但是只有置信度最大的那个用来预测物体了。但是v2中不同,每个anchor box都有可能用来预测物体。

faster

作者自己提出了一个网络结构,Darknet19一共有19层卷积层和5层池化层。并且将最后的全连接层去掉,换成卷积,这样的话,方便网络处理大小不同的输入图片。

stronger

提出了一种分类和检测联合训练的机制。就是在训练过程中,将分类数据图片和检测数据图片随机打乱在一起,作为训练时候网络的输入。
若来的是分类图片,计算损失的时候就计算部分,如果来的是检测图片,就计算全部的损失。
作者构造了一种树结构WordTree,来存放所有的类别数据。这也使得YOLOv2变成了YOLO9000。

你可能感兴趣的:(学习,聚类)