YOLO_V2的理论介绍(学习笔记)

注释:全文根据别人笔记学习,自己做的笔记【YOLO系列】YOLOv2论文超详细解读(翻译 +学习笔记)-CSDN博客

介绍

yolov2的全名叫做 yolo9000,最终能够检测的目标类别是9000。相比于v1有了更大的提升以及召回率

尝试

1.Batch Normalization

2.High Resolution Classifier

3.Convolution With Anchor Box

4.Dimension Clusters

5.Direct location prediction

6.Fine -Grained Features

7.Multi -Scale Training

1.Batch Normalization

  • 提升了2%mAP
  • 提供了正则化的效果
  • 代替了全连接层的drop out(减轻过拟合),每一个卷积后全部加入BN,使得每一层卷积之后可以控制它朝收敛方向走。(后续但凡有卷积之后肯定有BN)
  • BN已经成为网络必备

BN介绍(复习)

2.High Resolution Classifier

  • 采用更高层的分类器
  • 采用了训练时加入448*448的分辨率分类器
  • 提升了4%mAP

解释

1.检测方法都使用在ImageNet上预先训练的分类器作为预训练模型

2.在AlexNet之前,大多数的网络输入图片分辨率是小于256*256

3.yolo_v1中预训练使用的分类数据集分辨率大小是224×224 ,使用YOLO模型做目标检测的时候又将输入变成448 × 448。这样后续改变尺寸,网络就要多重新学习一部分,会带来性能损失

4.v2直接在预训练中加入了448×448的尺寸,刚开始还是224*224,但在训练时最后10个epoch的时候进行448*448的微调。检测的时候也是448 × 448。

5.因为主干网络darknet19有经过5次下采样,一次w和h变为原来的一半,五次就是1/32.因此输入的图片需要可以被32整除,因此一般调整为416*416的输入

3.Convolution With Anchor Box

采用了基于anchor去预测目标

mAP降了,但召回率升了

(召回率表示得找全,mAP表示得找准。)

precision: 预测框中包含目标的比例。

recall: 真正目标被检测出来的比例。

解释

1.什么是anchor:

Anchor(先验框) 就是一组人为决定大小的边框,在训练时,以真实的边框位置相对于预设边框的偏移 来构建训练样本。就是先自己描出来大致的边框,然后训练偏移调整。

2.anchor box 和 v1的bounding box区别()
  • 在yolov1中,我们预测选择的bounding box大小都是人为设定的,根据经验得到的。一般就是长方形和正方形。
  • 在fasterRcnn中,anchor大小固定。我们每个gridcell会有9个anchorbox来进行预测,anchor box规定有9种,三种scal(小尺寸、中尺寸、大尺寸),每一种scal有三种比例大小。
  • 在yolov2中,也使用anchor box,但是anchor的大小是聚类得到的。系统会根据人为标注好的真实框,进行k-means聚类分k类,每一类都会有差不多的标注框大小比例。这样anchor可以根据实际选择框的比例,所以每个cell有k个anchorbox。根据实验k=5最佳。kmeans的距离=1-IOU(anchorbox,真实框)【相交越多越趋近于0,越少越趋近于1】

3.结构上的改进
  • 删掉全连接层和最后一个pooling层,使得最后的卷积层可以有更高分辨率的特征。
  • 使用Anchor Boxes
  • 缩小网络操作的输入图像为416×416

Q:为什么是416*416,不是448*448?

因为输入大小是416*416的时候,经过一系列卷积操作,最终得到特征图是13*13。长和宽都是奇数,所以矩阵中心只有1个,而不是4个。

另外416可以被32整除

4.yolov1和v2对比

每个grid cell携带信息量

v1:每个grid cell有2个boundingbox,bound ingbox只包含5个信息:4位置参数+confidence(2个bound ingbox*5个信息)+20类

v2:每个grid cell有5个anchor box,每个anchorbox包含25个信息:分类20+4位置参数+confidence(5个信息+20个类)*5个anchor

效果对比

v1中二个boundingbox只预测一个物体

v2中每个anchorbox预测一个物体,一个gridcell有多个物体,每个anchor可以预测一个

来自链接文章

4.Dimension Cluster

