YOLOv2 / YOLO9000学习笔记

在这里插入图片描述
在这里插入图片描述
YOLOv1缺点:

  • 定位能力差
  • mAP低
  • recall低:最多98个框,当图像目标多的时候,不能够全部检测出
  • 检测小目标/密集目标能力差:每个cell检测一个物体,最多检测49个物体
    在这里插入图片描述

YOLOv2相对v1版本,在继续保持处理速度的基础上,从预测更准确(Better),速度更快(Faster),识别对象更多(Stronger)这三个方面进行了改进。其中识别更多对象也就是扩展到能够检测9000种不同对象,称之为YOLO9000。
在这里插入图片描述

预测更准确(Better)

论文[1]中给出了下面的改进项目列表,列出各项改进对mAP的提升效果。在这里插入图片描述
1)batch normalization(批归一化)

批归一化使mAP有2.4的提升。

批归一化有助于解决反向传播过程中的梯度消失和梯度爆炸问题,降低对一些超参数(比如学习率、网络参数的大小范围、激活函数的选择)的敏感性,并且每个batch分别进行归一化的时候,起到了一定的正则化效果(YOLO2不再使用dropout),从而能够获得更好的收敛速度和收敛效果。

通常,一次训练会输入一批样本(batch)进入神经网络。批规一化在神经网络的每一层,在网络(线性变换)输出后和激活函数(非线性变换)之前增加一个批归一化层(BN),BN层进行如下变换:①对该批样本的各特征量(对于中间层来说,就是每一个神经元)分别进行归一化处理,分别使每个特征的数据分布变换为均值0,方差1。从而使得每一批训练样本在每一层都有类似的分布。这一变换不需要引入额外的参数。②对上一步的输出再做一次线性变换,假设上一步的输出为Z,则Z1=γZ + β。这里γ、β是可以训练的参数。增加这一变换是因为上一步骤中强制改变了特征数据的分布,可能影响了原有数据的信息表达能力。增加的线性变换使其有机会恢复其原本的信息。
在这里插入图片描述在这里插入图片描述
详见:
https://editor.csdn.net/md/?articleId=118444373
https://zhuanlan.zhihu.com/p/34879333

2)使用高分辨率图像微调分类模型
在这里插入图片描述在这里插入图片描述

mAP提升了3.7。

图像分类的训练样本很多,而标注了边框的用于训练对象检测的样本相比而言就比较少了,因为标注边框的人工成本比较高。所以对象检测模型通常都先用图像分类样本训练卷积层,提取图像特征。但这引出的另一个问题是,图像分类样本的分辨率不是很高。所以YOLO v1使用ImageNet的图像分类样本采用 224 * 224 作为输入,来训练CNN卷积层。然后在训练对象检测时,检测用的图像样本采用更高分辨率的 448 * 448 的图像作为输入。但这样切换对模型性能有一定影响

所以YOLO2在采用 224 * 224 图像进行分类模型预训练后,再采用 448 * 448 的高分辨率样本对分类模型进行微调(10个epoch),使网络特征逐渐适应 448 * 448 的分辨率。然后再使用 448 * 448 的检测样本进行训练,缓解了分辨率突然切换造成的影响。

3)采用先验框(Anchor Boxes)
yolov1生成的2个bounding box没有尺度限制,太随机了。
在这里插入图片描述v2的改进,尺寸固定的anchor,只需要预测相对于anchor的偏移量即可
在这里插入图片描述在这里插入图片描述还是与GT的IOU最大的框去预测。
在这里插入图片描述在这里插入图片描述v1的20-classes归grid cell预测,v2的20-classes归每一个anchor预测。
在这里插入图片描述在这里插入图片描述

召回率大幅提升到88%,同时mAP轻微下降了0.2。

借鉴Faster RCNN的做法,YOLO2也尝试采用先验框(anchor)。在每个grid预先设定一组不同大小和宽高比的边框,来覆盖整个图像的不同位置和多种尺度,这些先验框作为预定义的候选区在神经网络中将检测其中是否存在对象,以及微调边框的位置。

同时YOLO2移除了全连接层。另外去掉了一个池化层,使网络卷积层输出具有更高的分辨率。

之前YOLO1并没有采用先验框,并且每个grid只预测两个bounding box,整个图像98个。YOLO2如果每个grid采用9个先验框,总共有13 * 13 * 9=1521个先验框。所以,相对YOLO1的81%的召回率,YOLO2的召回率大幅提升到88%。同时mAP有0.2%的轻微下降。

不过YOLO2接着进一步对先验框进行了改良。

4)聚类提取先验框尺度

聚类提取先验框尺度,结合下面的约束预测边框的位置,使得mAP有4.8的提升。

之前先验框都是手工设定的,YOLO2尝试统计出更符合样本中对象尺寸的先验框,这样就可以减少网络微调先验框到实际位置的难度。YOLO2的做法是对训练集中标注的边框进行聚类分析,以寻找尽可能匹配样本的边框尺寸

