YOLOv2

目录

1、Better

(1)批归一化BN

(2)高分辨率分类器High resolution classifier

(3)用Anchor Boxes卷积

(4)维度聚类Dimension clusters

(5)位置预测Direct location prediction

(6)细粒度特征Fine-Grained Features

(7)多尺度图形训练Multi-Scale Training

2、Faster

(1)darknet-19

(2)训练分类模型

(3)训练检测模型


YOLOv1拙见https://blog.csdn.net/xue_csdn/article/details/105949984

YOLOv2相比YOLOv1,预测更准确(Better),速度更快(Faster),识别对象更多(Stronger)

1、Better

(1)批归一化BN

      BN(Batch Normalization)这里就不详细介绍了。

BN其实在YOLOv1中就出现过了,但是YOLOv1还伴随着dropout的使用。在YOLOv2中取消了dropout,全部使用BN,降低过拟合。

(2)高分辨率分类器High resolution classifier

      同YOLOv1一样,在训练模型时先在ImageNet上进行了预训练,输入图片的尺度为224×224,同样在检测时需要将输入从224×224变为448×448,但是直接切换会对模型性能造成影响。

      所以在YOLOv2中,作者提出首先对分类网络(自定义darknet)进行微调fine tune,以448×448在ImageNet数据集上训练10个epoch,使网络有充足的时间适应,然后对检测网络部分同样进行微调(变为416×416,下一步会介绍到)。

(3)用Anchor Boxes卷积

      借鉴了Faster RCNN的RPN。

      首先是去掉了FC,以及最后的max pooling层(确保得到的feature map有更高的分辨率),将分辨率变为416×416(使feature map的宽高均为奇数),而且由于有5个max pooling作下采样,缩小比值为32,所以最终由416×416得到13×13的feature map(416/32=13),也就是13×13个grid.

每个grid预先设定一组(9个)不同大小和宽高比的先验框。相比于YOLOv1的7×7×2=98个框,YOLOv2可检测13×13×9=1521个框。

(4)维度聚类Dimension clusters

      Faster R-CNN和SSD的先验框的大小是手动设定的,有一定的主观性,YOLOv2采用k-means聚类方法对训练集中标注的边界框做了聚类分析。作者发现如果采用标准的 k-means(即用欧式距离来衡量差异),在 box 的尺寸比较大的时候其误差也更大,而我们希望的是误差和 box 的尺寸没有太大关系。所以通过 IOU 定义了如下的距离函数,使得误差和 box 的大小无关。

centroid是聚类时被选作中心的边框,box就是其它边框,d就是两者间的“距离”。IOU越大,“距离”越近。

图的左边代表随着k的增加,average IOU也在逐渐增加,当k=5时,recall值和模型复杂度会有一个较好的权衡,右边就是选出的5个聚类中心。

(5)位置预测Direct location prediction

     在早期阶段,模型训练容易不稳定,是由于预测 Box 的(x,y)位置。预测公式为:

论文中都是减号,其实应该是加号(可以去参考Faster RCNN的推导公式)

意味着当tx=1时,右移w_{a}的长度(w_{a}是先验框的宽),tx=-1时,左移w_{a}的长度

但是tx和ty没有约束限制,容易导致不稳定。YOLOv2调整了预测公式,采用了预测相对于grid cell的坐标位置的方法,利用logistic激活把ground truth限制在0到1之间。

输出的feature map中,每个cell(网格)预测5个bbox,每个bbox有5个参数,t_{x}t_{y}t_{w}t_{h}t_{o}

cx和cy是当前cell左上角到图像左上角的距离(网格宽高归一化为1),pw和ph是当前cell对应bbox的宽和高

t_{x}t_{y}约束在(0,1)范围内,蓝色点被约束在当前cell内,使得训练更加稳定。

 

(6)细粒度特征Fine-Grained Features

       增加passthrough层,对小目标的检测精度有帮助。把高分辨率的特征和低分辨率的特征连接起来,连接方式是叠加特征到不同的通道,而不是空间位置,类似于ResNet

