yolo_v2论文发表在CVPR2017。v2算法在v1的基础上可以说是飞跃性提升,吸取诸子百家之优势。同时,v2的论文也是目前为止yolo系列论文里干货最多的文章。


论文标题:《YOLO9000: Better, Faster, Stronger》
论文地址: https://arxiv.org/pdf/1612.08242v1.pdf


yolo_v2的一大特点是可以”tradeoff“,翻译成中文就是”折中”。v2可以在速度和准确率上进行tradeoff,比如在67帧率下,v2在VOC2007数据集的mAP可以达到76.8; 在40帧率下,mAP可以达到78.6。这样,v2就可以适应多种场景需求,在不需要快的时候,它可以把精度做很高,在不需要很准确的时候,它可以做到很快。

v2在v1上的提升:

batch normalization: BN能够给模型收敛带来显著地提升,同时也消除了其他形式正则化的必要。作者在每层卷积层的后面加入BN后,在mAP上提升了2%。BN也有助于正则化模型。有了BN便可以去掉用dropout来避免模型过拟合的操作。BN层的添加直接将mAP硬拔了2个百分点,这一操作在yolo_v3上依然有所保留,BN层从v2开始便成了yolo算法的标配。

high resolution classifier:所有最顶尖的检测算法都使用了基于ImageNet预训练的分类器。从AlexNet开始,大多数分类器的输入尺寸都是小于256x256的。最早的YOLO算法用的是224x224,现在已经提升到448了。这意味着网络学习目标检测的时候必须调整到新的分辨率。
对于YOLOv2,作者一开始在协调分类网络(指DarkNet-19)用的448X448全分辨率在ImageNet上跑了10个epoch。这使得网络有时间去调整自己的filter来使得自己能够在更高分辨率的输入上表现更佳。然后,作者们把这种更高分辨率的分类网络用到detection上,发现mAP提升了4% 。

Convolutional With Anchor Boxes: 在yolo_v2的优化尝试中加入了anchor机制。YOLO通过全连接层直接预测Bounding Box的坐标值。Faster R-CNN并不是直接预测坐标值。Faster R-CNN只是用RPN种的全连接来为每一个box预测offset(坐标的偏移量或精修量)以及置信度(得分)。(说明:faster r-cnn的box主体来自anchor,RPN只是提供精修anchor的offset量)
由于预测层是卷积性的,所以RPN预测offset是全局性的。预测offset而不是坐标简化了实际问题,并且更便于网络学习。
作者去除了YOLO的全连接层,使用anchor框来预测bounding box。首先,作者去除了一层池化层以保证卷积输出具有较高的分辨率。作者把448X448的图像收缩到416大小。因为作者想让输出特征图的维度是奇数(416/32=13,13为奇数),这样的话会有一个中间单元格(center cell)。物体(尤其是大物体)经常占据图像的中心,所以有一个单独位置恰好在中心位置能够很好地预测物体。YOLO的卷积层下采样这些图像以32(即25252^5)为采样系数(416/32 = 13),所以输出feature map为13x13。
使用了anchor boxes机制之后,准确率有一点点下降。YOLO(指YOLO v1)只能在每张图给出98个预测框,但是使用了anchor boxes机制之后模型能预测超过1000个框。

without anchor 69.5 mAP 81% recall
with anchor 69.2 mAP 88% recall

尽管mAP稍微下降了一些,但是在召回率上的提升意味着模型有更多提升的空间。

Dimension Clusters: 当作者对yolo使用anchor机制时,遇到了两个问题。1,模板框(prior)的大小是手动挑选的(指anchor prior的大小一开始使人为手动设定的,Faster R-CNN中k=9,大小尺寸一共有3x3种)。box的规格虽然后期可以通过线性回归来调整,但如果一开始就选用更合适的prior(模板框)的话,可以使网络学习更轻松一些。(本文将prior翻译成模板框,是我自己的体会,仅供参考)
作者并没有手动设定prior,而是在训练集的b-box上用了k-means聚类来自动找到prior。如果用标准k-means(使用欧几里得距离),较大box会比较小box出现更多的错误。然而,我们真正想要的是能够使IOU得分更高的优选项,与box的大小没有关系。因此,对于距离判断,作者用了:
d(box, centroid) = 1 - IOU(box, centroid)
作者对k-means算法取了各种k值,并且画了一个曲线图