Q:当选择anchor时候,box的尺寸是人为定的,如果选的非常好,那么效果会更好。那么怎么选择好的box尺寸呢?

在训练集的边界框上运行K-means聚类训练bounding boxes,可以自动找到更好的boxes宽高维度。

我们设置先验Anchor Boxes的主要目的是为了使得预测框与真值的IOU更好,所以聚类分析时选用box与聚类中心box之间的IOU值作为距离指标

K-means算法步骤:

1.选择初始化的K个样本作为初始聚类中心

2.针对数据集中每个样本,计算它到K个聚类中心的距离,并将其分到距离最小的聚类中心所对应的类中

3.针对每个类别,重新计算它的聚类中心

4.重复上面的步骤2、3,直到达到某个终止条件(迭代次数、最小误差变化)

5.Direct location prediction

Q:大多数anchor不稳定的原因是来自于对边框中心点(x, y)位置的预测。

早期,我们预测边界框的方式是

               

但是因为t_{x}t_{y}(anchor的偏移)的范围是没有限制的,所以anchorbox经过位置参数调整后,预测框可能跑到其他gridcell里面去了。

比如下面的橙色框,本应该预测自己这个gridcell的,但是跑到下角去了。下角的有它的anchor box来预测,用不到你。

解决办法:使用一个函数 logisitic activation(类似sigmoid)对偏移量t_{x}t_{y}进行限制。

 这样使得anchorbox限制在自己的grid cell内进行预测。

6.Fine -Grained Features

把细粒度变更小,这个修改后的YOLO在13 × 13特征图上进行检测。虽然这对于大型对象来说已经足够了,但是对于较小的对象来说,更细粒度的特性可能会使得检测效果更好。

使得mAP提升了1%

7.Multi_Scale

不管输入什么尺度的输入图像,都可以做。多次迭代之后,输入图片大小可以变

Pass Through层

Q:为什么要有passtrough层?

为了检测小目标。

感受野:卷积之后特征图上一个点对应原图多大的区域。

所以,卷积层数越多,感受野就越大。最后一层的感受野很大,对应原图的区域大。这样就利于检测大目标,但是不利于检测小目标。

因此v2中为了检测小目标,用最后一层特征图检测大目标,用中间某一层的特征图检测小目标。(中间层的感受野肯定小一点,对应原图区域小一点)

那么就是挑选下面的26*26*512的那一层卷积的特征图,通过passtrough层来处理,为了用来检测小目标

把特征矩阵,分成4块,相同颜色的组成一个2*2的矩阵。

这样得到的效果是原来 4*4*1,变成了2*2*4的矩阵

宽高缩减一半,channel变为4倍

 passtrough层之后把原来的13*13*1024的和4个13*13*512的深度合并。

这样既能检测大目标(13*13*1024),又能检测小目标(4*13*13*512)

 

为网络简单地添加一个直通层( passthrough layer),获取前层26×26分辨率特征。可以看到经过PassTrough层之后,把26*26的feature map,变成了13*13的。然后再与13*13*1024的特征图进行深度上的拼接。得到13*13*1280

yoloV2的主干网络

yolov2使用的是一个全新的架构: Darknet-19

最终模型,称为Darknet-19,有19个卷积层和5个maxpooling层,Darknet-19网络如下

输入是416*416(看第三条,要可以被32整除)

没有FC层(容易过拟合),所有层都是卷积

5次maxpoll降采样,一次尺寸变为一半。5次变为32分之一。输入的h和w变为h/32,w/32。所以根据416的输入,5次之后最终得到的特征图是13*13

卷积基本是3*3和1*1,节省很多参数。卷积不改变尺寸大小,用3*3代替v1中7*7得到相同感受野,但是会增加深度,所以用1*1的再降深度

在Darknet-19的基础上,去掉了最后一个卷积层,然后加上了3个3*3的卷积层。

最后一个1×1的卷积层,输出的数量是我们检测所需的参数,VOC数据集。5个boundingbox,分20类。每个bound ingbox参数量是(5+20),5个,所以每个gridcell输出(5+20)*5的参数量。

倒数第二个3X3卷积到最后一个3X3卷积层增加passthrough层。模型可以使用细粒度的特征。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值