YOLO v2原理解析

      YOLO v2是YOLO v1的一个升级版本,使其变的Better,Faster,Stronger,下面我从Better和Faster两个角度来说明一下(Stronger部分没看懂).对YOLO v1不了解的可以参考我之前的博客YOLO v1原理解析

Better

        YOLO有两个缺点:一个缺点在于定位不准确,另一个缺点在于和基于region proposal的方法相比召回率较低,为了解决这两个问题,YOLO v2使用了很多trick,下面来一一说明

  • Batch Normalization

      相信大家对BN已经很熟悉了,如今BN已经成了网络的一个固有部分,但是在当时这个是才提出的新trick,YOLO v2加入BN后就把dropout去掉

  • High Resolution Classifier

      YOLOv2将预训练分成两步:先用224*224的输入从头开始训练网络,大概160个epoch,然后再将输入调整到448*448,再训练10个epoch(注意这两步都是在ImageNet数据集上操作)。最后再在检测的数据集上fine-tuning,也就是detection的时候用448*448的图像作为输入就可以顺利过渡了。

  • Convolutional With Anchor Boxes

       YOLOv2用卷积层代替了全连接层,并引入了anchor(这个后面会说),作者的实验证明:虽然加入anchor使得MAP值下降了一点(69.5降到69.2),但是提高了recall(81%提高到88%)

  • Dimension Clusters

       采用k-means的方式对训练集的bounding boxes做聚类,试图找到合适的anchor box,作者发现如果采用标准的k-means(即用欧式距离来衡量差异),在box的尺寸比较大的时候其误差也更大,而我们希望的是误差和box的尺寸没有太大关系。所以通过IOU定义了如下的距离函数,使得误差和box的大小无关:

                                   

       聚类发现结果中多是高瘦的box,而矮胖的box数量较少,最终选了5个anchor(如下图所示)

                                                 

  • Direct Location prediction

       作者在引入anchor box的时候遇到的第二个问题:模型不稳定,尤其是在训练刚开始的时候。作者认为这种不稳定主要来自预测box的(x,y)值。我们知道在基于region proposal的object detection算法中,是通过预测下图中的tx和ty来得到(x,y)值,也就是预测的是offset。另外关于文中的这个公式,个人认为应该把后面的减号改成加号,这样才能符合公式下面的example。这里xa和ya是anchor的坐标,wa和ha是anchor的size,x和y是坐标的预测值,tx和ty是偏移量。文中还特地举了一个例子:A prediction of tx = 1 would shift the box to the right by the width of the anchor box, a prediction of tx = -1 would shift it to the left by the same amount.

                                             

        在这里作者并没有采用直接预测offset的方法,还是沿用了YOLO算法中直接预测相对于grid cell的坐标位置的方式。
前面提到网络在最后一个卷积层输出13*13大小的feature map,然后每个cell预测5个bounding box,然后每个bounding box预测5个值:tx,ty,tw,th和to(这里的to类似YOLOv1中的confidence)。看下图,tx和ty经过sigmoid函数处理后范围在0到1之间,这样的归一化处理也使得模型训练更加稳定;cx和cy表示一个cell和图像左上角的横纵距离;pw和ph表示bounding box的宽高,这样bx和by就是cx和cy这个cell附近的anchor来预测tx和ty得到的结果。

                                               
       如下图所示,首先是cx和cy,表示grid cell与图像左上角的横纵坐标距离,黑色虚线框是bounding box,蓝色矩形框就是预测的结果。

                                                  

  • Fine-Grained Features

       主要是添加了一个层:passthrough layer。这个层的作用就是将前面一层的26*26的feature map和本层的13*13的feature map进行连接,有点像ResNet。这样做的原因在于虽然13*13的feature map对于预测大的object以及足够了,但是对于预测小的object就不一定有效。也容易理解,越小的object,经过层层卷积和pooling,可能到最后都不见了,所以通过合并前一层的size大一点的feature map,可以有效检测小的object。

  • Multi-Scale Training

       为了让YOLOv2模型更加robust,作者引入了Muinti-Scale Training,简单讲就是在训练时输入图像的size是动态变化的,注意这一步是在检测数据集上fine tune时候采用的,不要跟前面在Imagenet数据集上的两步预训练分类模型混淆,这种网络训练方式使得相同网络可以对不同分辨率的图像做detection

一张表总结各trick对mAPD贡献:

       从第四行可以看出,anchor机制只是试验性在yolo_v2上铺设,一旦有了dimension priors就把anchor抛弃了。最后达到78.6mAP的成熟模型上也没用anchor boxes。

Faster

       在YOLO v2中,作者采用了新的分类模型作为基础网络,那就是Darknet-19,这个网络在ImageNet上取得了top-5的91.2%的准确率

                                                 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值