前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【个人整理】一文看尽YOLO V2的10个改进技巧(下篇)

【个人整理】一文看尽YOLO V2的10个改进技巧(下篇)

作者头像
小草AI
发布2019-06-02 15:49:45
1.8K0
发布2019-06-02 15:49:45
举报
文章被收录于专栏:机器学习与python集中营

前言

YOLO V1 问世已久,风头很快就被SSD盖过,原作者rbg(Ross Girshick)大神自然不甘心,于是又在yolo v1的基础之上提出了YOLO v2 ,根据论文中的总结,yolo v2在yolo v1的基础之上一共有10个主要的改进点,本文是结合网上的众多博客文章,用自己习惯的方式做了一个简单地整理。

鉴于篇幅较多,10个改进点将分为2篇来说明,本次为系列文章第二篇。

目录

一、YOLO V2概览

二、YOLO V2相比于YOLO V1的改进点

三、YOLO V2的10大改进点剖析(Better)

3.1 Batch Normalization

3.2 High Resolution Classifier

3.3 Convolutional With Anchor Boxes

3.4 Dimension Clusters (维度聚类

3.5 Direct location prediction(直接位置预测)

3.6 Fine-Grained Features(细粒度特征)

3.7 Multi-Scale Training

四、YOLO V2的10大改进点剖析(Faster)

4.1 Darknet-19 架构

4.2 Training for Classification (分类的训练技巧)

4.3 Training for Detection (检测时的训练技巧)

五、YOLO V2的10大改进点剖析(Stronger)

(续接上一篇文章)

3.6 Fine-Grained Features(细粒度特征)

SSD通过不同Scale的Feature Map来预测Box来实现多尺度,而YOLO v2则采用了另一种思路:添加一个passthrough layer,来获取上一层26x26的特征,并将该特征同最后输出特征(13*13)相结合,以此来提高对小目标的检测能力。这种思想其实就是一个跨层链接的思想,这不就是残差的思想吗?:

通过Passthrough 把26 * 26 * 512的特征图叠加成13 * 13 * 2048的特征图,与原生的深层特征图相连接。

YOLO v2 使用扩展后的的特征图(add passthrough),将mAP提高了了1%。

总结:这里实际上是有个Trick,网络最后一层是13*13,相对原来7*7的网络来讲,细粒度的处理目标已经double了,再加上上一层26*26的Feature共同决策,这两层的贡献等价于SSD的4层以上,但计算量其实并没有增加多少。这里添加的那个层称之为:passthrough layer。这个层的作用就是将前面一层的26*26的feature map和本层的13*13的feature map进行连接,有点像ResNet。这样做的原因在于虽然13*13的feature map对于预测大的object以及足够了,但是对于预测小的object就不一定有效。也容易理解,越小的object,经过层层卷积和pooling,可能到最后都不见了,所以通过合并前一层的size大一点的feature map,可以有效检测小的object。

3.7 Multi-Scale Training

为了让YOLOv2模型更加robust(鲁棒性),作者引入了Muinti-Scale Training,简单讲就是在训练时输入图像的size是动态变化的。

注意:这一步是在检测数据集上fine tune时候采用的,不要跟前面在Imagenet数据集上的两步预训练分类模型混淆,本文细节确实很多。

具体来讲,在训练网络时,每训练10个epoch,网络就会随机选择另一种size的输入。那么输入图像的size的变化范围要怎么定呢?前面我们知道本文网络本来的输入是416*416,最后会输出13*13的feature map,也就是说downsample的factor是32,因此作者采用32的倍数作为输入的size,具体来讲文中作者采用从{320,352,…,608}的输入尺寸。

这种网络训练方式使得相同网络可以对不同分辨率的图像做detection。虽然在输入size较大时,训练速度较慢,但同时在输入size较小时,训练速度较快,而multi-scale training又可以提高准确率,因此算是准确率和速度都取得一个不错的平衡。

不同输入size情况下的YOLOv2和其他object detection算法的对比。可以看出通过multi-scale training的检测模型,在测试的时候,输入图像在尺寸变化范围较大的情况下也能取得mAP和FPS的平衡。不过同时也可以看出SSD算法的表现也十分抢眼。如下图所示:

总结:

下面几个策略对于mAP的提升贡献较大:

High Resolution Classifier的提升非常明显(近4%),另外通过结合dimension prior+localtion prediction这两种方式引入anchor也能带来近5%mAP的提升。

四、YOLO V2的10大改进点剖析(Faster)

在YOLO v1中,作者采用的训练网络是基于GooleNet,这里作者将GooleNet和VGG16做了简单的对比,GooleNet在计算复杂度上要优于VGG16(8.25 billion operation VS 30.69 billion operation),但是前者在ImageNet上的top-5准确率要稍低于后者(88% VS 90%)。而在YOLO v2中,作者采用了新的分类模型作为基础网络,那就是Darknet-19。

4.1 Darknet-19 架构

Darknet-19只需要5.58 billion operation。这个网络包含19个卷积层和5个max pooling层,而在YOLO v1中采用的GooleNet,包含24个卷积层和2个全连接层,因此Darknet-19整体上卷积卷积操作比YOLO v1中用的GoogleNet要少,这是计算量减少的关键。最后用average pooling层代替全连接层进行预测。这个网络在ImageNet上取得了top-5的91.2%的准确率。

darknet-19的基本结构如下:

4.2 Training for Classification (分类的训练技巧)

这里的2和3部分在前面有提到,就是训练处理的小trick。这里的training for classification都是在ImageNet上进行预训练,主要分两步:1、从头开始训练Darknet-19,数据集是ImageNet,训练160个epoch,输入图像的大小是224*224,初始学习率为0.1。另外在训练的时候采用了标准的数据增加方式比如随机裁剪,旋转以及色度,亮度的调整等。2、再fine-tuning 网络,这时候采用448*448的输入,参数的除了epoch和learning rate改变外,其他都没变,这里learning rate改为0.001,并训练10个epoch。结果表明fine-tuning后的top-1准确率为76.5%,top-5准确率为93.3%,而如果按照原来的训练方式,Darknet-19的top-1准确率是72.9%,top-5准确率为91.2%。因此可以看出第1,2两步分别从网络结构和训练方式两方面入手提高了主网络的分类准确率。

总的训练技巧可以总结如下:

(1)预训练 - 训练分类网络(Training for classification)

采用随机梯度下降法SGD,在 ImageNet-1000分类数据集 上训练了160个epochs,参数设定:

初始学习率 - starting learning rate:0.1

多项式速率衰减 - polynomial rate decay:4的幂次

权值衰减 - weight decay:0.0005

动量 - momentum:0.9

(2)数据增广方法(Data augmentation)

采用了常见的data augmentation,包括:

随机裁剪、旋转 - random crops、rotations

色调、饱和度、曝光偏移 - hue、saturation、exposure shifts

(3)多分辨率训练

通过初始的224 * 224训练后,把分辨率上调到了448 * 448,同样的参数又训练了10个epochs,然后将学习率调整到了0.001。

4.3 Training for Detection (检测时的训练技巧)

在前面第2步之后,就开始把网络移植到detection,并开始基于检测的数据再进行fine-tuning。

(1)首先把最后一个卷积层去掉,然后添加3个3*3的卷积层,每个卷积层有1024个filter,而且每个后面都连接一个1*1的卷积层,1*1卷积的filter个数根据需要检测的类来定。比如对于VOC数据,由于每个grid cell我们需要预测5个box,每个box有5个坐标值和20个类别值,所以每个grid cell有125(即5*(5+20)=125)个filter(与YOLOv1不同,在YOLOv1中每个grid cell有30个filter,还记得那个7*7*30的矩阵吗;

(2)在YOLOv1中,类别概率是由grid cell来预测的,也就是说一个grid cell对应的两个box的类别概率是一样的,但是在YOLOv2中,类别概率是属于box的,每个box对应一个类别概率,而不是由grid cell决定,因此这边每个box对应25个预测值(5个坐标加20个类别值),而在YOLOv1中一个grid cell的两个box的20个类别值是一样的)。另外作者还提到将最后一个3*3*512的卷积层和倒数第二个卷积层相连。最后作者在检测数据集上fine tune这个预训练模型160个epoch,学习率采用0.001,并且在第60和90epoch的时候将学习率除以10,weight decay采用0.0005。

五、YOLO V2的10大改进点剖析(Stronger)

这里指的是通过在yolo v2的基础之上进行改进,得到了yolo9000,该网络可以同时检测9000+种物体类别,所以更加强大,关于他的具体实现,这里先不坐叙述,会在下一篇文章里面详细说明是如何能够识别9000+种物体的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与python集中营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像识别
腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档