最终选择了k=5,这是在模型复杂度和高召回率之间取了一个折中。聚类得到的框和之前手动挑选的框大不一样。有稍微短宽的和高瘦一些的(框)。
我们比较了前后的平均IOU,如下表:

在k=5时聚类效果和Faster R-CNN中的9-anchor效果接近,而使用9-anchor的聚类,会有一个明显的提升。这表明了使用k-means聚类来生成b-box的初始框,这个模型能有更好的表型以及更容易学习。

Direct location prediction: 当在YOLO中使用anchor boxes机制的时候,遇到了第二个问题:模型不稳定。尤其时早期迭代的时候。不稳定的因素主要来自于为box预测(x,y)位置的时候。在RPN中,网络预测了值txtxt_x和tytyt_y以及(x, y)坐标,计算式如下:

xxx = (tx∗wa)" role="presentation" style="position: relative;">(tx∗wa)(tx∗wa)(t_x * w_a) - xaxa x_a
yyy = (ty∗ha)" role="presentation" style="position: relative;">(ty∗ha)(ty∗ha)(t_y * h_a) - yayay_a
例如,预测出 txtxt_x = 1意味着把框整体向右移动了一个框的距离。
这个公式没有加以限制条件,所以任何anchor box都可以偏移到图像任意的位置上。随机初始化模型会需要很长一段时间才能稳定产生可靠的offsets(偏移量)。
我们并没有“预测偏移量”,而是遵循了YOLO的方法: 直接预测对于网格单元的相对位置

直接预测(x, y),就像yolo_v1的做法,不过v2是预测一个相对位置,相对单元格的左上角的坐标(如上图所示)。当(x, y)被直接预测出来,那整个bounding box还差w和h需要确定。yolo_v2的做法是既有保守又有激进,x和y直接暴力预测,而w和h通过bounding box prior的调整来确定。yolo为每个bounding box预测出5个坐标( txtxt_x, tytyt_y, twtwt_w, ththt_h, totot_o)

看上面的公式也可以看出,b-box的宽和高也是同时确定出来,并不会像 RPN那样通过regression来确定。 pwpwp_w和 phphp_h都是kmeans聚类之后的prior(模板框)的宽和高,yolo直接预测出偏移量 twtwt_w和 ththt_h,相当于直接预测了bounding box的宽和高。 使用聚类搭配直接位置预测法的操作,使得模型上升了5个百分点。
论文刚看到这儿的时候,我也很纳闷,好像又没用anchor,作者在前面花大篇幅讲的anchor机制在这里又被否定了。不过看到等我看到下面表格的时候我才明白:

从第四行可以看出, anchor机制只是试验性在yolo_v2上铺设,一旦有了dimension priors就把anchor抛弃了。最后达到78.6mAP的成熟模型上也没用anchor boxes。

Fine-Grained Features:调整后的yolo将在13x13的特征图上做检测任务。虽然这对大物体检测来说用不着这么细粒度的特征图,但这对小物体检测十分有帮助。Fast R-CNN和SSD都是在各种特征图上做推荐网络以得到一个范围内的分辨率。我们采用不同的方法,只添加了一个passthrough层,从26x26的分辨率得到特征。

multi-scale training:用多种分辨率的输入图片进行训练。

darknet-19:用darknet-19作为yolo_v2的backbone网络。一般的检测任务模型都会有一个分类网络作为backbone网络,比如faster R-CNN拿VGG作为backbone。yolo_v2用的自家的分类网络darjnet-19作为base,体现出自家的优越性。同时在darknet-19中使用batch normalization来加速收敛。

