YOLOv2解读

YOLOV2解读

建议看代码理解细节!
YOLOv2代码pytorch实现链接

简介

YOLOv2是在YOLOv1基础上改进而来的,它使用了一种新颖的多尺度的训练方法,与YOLOv1相比,相同的YOLOv2模型可以运行在不同大小的图片上,提供精度与速度之间的轻松权衡。最后提出了一种联合训练目标检测和分类的方法,使用这种方法可以同时在COCO检测数据集和ImageNet分类数据集上同时训练YOLO9000,并且此联合训练方法允许YOLO9000预测没有标记检测数据的目标类。这个YOLO9000训练此处不讲。

Better

这部分是作者针对YOLO的缺陷而进行的一些改进,那么YOLO有哪些缺陷呢?YOLO存在两个缺点,与faster-rcnn相比,第一:定位不明确,产生了大量定位错误;第二:与基于region proposal的方法相比,YOLO的召回率相对较低。 因此,YOLO主要朝着这两方面去提升。而在现在的计算机视觉领域,通常朝着更大更深的网络去提升性能,更好的性能通常取决于训练更大的网络或者将多个模型整合在一起。然而对于YOLOv2,反而是简化网络,大概看一下YOLOv2的表现:YOLOv2算法在VOC 2007数据集上的表现为67 FPS时,MAP为76.8,在40FPS时,MAP为78.6.

1、Batch Normalization

现在神经网络对图片训练前,都要对图片进行预处理,将图片数据分布归一化0和1之间,这样做的目的是可以加快训练收敛速度,防止梯度消失。问题在于对图像数据进行归一化只在神经网络第一层进行,那么随着网络深度加深或者在训练过程中,其数据分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近,所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因,而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。

在这里插入图片描述
而在论文中,BN(Batch Normalization)层简单讲就是对网络的每一层的输入都做了归一化,这样网络就不需要每层都去学数据的分布,收敛会快点。原来的YOLO算法(采用的是GoogleNet网络提取特征)是没有BN层的,因此在YOLOv2中作者为每个卷积层都添加了BN层。另外由于BN可以规范模型,所以本文加入BN后就把dropout去掉了。实验证明添加了BN层可以提高2%的mAP。

在上图的代码中可以看到,在每层的卷积层后都加上了一个BN层!

2、High Resolution Classifier

在原始YOLO中,用224×224分辨率的图片尺寸训练分类网络,接着又用448×448分辨率的图片尺寸训练检测网络。这种训练方法意味着从分类模型切换到检测模型的时候,模型还要适应图像分辨率的改变 。而YOLOv2将训练分成两步,首先先

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值