YOLO v2

论文:YOLO9000:Better, Faster, Stronger(CVPR 2016)

关键点

1、加入BN去掉dropout
Batch Normalization有助于解决反向传播过程中的梯度消失和爆炸问题,降低对一些超参数(比如学习率、网络参数的大小范围、激活函数的选择)的敏感性,并且起到了正则化效果,从而能够获得更好的收敛速度和收敛效果。
2、High Resolution 图像微调Classifier
先用 224 ∗ 224 224*224 224224从头开始训练网络,大概160个epoch,然后调整到448*448, 再训练10个epoch(注意:这两步都是在ImageNet数据集上操作),最后再在检测的数据集上fine-tuning,以缓解分辨率变化的影响
3、引入anchor
YOLOv1中是直接预测目标尺寸和位置,v2引入了Anchor,学习调整Anchor,且用聚类的方法选择anchor尺寸
约束预测边框的位置
在这里插入图片描述

Faster RCNN中:
t x = ( x − x a ) / w a   ,    t y = ( y − y a ) / h a t w = log ⁡ ( w / w a ) ,    t h = log ⁡ ( h / h a ) t x ∗ = ( x ∗ − x a ) / w a ,   t y ∗ = ( y ∗ − y a ) / h a t w ∗ = log ⁡ ( w ∗ − w ) ,    t h ∗ = log ⁡ ( h ∗ / h a ) \begin{aligned} t_x &= (x - x_a) /w_a \ ,\ \ t_y = (y - y_a) / h_a\\[1ex]t_w &= \log(w/ w_a), \quad \ \ t_h = \log(h/h_a)\\[1ex]t_x^* &= (x^* - x_a) / w_a,\ t_y^* = (y^* - y_a) /h_a\\[1ex]t_w^* &= \log(w^* - w),\ \ t_h^* = \log(h^*/h_a) \end{aligned} txtwtxtw=(xxa)/wa ,  ty=(yya)/ha=log(w/wa),  th=log(h/ha)=(xxa)/wa, ty=(yya)/ha=log(ww),  th=log(h/ha)

x , y \color{blue}x,y x,y是预测边框的中心, x a , y a \color{blue}x_a,y_a xa,ya是先验框(anchor)的中心点坐标, w a , h a \color{blue}w_a,h_a wa,ha是先验框(anchor)的宽和高, t x , t y \color{blue}t_x,t_y tx,ty是要学习的参数
t x , t y \color{blue}t_x,t_y tx,ty的范围并没有任何约束,因此预测边框的中心可能出现在任何位置,训练早期阶段不容易稳定。YOLO调整了预测公式,将预测边框的中心约束在特定gird网格内
YOLOv2中:
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 Pr ⁡ (  object  ) ∗ I O U ( b ,  object  ) = σ ( t o ) \begin{aligned} b_{x} &=\sigma\left(t_{x}\right)+c_{x} \\ b_{y} &=\sigma\left(t_{y}\right)+c_{y} \\ b_{w} &=p_{w} e^{t_{w}} \\ b_{h} &=p_{h} e^{t_{h}} \\ \operatorname{Pr}(\text { object }) * I O U(b, \text { object }) &=\sigma\left(t_{o}\right)\end{aligned} bxbybwbhPr( object )IOU(b, object )=σ(tx)+cx=σ(ty)+cy=pwetw=pheth=σ(to)

  • t x , t y \color{blue}{t_x,t_y} txty:经过sigmoid函数处理后范围在0到1之间,模型训练更加稳定
  • c x , c y \color{blue}{c_x,c_y} cxcy:当前网格左上角到全图左上角距离,每个格子长宽都被归一化
  • p w , p h \color{blue}{p_w,p_h} pwph:表示先验框的宽高
  • b x , b y , b w , b h \color{blue}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 ) \color{blue}Pr(Object)*IOU(b,object) Pr(Object)IOU(b,object)是预测边框的置信度

在这里插入图片描述

4、passthrough层检测细粒度特征
输入 416 ∗ 416 416*416 416416经过卷积网络下采样最后输出的特征图大小为 13 ∗ 13 13*13 1313,是输入图片的 1 / 32 1/32 1/32,这时小目标的特征已经不明显了。想要对小目标进行很好地检测需要有更多细节的特征图,文中做法是将在最后一个pooling之前大小为 26 ∗ 26 ∗ 512 26*26*512 2626512的特征图,先用 1 ∗ 1 1* 1 11卷积从 26 ∗ 26 ∗ 512 26 *26* 512 2626512 降维到 26 ∗ 26 ∗ 64 26* 26* 64 262664,再1拆4,直接传递到原先的pooling+conv之后的特征图处,合并到一起作为输出的特征图

具体的拆分方式
在这里插入图片描述
上图取自参考文献【2】

5、高分辨率图像的对象检测
YOLOv2调整网络结构后能够支持多种尺寸的输入图像。通常是使用 416 ∗ 416 416*416 416416的输入图像,如果用较高分辨率的输入图像,比如544*544,则mAP可以达到78.6,有1.8的提升。
6、速度更快
YOLO2提出了Darknet-19(有19个卷积层和5个MaxPooling层)网络结构,比VGG-16小一些,精度不弱于VGG-16,但浮点运算量减少到约1/5,运算速度更快

模型架构

在这里插入图片描述

训练

  • 先在ImageNet分类数据集上预训练Darknet-19,先用 224 ∗ 224 224*224 224224的输入训练160个epochs
  • 将输入调整到 448 ∗ 448 448*448 448448 ,继续在ImageNet数据集上finetune分类模型,训练10个epochs
  • 修改Darknet-19分类模型为检测模型,移除最后一个卷积层、global average pooling层以及softmax层,添加三个 3 ∗ 3 ∗ 1024 3*3*1024 331024卷积层,同时加上passthrough层,最后用 1*1 卷积层输出预测结果 n u m _ a n c h o r s ∗ ( 5 + n u m _ c l a s s e s ) num\_anchors*(5+num\_classes) num_anchors(5+num_classes),因此与训练的数据集有关
  • 多尺度训练,每训练10个epoch,会随机选择一种size 32的倍数如:320,352,…,608 输入

实验

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

参考文献

【1】YOLO v2算法详解
【2】YOLOv2 / YOLO9000 深入理解
【3】Batch Normalization原理与实战
【4】目标检测算法之YOLOv2损失函数详解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值