物体检测-系列教程2:YOLOV2 整体解读

🎈🎈🎈YOLO 系列教程 总目录

YOLOV1整体解读
YOLOV2整体解读

YOLOV2提出论文:YOLO9000: Better, Faster, Stronger

1、YOLOV1

  • 优点:快速,简单!
  • 问题1:每个Cell只预测一个类别,如果重叠无法解决
  • 问题2:小物体检测效果一般,长宽比可选的但单一

YOLOV2更快!更强!

YOLOYOLOV2
batch norm
hi-res classifier
convolutional
anchor boxes
new network
dimension priors
location prediction
passthrough
multi-scale
hi-res detecttor
VOC2007 mAP63.465.869.569.269.674.475.476.878.6

V2版本整体上没有太多改变,主要在网络上、实现上的细节上有一些改进,如表格中的mAP值是有明显的上升的。看这个表格,v2版本的mAP值有一个很明显的上升,接下来我会根据表格内容依次介绍v2版本在哪些方面有改进。

2、Batch Normalization

  • V2版本舍弃Dropout,卷积后全部加入Batch Normalization
  • 网络的每一层的输入都做了归一化,收敛相对更容易
  • 经过Batch Normalization处理后的网络会提升2%的mAP
  • 从现在的角度来看,Batch Normalization已经成网络必备处理

Batch Normalization:顾名思义,批量归一化处理,分别对一列特征进行进行归一化操作,具体为当前值减去均值再除以方差。
Dropout:随机杀死一些神经元,即被杀死的神经元部分的特征权重为0,避免过拟合,在全连接层最常使用。

在v2版本,首先就全面剔除Dropout,在每一次卷积后都进行了Batch Normalization,能够避免网络往不好的方向训练,能够使得收敛更快,由于这个地方的改动,YOLOv2的mAP提升了约2%。

3、更大的分辨率

  • V1训练时用的是 224 ∗ 224 224*224 224224,测试时使用 448 ∗ 448 448*448 448448
  • 可能导致模型水土不服,V2训练时额外又进行了10次 448 ∗ 448 448*448 448448 的微调
  • 使用高分辨率分类器后,YOLOv2的mAP提升了约4%

这个实际上就是V1和V2都是使用 224 ∗ 224 224*224 224224的图像训练,然后都是用 448 ∗ 448 448*448 448448的图像测试。只不过V2版本,在训练的时候加了10个epoch,这10个epoch都是用(448,448 )的图像进行训练,因为10个epoch比较个数比较少,所以实际上是对模型进行微调。

这是因为用 224 ∗ 224 224*224 224224的图像训练,然后用 448 ∗ 448 448*448 448448的图像测试会让模型无法适应,增加了10个epoch用 448 ∗ 448 448*448 448448的图像进行训练对模型进行微调有一个适应的过程,就是因为这个适应的过程使得YOLOv2的mAP提升了约4%