passthrough的直观表达

       具体过程是:将26×26×512特征图变为13×13×2048,后者可直接与原始特征(original feature)相连接。

一个知乎博主是这么解释的:(见图片水印)

        passthrough不涉及参数的计算,26×26×512使用按行和按列隔行采样的方法,得到4个13×13×512的特征图,然后concat,得到13×13×2048,最后拼接到后面的层,相当于做了一次特征融合。这样就对于小目标的检测起到很好的作用。

 

(7)多尺度图形训练Multi-Scale Training

         YOLOv2去掉了FC,所以YOLOv2的输入可以不限于416*416大小的图片。

因为整个网络下采样倍数是32,作者采用了{320,352,...,608}等10种输入图像的尺寸,这些尺寸的输入图像对应输出的特征图宽和高是{10,11,...19}。训练时每10个batch就随机更换一种尺寸,使网络能够适应各种大小的对象检测。

 

2、Faster

一张224×224的图片通过VGG16要经过306.9亿浮点运算,为了更快,网络没必要像VGG16这么复杂。

YOLOv2用基于GoogleNet的自定义的网络,一次前向传播只要85.2亿次浮点运算,虽然准确率较VGG16有所下降,在ImageNet上从90%下降到了88%。

(1)darknet-19

最后的 1x1 卷积层的存在是为了跨通道信息整合 

  • 大量使用3×3卷积
  • pooling之后,通道数翻倍
  • 用global average pooling预测结果
  • 3×3之间采用1×1来压缩特征
  • BN
  • 运算次数:55.8亿次

 

(2)训练分类模型

 第一阶段:

  • 输入224×224 
  •  ImageNet 1000 数据集
  • 160epoch
  • SGD
  • 初始learning rate = 0.1
  • polynomial rate decay = 4
  • weight decay = 0.0005
  • momentum = 0.9

第二阶段:

  • 微调至448×448
  • 其他参数一样,learning rate = 0.001

 

(3)训练检测模型

第三阶段:

  • 移除最后一个conv层,及后边的池化、softmax
  • 增加3个3×3×1024的conv层,后边加1×1,输出维度(最后一个1×1的个数)就是检测的数量(例如,对于VOC数据集,每个grid预测5个框,每个框有5个坐标点和20个类别,因此需要5×25=125个filter)
  • 增加pass through层,从最后的3×3×512到倒数第二个conv层
  • 训练160 epoch
  • 开始 learning rate = 0.001,到60和90 epoch时,减为上一次的0.1倍
  • weight decay = 0.0005
  • momentum = 0.9

 还是前边提到的那个知乎博主:

 看一下passthrough层。图中第25层route 16,意思是来自16层的output,即26*26*512,这是passthrough层的来源(细粒度特征)。第26层1*1卷积降低通道数,从512降低到64(这一点论文在讨论passthrough的时候没有提到),输出26*26*64。第27层进行拆分(passthrough层)操作,1拆4分成13*13*256。第28层叠加27层和24层的输出,得到13*13*1280。后面再经过3*3卷积和1*1卷积,最后输出13*13*125。

 附上一张更直观的图(输入是608×608,但是总的层数不影响)

 

对于训练图片的ground truth,由该ground truth中心点所在的网格cell进行预测,5个中与ground truth有最大IOU的那个anchor负责预测,剩余4个不与该ground truth匹配。

匹配原则:对于某个ground truth,首先要确定其中心点要落在哪个cell上,然后计算这个cell的5个先验框与ground truth的IOU值(YOLOv2中bias_match=1),计算IOU值时不考虑坐标,只考虑形状,所以先将先验框与ground truth的中心点都偏移到同一位置(原点),然后计算出对应的IOU值,IOU值最大的那个先验框与ground truth匹配,对应的预测框用来预测这个ground truth。

stronger部分(YOLO 9000)在下一篇介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值