前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >目标检测算法YOLO-V2详解

目标检测算法YOLO-V2详解

作者头像
智能算法
发布2020-07-29 15:19:43
1.5K0
发布2020-07-29 15:19:43
举报
文章被收录于专栏:智能算法

今天,我们一起学习下YOLO-V2YOLO-V1比起来都做了哪些改进?从速度优化和精确度优化的角度来看,主要有以下内容:

  • Darknet-19结构
  • YOLO-v2结构
  • 高精度分类器
  • Anchor卷积
  • 维度聚类
  • 直接位置预测
  • 细粒度特征
  • 多尺度训练
  • YOLO-v2性能

针对YOLO-V1准确率不高,容易漏检,对长宽比不常见物体效果差等问题,结合SSD的特点,提出了YOLO-V2算法。改算法从速度和精度上做了一些改进措施,我们一起看下都有哪些优化?微信公众号[智能算法]回复关键字“1002”,即可下载YOLOV2论文。

YOLO-V2速度优化

大多数检测网络依赖于VGG-16作为特征提取网络,VGG-16是一个强大而准确的分类网络,但是过于复杂。比如一张224x224的图片进行一次前向传播,其卷积层就需要多达306.9亿次浮点数运算。 YOLO-V1使用使用的是基于GoogLeNet的自定制的网络,比VGG-16更快,一次前向传播需要85.2亿次运算,不过它的精度要略低于VGG-16。 在YOLO-V2中,使用的是Darknet-19的网络,该网络一次前向传播仅需要55.8亿次运算,我们先来看下Darknet-19模型的网络框架:

Darknet-19结构

Darknet-19顾名思义,有19个卷积层,如下图:

Darknet-19网络框架

网络很简单,大致连接如下:

  1. 首先输入图像大小为224x224x3,经过3x3x32的卷积层以及池化后得到112x112x32的特征图;
  2. 接着经过3x3x64的卷积层以及池化后得到56x56x64的特征图;
  3. 接着依次经过3x3x128,1x1x64,3x3x128的卷积层以及池化后得到28x28x128的特征图;
  4. 接着依次3x3x256,1x1x128,3x3x256的卷积层和最大化池化后得到14x14x256的特征图;
  5. 接着依次经过3x3x512,1x1x256,3x3x512,1x1x256,3x3x512和最大化池化后得到7x7x512的特征图;
  6. 接着再一次通过3x3x1024,1x1x512,3x3x1024,1x1x512,3x3x1024的卷积层后得到7x7x1024的特征图;
  7. 最后经过一个1x1x1000的卷积层,均值池化层得到1000个结果再经过softmax输出。
YOLO-v2结构

既然YOLO-V2的主框架是基于Darknet-19搭建的,我们来看下YOLO-V2的结构,如下图:

YOLO-V2的结构框架

其中上图中的输入大小为416x416x3,其他的0-24层跟上面学的Darknet-19是一样的。我们来从第25层看一下后面的那几层啥意思:

  1. 25层的route 16的意思是将第16层中的数据取过来做第26层的处理。
  2. 26层对第16层的数据做了一个reorganization的处理,将26x26x512的数据转化为13x13x2048的特征图;
  3. 27层将第26层和24层的数据拿过来堆放到一起,给第28层处理;
  4. 28层做了一个3x3x1024的卷积,将特征图大小变为13x13x1024
  5. 29层最终经过一个1x1x125的卷积层,将特征图变为13x13x125,最后得到检测结果。

到这里应该有一些疑问,什么是reorganization处理?以及为什么最后是13x13x125的尺寸?这里简单的说下reorganization处理,reorganization处理就是硬性的对数据进行重组,比如将一个2x2的矩阵重组成1x4,重组前后元素总个数不变,但是尺寸变化。上面的就是对26x26x512的数据进行了重组为13x13x2048大小。那么最后的尺寸为什么是13x13x125,这个下面再讲好理解些。框架上大致优化就这些,我们接着看以下精确度上如何优化。

YOLO-V2精确度优化

为了得到更好的精确度,YOLO-V2主要做从这几方面做了优化:高精度分类器,Anchor卷积,维度聚类,直接位置预测,细粒度特征,多尺度训练。我们一个一个看:

高精度分类器

