深度学习:目标检测|YoLoV2学习总结

1 介绍

  YoLoV2又叫YoLo9000,对比YoLoV1,YoLoV2使用VOC+ImageNet数据集联合训练,识别对象增加到了9000个,预测种类增多,而且速度快,准确度高。下面,我们主要通过对比YoLoV1,学习YoLoV2在YoLoV1基础上做了哪些改进和提升。

2 YoLoV2

2.1 YoLoV2模型结构

在这里插入图片描述
DarkNet网络结构
在这里插入图片描述

  通过对比我们发现,YoLOV2使用DarkNet19网络结构作为特征提取网络。将DarkNet网络的最后一个Convolutional去除,添加3个3x3(卷积核的大小,下同)的Convolutional和1个1x1卷积。另外,在最后一个池化前的Convolutional用1个1x1的Convolutional进行卷积、批标准化、经过激活函数后进行细粒度特征融合(后面分析),再和倒数第二个Convolutional 进行concat,大大增加了特征图的细节信息,在一定程度上提升了模型的mAP。

2.2 对比YoLoV1做出的改进

2.2.1 加入批标准化(Batch Normalization)

  在YoLoV1中作者没有加入BN层,而在YoLoV2中作者通过尝试在每一个卷积后加入BN层,提升了模型训练的收敛速度和收敛效果,同时也起到了一定的正则化效果,降低了模型对一些超参数的敏感度。最终的结果就是提升了2%的mAP。

2.2.2 使用高分辨率图像微调分类模型(High Resolution Classifier)

  在YoLoV1中训练backbone时使用的是224x224作为输入样本,但是在检测时候使用的是高分辨率的448x448,打个比方,本来骑自行车去上班,老板突然一高兴给你一辆小汽车,你有点不适应呢(因为你不会开啊),这就导致YoLoV1在预测时可能会对高分辨率图像泛化性能不是很好。
  YoLoV2在YoLoV1的基础上做出了改进,虽然都是使用224x224分辨率进行训练,又加了一个步骤,就是再使用448x448的高分辨率样本对模型进行微调和修正,让模型适应高分辨率图像。该方法提升了4%的mAP。

2.2.3 采用Anchor Boxes(Convolutional With Anchor Boxes)

  在学习YoLoV1时,我们知道YoLoV1没有采用先验框,只是在每一个grid预测两个bounding box,共98个bounding boxes。而在YoLoV2中,加入了先验框的思想,虽然mAP没有提升,但是召回率有了较大的提升,说明了模型有很大的提升空间。

2.2.4 聚类提取anchor尺度(Dimension Clusters)

  通过聚类算法预测anchor尺寸。Faster-RCNN中生成的anchor是人为指定的尺寸大小,并不是很贴合数据集的标签值。而在YoLoV2中,提前对训练集的标签值进行K-means聚类进行分析,尽可能找到匹配样本的anchor尺寸,因此在后续调整anchor尺寸时能很快与标签值进行拟合,降低了训练的难度和训练时间。在这里插入图片描述
  在上图中可以看出,前5个anchor box尺寸对提升Avg IOU较明显,因此在YoLoV2中选择了前5种anchor box 的尺寸。

2.2.5 边框位置的预测(Direct location prediction)

  在学习YoLoV1时,我们知道如果中心点落在哪个grid里,该grid负责预测该对象是否存在,也就是该grid cell内的anchor box进行一系列回归参数和偏移,拟合目标框。同样,YoLoV2也是同样的原理。举个例子:
在这里插入图片描述
  如果我们不对预测框的位置进行限制,刚开始预测框的位置在左上角,如上图位置,通过预测,会有回归参数和偏移量,这时该预测框位置将要改变。因为回归参数和偏移量的大小不固定,因此该预测框可能在上图中的任意一位置,比如移动到了上图的右下角,这就导致模型在预测的时候和原理相违背,导致预测性能不稳定。因此,我们需要将该预测框固定在它原来的grid cell内。
在这里插入图片描述

边框的预测结果公式:
b x = σ ( t x ) + c x b y = σ ( t y ) + c y b w = p w e t w b h = p h e t h \begin{aligned} b_x=\sigma(t_x)+c_x \\b_y=\sigma(t_y)+c_y \\b_w=p_we^{t_w} \\b_h=p_he^{t_h} \end{aligned} bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=pheth
P r ( o b j e c t ) ∗ I O U ( b , o b j e c t ) = σ ( t o ) P_r(object)*IOU(b,object)=\sigma(t_o) Pr(object)IOU(b,object)=σ(to)

  • b x , b y , b w , b h b_x,b_y,b_w,b_h bx,by,bw,bh是预测边框的中心点和宽高
  • P r ( o b j e c t ) ∗ I O U ( b , o b j e c t ) P_r(object)*IOU(b,object) Pr(object)IOU(b,object)是预测边框的置信度
  • c x , c y c_x,c_y cx,cy是当前网格左上角到图像左上角的距离
  • p w , p h p_w,p_h pw,ph是先验框的宽和高
  • σ \sigma σ是sigmoid函数
  • t x , t y , t h , t o t_x,t_y,t_h,t_o tx,ty,th,to是回归参数,用来预测边框的中心点、宽、高和置信度

  sigmoid函数的输出值是在[0,1]范围之内,因此,不管 σ ( t x ) 、 σ ( t y ) \sigma(t_x)、\sigma(t_y) σ(tx)σ(ty)值有多大,经过sigmoid后输出值只能在0-1之间,因此,预测框的中心点只能在上图中的蓝色区域内。经过约束后的边框使得模型更加稳定,更容易学习。

2.2.6 细粒度特征融合(Fine-Grained Features)

  图像中的对象大小不同,输入图像经过多层网络提取特征后,最后输出的特征图中,比较小的对象可能特征就很不明显了甚至被卷掉。在YoLoV2中,为了也能检测出较小的特征,引入了passthrough层,经过该网络层能保留较小的对象的特征的一些细节信息。具体说就是在最后一个pooling之前,特征图的大小是26x26x512,将其1分为4,passthrough到pooling后,的特征图,两者叠加到一起作为输出的特征图:
在这里插入图片描述
具体拆分方法如下图:
在这里插入图片描述

2.2.7 多尺度训练(Multi-Scale Training)

  在YoLoV2中,去除了全连接层,因此可以输入任意尺度的图像。在整个网络下进行了32倍的下采样,采用{320,352,…,608}等10种输入图像的尺寸,这些尺寸的输入图像对应输出的特征图宽和高是{10,11,…19}。训练时每10个batch就随机更换一种尺寸,使网络能够适应各种大小的对象检测。在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值