4、网络结构

  1. DarkNet,实际输入为 416 ∗ 416 416*416 416416
  2. 没有FC层,5次降采样,( 13 ∗ 13 13*13 1313
  3. 1*1卷积节省了很多参数

在这里插入图片描述
YOLOV2借助了ResNet和VGG的一些思想:

  1. 所有的全连接层都不见了,全连接层容易过拟合,收敛慢,参数多,最后的输出是(7,7,30)这个用卷积也同样能够做到
  2. 5次降采样操作,maxpooling,(224,224)变成(112,112),最终输出(7,7)
  3. 输入输出进行了改变,输入改成了(416,416)输出为(13,13)
  4. darknet,具体为darknet19,一共有19个卷积层,每次经过卷积的时候特征图的个数会翻倍,这里用了(1,1)的一维卷积降低了卷积核的个数

5、YOLO-V2聚类提取先验框

  • faster-rcnn系列选择的先验比例都是常规的,但是不一定完全适合数据集
  • K-means聚类中的距离: d ( b o x , c e n t r o i d s ) = 1 − I O U ( b o x , c e n t r o i d s ) d(box,centroids) = 1-IOU(box,centroids) d(box,centroids)=1IOU(box,centroids)

5.1 YOLOV1先验框

在YOLOV1中,有两个预选框可供选择,但是实际中物体可能远不止两种,并且有长的宽的,多个物体重叠在一起或者一个物体有多个标签,可能就会出现问题。

5.2 Fast-RCNN先验框

在当时Fast-RCNN用了9种先验框,但是它的做法是有三种scale不同大小,每种大小三种比例的先验框有1:1、1:2、2:1这3种比例,但是这种做法对实际的数据集可能无法完全适配。

5.3 YOLO-V2聚类提取先验框

比如在coco数据集中,有很多标注数据,假如说在标注的数据中标注了100万个框,对这100万个框使用kmeans进行聚类,加入k=5,就会将先验框的大小、长宽比例、中心坐标点等特征分成5类,而这5类也是专门针对当前数据集的个性化分类。那先验框就会有5种确定的大小比例,这就会和最终的实际任务会比较接近。
而kmeans的距离计算公式用LOU来实现。
作者通过实验发现,k=5可以获得比较好的IOU值。

YOLOV1 = 772 = 98
YOLOV2 = 13135 = 845
YOLOV2在先验框的数量上大幅度提升,V1是98个,V2则为845个

6、偏移量计算方法

6.1 anchor boxes

  • 通过引入anchor boxes(锚框,即先验框),使得预测的box数量更多(1313n)
  • 跟faster-rcnn系列不同的是先验框并不是直接按照长宽固定比给定
without anchor69.5mAP81%recall
with anchor69.2mAP88%recall

在第5节提到增加了先验框,但是如表格所示,并没有增加mAP值,但是recall是明显增加的,recall描述了被标记物体全部被检测的可能性。

YOLOV1:使用全连接层来预测边界框的坐标
Faster R-CNN:使用手工挑选的先验因素来预测边界框,Faster R-CNN中的区域生成网络(RPN)只使用卷积层来预测锚框的偏移量和置信度。由于预测层是卷积,RPN预测了特征图中每个位置的偏移量。

Anchor Box的构成:

  • 使用CNN提取的Feature Map的点,来定位目标的位置
  • 使用Anchor Box的Scale来表示目标的大小
  • 使用Anchor Box的Aspect Ratio来表示目标的形状。

6.2 YOLO-V2-Directed Location Prediction

直接的位置预测改为相对位置预测策略

  1. bbox:中心为 ( x p , y p ) (x_p,y_p) (xp,yp),宽和高为 ( w p , h p ) (w_p,h_p) (wp,hp),则: x = x p + w p ∗ t x x = x_p+w_p*t_x x=xp+wptx y = y p + h p ∗ t y y = y_p+h_p*t_y y=yp+hpty
  2. t x t_x tx=1,则将bbox在x轴向右移动 w p w_p wp t x t_x tx=−1则将其向左移动 w p w_p wp
  3. 这样会导致收敛问题,模型不稳定,尤其是刚开始进行训练的时候
  4. V2中并没有直接使用偏移量,而是选择相对grid cell的偏移量

解析:

  1. 得到先验框有4个参数 ( x p , y p , h p , w p ) (x_p,y_p,h_p,w_p) xpyphpwp,这是kmeans聚类预测出来的
  2. 预测出4个偏移量 ( t x , t y , t w , t h ) (t_x,t_y,t_w,t_h) txtytwth,新的框为 ( x , y , h , w ) (x,y,h,w) xyhw,其中 x = x p + t x x = x_p+t_x x=xp+tx,y、h、w同理
  3. 但是这样存在一个问题,网络初期的时候效果不好(网络啥也不会),预测出的offset偏移量可能导致得到的框会错误的很离谱,V2对此做出改进
  4. 具体改进为中心点x、y的偏移量的预测结果,加上sigmoid的,这样保证了中心点不会离开原来的grid cell格子,还要加上单元格与图像左上角的偏移量为 ( c x , c y ) (cx,cy) cxcy,h和w的预测策略不变。

具体公式为:
b x = σ ( t x ) + c x b_x = σ(t_x)+c_x bx=σ(tx)+cx
b y = σ ( t y ) + c y b_y = σ(t_y)+c_y by=σ(ty)+cy
b w = p w e t w b_w = p_we^{t_w} bw=pwetw
b h = p h e t h b_h = p_he^{t_h} bh=pheth

加入预测值为 ( σ t x , σ t y , t w , t h ) (σt_x,σt_y,t_w,t_h) σtxσtytwth = (0.2,0.1,0.2,0.32)
anchor框为: p w = 3.19275 , p h = 4.00944 p_w = 3.19275,p_h = 4.00944 pw=3.19275ph=4.00944
在特征图位置:
b x = 0.2 + 1 = 1.2 b_x = 0.2+1 = 1.2 bx=0.2+1=1.2
b y = 0.1 + 1 = 1.1 b_y = 0.1+1 = 1.1 by=0.1+1=1.1
b w = 3.19275 ∗ e 0.2 = 3.89963 b_w = 3.19275*e^{0.2} = 3.89963 bw=3.19275e0.2=3.89963
b h = 4.00944 ∗ e 0.32 = 5.52153 b_h = 4.00944*e^{0.32} = 5.52153 bh=4.00944e0.32=5.52153
在原位置:
b x = 1.2 ∗ 32 = 38.4 b_x = 1.2*32=38.4 bx=1.232=38.4
b y = 1.1 ∗ 32 = 35.2 b_y = 1.1*32=35.2 by=1.132=35.2
b w = 3.89963 ∗ 32 = 124.78 b_w = 3.89963*32=124.78 bw=3.8996332=124.78
b h = 5.52153 ∗ 32 = 176.68 b_h = 5.52153*32=176.68 bh=5.5215332=176.68

7、YOLO-V2的感受野

7.1 感受野

在这里插入图片描述
从原始图像数据中,经过特征提取,得到一个Feature Map特征图,特征图的一个点可能代表原始图像中一个区域,这个区域就是这个点的感受野。越大的感受野越能感受一个整体。

7.2 卷积核对应参数

在这里插入图片描述
如图有一个(5,5)的图像数据(或者特征图),经过一个(3,3)的卷积核,步长为1,得到的输出就是一个(3,3)的特征图,再经过一个一次卷积就能得到(1,1)的输出,如果直接用5*5的卷积核就能得到一个(1,1)的输出,一步能得到的结果为什么要用两步呢?但是实际中却都是在用小的卷积核没有用大的。实际上用多步小的卷积核,用到的参数更少。

假设输入大小都是(H,W,C),并且都使用c个卷积核(得到c个特征图),可以计算一下各自所需参数:
1个(7,7)卷积核所需参数:
= C • ( 7 • 7 • c ) = 49 c 2 =C • (7 • 7 • c) = 49c^2 =C(7•7•c)=49c2
3个(3,3)卷积核所需参数:
= 3 • c • ( 3 • 3 • c ) = 27 c 2 =3•c•(3•3•c) = 27c^2 =3•c(3•3•c)=27c2

7.3 Fine-Grained Features

  • 最后一层时感受野太大了,小目标可能丢失了,需融合之前的特征

在这里插入图片描述
yolo算法,在一次次的卷积过程中,越往后的感受野越大,(224,224)的图像经过处理最后得到的Feature Map特征图是(7,7),实际上这个感受野太大了,容易忽视一下小物体,比较容易检测到大的物体。

yolov2在最后得到的特征图是(13,13,1024)将其拆分为(1,13,13,1024),倒数第二个特征图为(26,26,512)拆分为(4,13,13,512),再拆分为(2,13,13,1024),将其拼接为(3,13,13,1024),reshape成(13,13,3072)

8、多尺度检测

  • YOLO-V2-Multi-Scale
  • 都是卷积操作可没人能限制我了!一定iterations之后改变输入图片大小

实际中得到的图像大小是不一样的的,全部resize成相同大小,会影响检测效果。
不同输入大小能不能做,肯定能的,卷积和输入大小没有关系啊。
最小的尺寸为(320,320),最大的为(608,608)
原始的YOLO使用448×448的输入分辨率。通过添加锚框,我们将分辨率改为416×416。然而,由于我们的模型只使用卷积层和池化层,因此可以实时调整大小。我们希望YOLOv2能够鲁棒地运行在不同尺寸的图像上,所以我们将多尺度训练应用到模型中。

我们不需要修改输入图像的大小,而是每隔几个迭代就改变网络。每10个批次,我们的网络就会随机选择一个新的图像尺寸。由于我们的模型缩减了32倍,我们从以下32的倍数中抽取:{320, 352, …, 608}。因此,最小的选项是320 × 320,最大的是608 × 608。我们将调整网络的尺寸,然后继续训练。

这种制度迫使网络学会在各种输入维度上进行良好的预测。这意味着同一个网络可以预测不同分辨率下的检测结果。网络在较小的尺寸下运行得更快,因此YOLOv2在速度和准确性之间提供了一个简单的权衡。

在低分辨率下,YOLOv2作为一个廉价、相当准确的检测器运行。在288×288时,它以超过90 FPS的速度运行,其mAP几乎与Faster R-CNN一样好。这使它成为较小的GPU、高帧率视频或多个视频流的理想选择。

在高分辨率下,YOLOv2是一个最先进的检测器,在VOC 2007上的mAP为78.6,而运行速度仍高于实时速度。

YOLOV1整体解读
YOLOV2整体解读

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器学习杨卓越

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值