YOLO-V1中,网络训练的分辨率是224x224,检测的时候将分辨率提升到448x448。而YOLO-V2直接修改了预训练分类网络的分辨率为448x448,在ImageNet数据集上训练10个周期(10 epochs)。这个过程让网络有足够的时间去适应高分辨率的输入,然后再fine tune检测网络,mAP获得了4%的提升。

Anchor卷积

YOLO-V1中使用全连接层进行bounding box预测,这会丢失较多的空间信息,导致定位不准。YOLO-V2借鉴了Faster RCNNanchor的思想,我们知道Faster RCNN中的anchor就是在卷积特征图上进行滑窗采样,每个中心预测9个不同大小和比例的anchor

总的来说YOLO-V2移除了全连接层(以获得更多的空间信息)使用anchor boxes去预测bounding boxes。并且YOLO-V2中的anchor box可以同时预测类别和坐标。具体做法如下:

  • YOLO-V1比起来,去掉最后的池化层,确保输出的卷积特征图有更高的分辨率。
  • 缩减网络,让图片的输入分辨率为416x416,目的是让后面产生的卷积特征图宽高都为奇数,这样就可以产生一个center cell。因为大物体通常占据了图像的中间位置,可以只用一个中心的cell来预测这些物体的位置,否则就要用中间的4cell来进行预测,这个技巧可稍稍提升效率。
  • 使用卷积层降采样(factor=32),使得输入卷积网络的416x416的图片最终得到13x13的卷积特征图(416/32=13)。
  • anchor box同时预测类别和坐标。因为YOLO-V1是由每个cell来负责预测类别的,每个cell对应的两个bounding box负责预测坐标。YOLO-V2中不再让类别的预测与每个cell绑定一起,而是全部都放到anchor box中去预测。

加入了anchor之后,我们来计算下,假设每个cell预测9anchor,那么总计会有13x13x9=1521boxes,而之前的网络仅仅预测了7x7x2=98boxes。具体每个网格对应的输出维度如下图:

YOLOV1和YOLOV2网格输出维度对比

我们知道YOLO-V1输出7x7x30的检测结果,如上图,其中每个网格输出的30个数据包括两个候选框的位置,有无包含物体的置信度,以及网格中包含物体类别的20个概率值。 YOLO-V2对此做了些改进,将物体类别的预测任务交给了候选框,而不再是网格担任了,那么假如是9个候选框,那么就会有9x25=225个数据的输出维度,其中25为每个候选框的位置,有无物体的置信度以及20个物体类别的概率值。这样的话,最后网络输出的检测结果就应该是13x13x225,但是上面网络框架中是125,是怎么回事儿呢?我们接着看。

维度聚类

在使用anchor时,Faster RCNNanchor boxes的个数和宽高维度往往是手动精选的先验框(hand-picked priors),如果能够一开始就选择了更好的,更有代表性的先验boxes维度,那么网络就应该更容易学到精准的预测位置。YOLO-V2中利用K-means聚类方法,通过对数据集中的ground truth box做聚类,找到ground truth box的统计规律。以聚类个数kanchor boxes个数,以k个聚类中心box的宽高为anchor box的宽高。

关于K-means,我们之前也有讲过如下: 基础聚类算法:K-means算法

但是,如果按照标准的k-means使用欧式距离函数,计算距离的时候,大boxes比小boxes产生更多的error。但是,我们真正想要的是产生好的IoU得分的boxes(与box大小无关),因此采用了如下距离度量方式:

d(box,centroid) = 1 - IoU(box,centroid)

假设有两个框,一个是3x5,一个框是5x5,那么欧式距离计算为:

\sqrt{(5-3)^2 + (5-5)^2} = 2

IoU的计算如下,为了统计宽高聚类,这里默认中心点是重叠的:

(3*5)/(5*5)=0.6

这里,为了得到较好的聚类个数,算法里做了组测试,如下图,随着k的增大IoU也在增大,但是复杂度也在增加。

k-means聚类个数的选择

所以平衡复杂度和IoU之后,最终得到k值为5.可以从右边的聚类结果上看到5个聚类中心的宽高与手动精选的boxes是完全不同的,扁长的框较少,瘦高的框较多(黑丝框对应VOC2007数据集,紫色框对应COCO数据集)。 这样就能明白为什么上面网络框架中的输出为什么是13x13x125了,因为通过聚类选用了5anchor

直接位置预测