YOLO系列之yolo v2相关推荐

  1. yolo系列之yolo v3【深度解析】——讲的挺好,原作者厉害的

    版权申明:转载和引用图片,都必须经过书面同意.获得留言同意即可 本文使用图片多为本人所画,需要高清图片可以留言联系我,先点赞后取图 这篇博文比较推荐的yolo v3代码是qwe的keras版本,复现比 ...

  2. YOLO系列之yolo v1

    yolo v1发表在CVPR2016上,是经典的one-stage检测算法.在没接触yolo之前,我曾经就和师兄争论过,是否能把bounding box的坐标和宽高像分类网络那样预测出来,Yolo v ...

  3. 【YOLO系列】YOLO V1 论文精读与学习总结

    目录 0. 前言 1.YOLO V1 大体思路 2. YOLO V1的训练过程 2.1 YOLO V1网络结构 2.2 具体训练过程 2.2.1 把主干结构在ImageNet上进行预训练 2.2.2 ...

  4. YOLO系列:YOLO v2深度解析 v1 vs v2

    概述 第一,在保持原有速度的优势之下,精度上得以提升.VOC 2007数据集测试,67FPS下mAP达到76.8%,40FPS下mAP达到78.6%,可以与Faster R-CNN和SSD一战 第二, ...

  5. YOLO系列:YOLO v3解析

    本文好多内容转载自 https://blog.csdn.net/leviopku/article/details/82660381 yolo_v3 提供替换backbone.要想性能牛叉,backbo ...

  6. YOLO系列:YOLO v1深度解析

    声明一点,我是工程应用人员,此文章仅适合算法应用工程师. 1.首先 先看一下YOLO的整体结构: 2.其次 看一下YOLO的工作过程: (1) 将原图划分为SxS的网格.如果一个目标的中心落入某个格子 ...

  7. YOLO系列代码解读(图像检测)

    1.YOLO v1 yolo v1源码解析 - 筱 - CSDN博客  https://blog.csdn.net/baidu_27643275/article/details/82794559 [D ...

  8. YOLO系列目标检测算法详解

    目录 前言 YOLO发展历程 目标检测 YOLO开山之作 ---- YOLO(v1) YOLOv2 YOLOv3 PaddleDetection中YOLOv3模型介绍 总结 前言 YOLO发展历程 F ...

  9. 目标检测 | YOLO系列超全讲解v1,v2,v3

    前言 一.YOLOv1 1. 网络结构 2. 实现方法 3. 损失函数 4. 缺点 二.YOLOv2 1. 网络结构 2. 改进方法 3. YOLO9000 4. 网络训练细节 三.YOLOv3 1. ...

最新文章

  1. android基础(基本框架的构成)
  2. .NET下如何拦截鼠标、键盘消息?Win32NET来帮你
  3. View Components as Tag Helpers,离在线模板编辑又进一步
  4. 论 静态方法@staticmethod 类方法@classmethod @property属性
  5. Nginx服务安全加固
  6. 履带式机器人运动模型及应用分析(图片版)
  7. mysql中rm+-f_Mysql命令大全
  8. linux/centos shell脚本中非交互式修改密码
  9. Java 高级工程师面试题总结-参考答案(已拿Offer)
  10. arcgis地理数据库之创建sde用户
  11. UML类图中实线虚线的指向关系
  12. shimo的学习之MySQL 学习
  13. 三维动画设计与制作【1】
  14. 请求接口参数正确请求失败的问题
  15. html中如何倒圆角,html – 在CSS中颠倒圆角?
  16. 指针型函数实现插入字符
  17. tp5:为什么find()出来的数据有时候可以用toArray() 有时候会报错?
  18. Codeforces Round #702 (Div. 3)ABCEF
  19. 前端工程师能够用很低的学习本钱来运用它完成常用的效劳端代码
  20. 【金猿案例展】某大型电机公司——水电机组智能运维系统建设

热门文章

  1. sketch_apr04a:82:4: error: stray ‘\302‘ in programsketch_apr04a:82:4: error: stray ‘\240‘ in progra
  2. 思维/图论 (CodeForces 1189D2 Add on a Tree: Revolution)
  3. 笔记1:VC获取系统时间的方法
  4. Moodle平台总结
  5. k8s kubelet 服务无法启动报 code=exited, status=1/FAILURE错误
  6. 薪资幅度上涨70%,外包翻身,拿下美团点评L8级技术专家岗(面经+心得)
  7. 安卓手机使用termux搭建centos7个人博客服务器
  8. 新装ubuntu adb不识别问题
  9. BZOJ1455罗马游戏
  10. 16、Python小案例