YOLO-V2笔记

YOLO-V2速度优化

针对YOLO准确率不高,容易漏检,对长宽比不常见物体效果差等问题,结合SSD的特点,
2016提出了YOLO-V2。为了精度与速度并重,作者在速度上也作了一些改进措施。
大多数检测网络依赖于VGG-16作为特征提取网络,VGG-16是一个强大而准确的分类网络,但是确过于复杂。 224 ∗ 224 224*224 224224的图片进行一次前向传播,其卷积层就需要多达306.9亿次浮点数运算。
YOLO使用的是基于Googlenet的自定制网络,比VGG-16更快,一次前向传播仅需85.2亿次运算,不过它的精度要略低于VGG-16。
作者使用Darknet-19在标准1000类的ImageNet上训练了160周期。训练的时候仍然使用了很多常见的数据扩充方法。初始的224*224训练后把分辨率上调到了 448 ∗ 448 448*448 448448,又训练了10次。高分辨率下训练的分类网络top1准确率76.5%,top-5准确率93.3%。

YOLO-V2精确度优化

为了达到更精确(Better)的目的,YOLO v2主要做了如下改进:

1.High Resolution Classifier

YOLOv2首先修改预训练分类网络的分辨率为 448 ∗ 448 448*448 448448,在ImageNet数据集上训练10个周期(10epochs)。这个过程让网络有足够的时间去适应高分辨率的输入。然后再fine tune为检测网络,mAP获得了4%的提升。
2.Convolutional With Anchor Boxes YOLO(v1)使用全连接层数据进行bounding box预测,这会丢失较多的空间信息,导致定位不准。YOLOv2借鉴了Faster R-CNN中的anchor思想:简单理解为卷积特征图上进行滑动窗口采样,每个中心预测9种不同大小和比例的anchor。总的来说就是移除全连接层(以获得更多空间信息)使用anchor boxes去预测bounding boxes。并且,YOLOv2由anchor box同时预测类别和坐标。

2.Convolutional With Anchor Boxes具体做法:

·去掉最后的池化层确保输出的卷积特征图有更高的分辨率。
·缩减网络,让图片输入分辨率为416*416,目的是让后面产生的卷积特征图宽高都为奇数,这样就可以产生一个center cell。因为作者观察到,大物体通常占据了图像的中间位置,可以只用一个中心的cell来预测这些物体的位置,否则就要用中间的4个cell来进行预测,这个技巧可稍稍提升效率。
使用卷积层降采样(factor为32),使得输入卷积网络的 416 ∗ 416 416*416 416416图片最终得到 13 ∗ 13 13*13 1313的卷积特征图(416/32=13),也就是原始图片是最终输出的特征图的32倍。
·由anchor box同时预测类别和坐标。因为YOLO是由每个cell来负责预测类别,每个cell对应的2个bounding box负责预测坐标(回想YOLO中最后输出 7 ∗ 7 ∗ 30 7*7*30 7730的特征,每介cell对应 1 ∗ 1 ∗ 30 1*1*30 1130,前10个主要是2个bounding box用来预测坐标和置信度,后20个表示该cell在0g假设包含物体的条件下属于20个类别的概率)。YOLOv2中,不再让类别的预测与每个cell(空间位置)绑定一起,而是全部放到anchor box中。

加入了anchor boxes后,我们来计算一下,假设每个cell预测9个anchor,那么总共会预测 13 ∗ 13 ∗ 9 = 1521 13*13*9=1521 13139=1521个boxes,而之前的网络(YOLO-V1)仅仅预测 7 ∗ 7 ∗ 2 = 98 7*7*2=98 772=98个boxes。根据作者的研究,具体数据为:没有anchor boxes,模型recall为81%,mAP为69.5%;加入anchor boxes,模型recall为88%,mAP为69.2%。
YOLOv1每个格子存放了30个值,具体的值见下图
第1到第5个值是第1个预选框的值
第6到第10个值是第2个预选框的值
第11到第30个值是20个对象检测的概率值

对比YOLO1的输出张量,YOLO2的主要变化就是会输出5个先验框,且每个先验框都会尝试预测一个对象。输出的 13135*25 张量中,25维向量包含 20个对象的分类概率+4个边框坐标+1个边框置信度。

在这里插入图片描述

3.Dimension Clusters(维度聚类)

在使用anchor时,Faster-RCNN中anchor boxes的个数和宽高维度往往是手动精选(带有很多人为设置的因素,可能设置的并不好)的先验框(hand-picked priors),如果能够一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就应该更容易学到准确的预测位置。YOLOv2中利用K-means聚类方法,通过对数据集中的ground truth box做聚类,找到ground truth box的统计规律。以聚类个数k为anchor boxes个数,以k个聚类中心box的宽和高为anchor box的宽和高。
如果按照标准k-means使用欧式距离函数,(在计算距离时)大boxes比小boxes产生更多error。但是,我们真正想要的是产生/好的IOU得分的boxes(与box的大小无关,关键是anchor box跟真实标注框的IOU要大)。因此采用了如下距离度量:
在这里插入图片描述
指的是真实标注框和预测框anchor之间的IoU,IoU越大,(距离)值就越小
假设有两个框(默认它们的中心点在同一位置),一个框是 3 ∗ 5 3*5 35,一个框是 5 ∗ 5 5*5 55
欧式距离的计算 ( 5 − 3 ) 2 + ( 5 − 5 ) 2 = 2 \sqrt{(5-3)^2+(5-5)^2}=2 (53)2+(55)2 =2
IOU的计算 ( 3 ∗ 5 ) / ( 5 ∗ 5 ) = 0.6 (3*5)/(5*5)=0.6 (35)/(55)=0.6