上面学习,我们知道这里用到了类似Faster RCNN中的anchor,但是使用anchor boxes有一个问题,就是会使得模型不稳定,尤其是早期迭代的时候。大部分的不稳定现象出现在预测box的中心坐标时,所以YOLO-V2没有用Faster RCNN的预测方式。

YOLO-V2位置预测

t_x

t_y

就是预测边界框中心点相对于对应cell左上角位置的相对偏移值,为了将边界框中心点约束在当前cell中,使用了sigmoid函数处理偏移值,这样预测的偏移值就在(0,1)范围内了(每个cell的尺度看作1)。

我们具体来看以下这个预测框是怎么产生的?

在网格特征图(13x13)的每个cell上预测5anchor,每一个anchor预测5个值:

t_x

,

t_y

,

t_w

,

t_h

,

t_o

。如果这个cell距离图像左上角的边距为(

c_x

c_y

),cell对应的先验框(anchor)的长和宽分别为(

p_w

,

p_h

),那么网格预测框为下图蓝框。如下图:

候选框如何生成?

总的来说,虚线框为anchor box就是通过先验聚类方法产生的框,而蓝色的为调整后的预测框。算法通过使用维度聚类和直接位置预测这亮相anchor boxes的改进方法,将mAP提高了5%。接下来,我们继续看下还有哪些优化?

细粒度特征

我们前面学过SSD通过不同ScaleFeature Map来预测Box,实现多尺度,如下: 目标检测算法SSD结构详解YOLO-V2则采用了另一种思路:通过添加一个passthrough layer,来获取之前的26x26x512的特征图特征,也就是前面框架图中的第25步。对于26x26x512的特征图,经过重组之后变成了13x13x2048个新的特征图(特征图大小降低4倍,而channels增加4倍),这样就可以与后面的13x13x1024特征图连接在一起形成13x13x3072大小的特征图,然后再在此特征图的基础上卷积做预测。如下图:

YOLO-V2算法使用经过扩展后的特征图,利用了之前层的特征,使得模型的性能获得了1%的提升。

多尺度训练

原始的YOLO网络使用固定的448x448的图片作为输入,加入anchor boxes后输入变成了416x416,由于网络只用到了卷积层和池化层,就可以进行动态调整,检测任意大小的图片。为了让YOLO-V2对不同尺寸图片具有鲁棒性,在训练的时候也考虑到了这一点。

不同于固定网络输入图片尺寸的方法,没经过10批训练(10 batches)就会随机选择新的图片尺寸。网络使用的降采样参数为32,于是使用32的倍数{320,352,...,608},最小尺寸为320x320,最大尺寸为608x608。调整网络到相应维度然后继续训练。这样只需要调整最后一个卷积层的大小即可,如下图:

多尺度训练

这种机制使得网络可以更好地预测不同尺寸的图片,同一个网格可以进行不同分辨率的检测任务,在小尺寸图片上YOLO-V2运行更快,在速度和精度上达到了平衡。

YOLOV2性能

对于YOLO-V2的性能,直接看下YOLOV2和其他常见的框架在pascal voc2007数据集上测试结果性能比对表,如下表:

pascal voc2007数据集上测试结果

首先可以看到随着训练尺寸的尺寸变大,YOLOv2算法的mAP是逐渐上升的,FPS相应的逐渐下降。在554x554尺寸上的训练mAP达到78.6,从下面的性能分布图图中也可以看到YOLOV2算法的性能相对来说是挺不错的。

pascal voc2007上性能分布图

其中YOLOv2的五个蓝色圈圈代表上面表中的五个不同尺寸的结果。

好了,至此,我们从Darknet-19结构,YOLO-v2结构,高精度分类器,Anchor卷积,维度聚类,直接位置预测,细粒度特征,多尺度训练以及性能方面一起学习了YOLO-V2相比与YOLO-V1做了哪些改进。下一期,我们将一起学习YOLO-V3的算法框架。

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

本文分享自 智能算法 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • YOLO-V2速度优化
    • Darknet-19结构
      • YOLO-v2结构
      • YOLO-V2精确度优化
        • 高精度分类器
          • Anchor卷积
            • 维度聚类
              • 直接位置预测
                • 细粒度特征
                  • 多尺度训练
                    • YOLOV2性能
                    相关产品与服务
                    图像识别
                    腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档