聚类算法最重要的是选择如何计算两个边框之间的“距离”,对于常用的欧式距离,大边框会产生更大的误差,但我们关心的是边框的IOU。所以,YOLO2在聚类时采用以下公式来计算两个边框之间的“距离”。
在这里插入图片描述
centroid是聚类时被选作中心的边框,box就是其它边框,d就是两者间的“距离”。IOU越大,“距离”越近。YOLO2给出的聚类分析结果如下图所示:

对VOC、COCO数据集的目标物体的长宽比进行聚类
在这里插入图片描述
上图左边是选择不同的聚类k值情况下,得到的k个centroid边框,计算样本中标注的边框与各centroid的Avg IOU。显然,边框数k越多,Avg IOU越大。YOLO2选择k=5作为边框数量与IOU的折中。对比手工选择的先验框,使用5个聚类框即可达到61 Avg IOU,相当于9个手工设置的先验框60.9 Avg IOU。

上图右边显示了5种聚类得到的先验框,VOC和COCO数据集略有差异,不过都有较多的瘦高形边框。
在这里插入图片描述

5)约束预测边框的位置
模型输出的是相对于anchor的偏移量(tx,ty,tw,th)。预测值(tx,ty)可能是负无穷–正无穷,为了把anchor中心点限制在grid cell中
在这里插入图片描述
t o t_o to是输出的置信度,经过sigmoid归一化,左边公式是标签值
在这里插入图片描述

借鉴于Faster RCNN的先验框方法,在训练的早期阶段,其位置预测容易不稳定。其位置预测公式为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6)passthrough层检测细粒度特征

passthrough层检测细粒度特征使mAP提升1。

对象检测面临的一个问题是图像中对象会有大有小,输入图像经过多层网络提取特征,最后输出的特征图中(比如YOLO2中输入416x416经过卷积网络下采样最后输出是13x13),较小的对象可能特征已经不明显甚至被忽略掉了。为了更好的检测出一些比较小的对象,最后输出的特征图需要保留一些更细节的信息。

YOLO2引入一种称为passthrough层的方法在特征图中保留一些细节信息。具体来说,就是在最后一个pooling之前,特征图的大小是26x26x512,将其1拆4,直接传递(passthrough)到pooling后(并且又经过一组卷积)的特征图,两者叠加到一起作为输出的特征图。
在这里插入图片描述
具体怎样1拆4,下面借用参考文章[3]中的一副图看的很清楚。图中示例的是1个4x4拆成4个2x2。因为深度不变,所以没有画出来。
在这里插入图片描述
另外,根据YOLO2的代码,特征图先用1 * 1卷积从 26 * 26 * 512 降维到 26 * 26 * 64,再做1拆4并passthrough。下面图6有更详细的网络输入输出结构。

7)多尺度图像训练
在这里插入图片描述在这里插入图片描述在这里插入图片描述

多尺度图像训练对mAP有1.4的提升。

因为去掉了全连接层,用global pooling层代替,YOLO2可以输入任何尺寸的图像。因为整个网络下采样倍数是32,作者采用了{320,352,…,608}等10种输入图像的尺寸,这些尺寸的输入图像对应输出的特征图宽和高是{10,11,…19}。训练时每10个batch就随机更换一种尺寸,使网络能够适应各种大小的对象检测。

8)高分辨率图像的对象检测

图1表格中最后一行有个hi-res detector,使mAP提高了1.8。因为YOLO2调整网络结构后能够支持多种尺寸的输入图像。通常是使用416 * 416的输入图像,如果用较高分辨率的输入图像,比如544 * 544,则mAP可以达到78.6,有1.8的提升。

速度更快(Faster)

在这里插入图片描述

为了进一步提升速度,YOLO2提出了Darknet-19(有19个卷积层和5个MaxPooling层)网络结构。DarkNet-19比VGG-16小一些,精度不弱于VGG-16,但浮点运算量减少到约1/5,以保证更快的运算速度。
在这里插入图片描述
在这里插入图片描述

YOLO2 输入->输出

综上所述,虽然YOLO2做出了一些改进,但总的来说网络结构依然很简单,就是一些卷积+pooling,从4164163 变换到 13135*25。稍微大一点的变化是增加了batch normalization,增加了一个passthrough层,去掉了全连接层,以及采用了5个先验框。
在这里插入图片描述
对比YOLO1的输出张量,YOLO2的主要变化就是会输出5个先验框,且每个先验框都会尝试预测一个对象。输出的 13x13x5x25 张量中,25维向量包含 20个对象的分类概率+4个边框坐标+1个边框置信度。

YOLO2 误差函数

在这里插入图片描述

误差依然包括边框位置误差、置信度误差、对象分类误差。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值