下图是作者论文中的试验,设置了多组k值,随着k的增大,IOU也在增大(高召回率),但是复杂度也在增加。所以平衡复杂度和IOU之后,最终得到k值为5(最后的特征图中每个格子会生成5个anchor)。5聚类的中心与手动精选的boxes是完全不同的,扁长的框较少瘦高的框较多。

每个格子都会生成5个anchor,这是用K-means算法得到的。
这比Faster-RCNN手动9个anchor的方式更好,可以得到更加好的结果
在这里插入图片描述
作者也做了对比实验,5种boxes的Avg IOU(61.0)就和Faster R-CNN的9种Avg IOU(60.9)相当。
说明K-means方法的生成的boxes更具有代表性,使得检测任务更好学习(更加容易得到好的结果)。

在这里插入图片描述

4.Direct location prediction(直接位置预测)

使用anchor boxes的另一个问题是模型不稳定,尤其是在早期迭代的时候。大部分的不稳定现象出现在预测box的(x,y)坐标时,YOLO-v2没有用Faster-RCNN的预测方式(因为该方式在训练的早期会不稳定,会影响到模型收敛的速度)。
YOLO-v2位置预测值 t x t_x tx t y t_y ty就是预测边界框中心点相对于对应cell左上角位置的相对偏移值,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,这样预测的偏移值在(0,1)范围内(每个cell的尺度看做1)。这样做的好处是anchor不会发生特别大的移动(只会负责匹配跟anchor接近的真实标注框,然后在不断在训练迭代中调整位置,更好的重合该真实标注框)
作者通过使用维度聚类和直接位置预测这两项Anchor Boxes改进方法,将mAP提高了5%。

网络在特征图( 13 ∗ 13 13*13 1313)的每个cell上预测5个anchor,每一个anchor预测5个值: t x t_x tx t y t_y ty t w t_w tw t h t_h th t o t_o to(前4个跟位置相关的, t o t_o to跟置信度相关) 如果这个cell距离图像左上角的边距为( c x c_x cx, c y c_y cy),cell对应图中黑色虚线的先验框(anchor)的长和宽分别为( p w p_w pw, p h p_h ph),那么网络预测框的为下图蓝框,蓝色框的值是根据图中右侧的公式得到的
在这里插入图片描述

5.Fine-Grained Features(细粒度特征)

SSD通过不同尺寸的Feature Map来预测Box来实现多尺度,而YOLOv2则采用了另一种思路:
添加一个passthrough layer,来获取之前的26x26x512的特征图特征,对于26x26x512的特征图,经passthrough层处理之后就变成了13×13x2048的新特征图(特征图大小降低4倍,而channles增加4倍),这样就可以与后面的13×13×1024特征图连接在一起形成13×13×3072大小的特征图,然后在此特征图基础上卷积做预测。可以更精细的识别一些小的物体。
YOLOv2的检测器使用的就是经过扩展后的的特征图,它可以使用细粒度特征,使得模型的性能获得了1%的提升。
26×26x512->13×13×2048+13×13×1024->13×13×3072

26x26x512的特征图,经passthrough层处理之后就变成了13×13x2048的新特征图。可以用下面相似的例子说明:
在这里插入图片描述

6.Multi-Scale Training(多尺度输入的训练)

原始YOLO网络使用固定的448x448的图片作为输入,加入anchor boxes后输入变成416x416,由于网络只用到了卷积层和池化层,就可以进行动态调整(检测任意大小图片)。为了让YOLOv2对不同尺寸图片的具有鲁棒性,在训练的时候也考虑了这一点。
不同于固定网络输入图片尺寸的方法,每经过10批训练(10 batches)就会随机选择新的图片尺寸。网络使用的降采样参数为32,于是使用32的倍数{320,352,…,608},最小的尺寸为320x320,最大的尺寸为608x608。调整网络到相应维度然后继续进行训练(除了最后1层卷积层,其他的权值都是可以共享的)。
这种机制使得网络可以更好地预测不同尺寸的图片,同一个网络可以进行不同分辨率的检测任务,在小尺寸图片上YOLOv2运行更快,在速度和精度上达到了平衡。

如果使用 320 ∗ 320 320*320 320320,最终输出的特征图是 10 ∗ 10 10*10 1010
如果使用 352 ∗ 352 352*352 352352,最终输出的特征图是 11 ∗ 11 11*11 1111
如果使用 608 ∗ 608 608*608 608608,最终输出的特征图是 19 ∗ 19 19*19 1919
在这里插入图片描述

YOLO-V2结果

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值