YOLO系列之yolo v2
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相关推荐
- yolo系列之yolo v3【深度解析】——讲的挺好,原作者厉害的
版权申明:转载和引用图片,都必须经过书面同意.获得留言同意即可 本文使用图片多为本人所画,需要高清图片可以留言联系我,先点赞后取图 这篇博文比较推荐的yolo v3代码是qwe的keras版本,复现比 ...
- YOLO系列之yolo v1
yolo v1发表在CVPR2016上,是经典的one-stage检测算法.在没接触yolo之前,我曾经就和师兄争论过,是否能把bounding box的坐标和宽高像分类网络那样预测出来,Yolo v ...
- 【YOLO系列】YOLO V1 论文精读与学习总结
目录 0. 前言 1.YOLO V1 大体思路 2. YOLO V1的训练过程 2.1 YOLO V1网络结构 2.2 具体训练过程 2.2.1 把主干结构在ImageNet上进行预训练 2.2.2 ...
- YOLO系列:YOLO v2深度解析 v1 vs v2
概述 第一,在保持原有速度的优势之下,精度上得以提升.VOC 2007数据集测试,67FPS下mAP达到76.8%,40FPS下mAP达到78.6%,可以与Faster R-CNN和SSD一战 第二, ...
- YOLO系列:YOLO v3解析
本文好多内容转载自 https://blog.csdn.net/leviopku/article/details/82660381 yolo_v3 提供替换backbone.要想性能牛叉,backbo ...
- YOLO系列:YOLO v1深度解析
声明一点,我是工程应用人员,此文章仅适合算法应用工程师. 1.首先 先看一下YOLO的整体结构: 2.其次 看一下YOLO的工作过程: (1) 将原图划分为SxS的网格.如果一个目标的中心落入某个格子 ...
- YOLO系列代码解读(图像检测)
1.YOLO v1 yolo v1源码解析 - 筱 - CSDN博客 https://blog.csdn.net/baidu_27643275/article/details/82794559 [D ...
- YOLO系列目标检测算法详解
目录 前言 YOLO发展历程 目标检测 YOLO开山之作 ---- YOLO(v1) YOLOv2 YOLOv3 PaddleDetection中YOLOv3模型介绍 总结 前言 YOLO发展历程 F ...
- 目标检测 | YOLO系列超全讲解v1,v2,v3
前言 一.YOLOv1 1. 网络结构 2. 实现方法 3. 损失函数 4. 缺点 二.YOLOv2 1. 网络结构 2. 改进方法 3. YOLO9000 4. 网络训练细节 三.YOLOv3 1. ...
最新文章
- android基础(基本框架的构成)
- .NET下如何拦截鼠标、键盘消息?Win32NET来帮你
- View Components as Tag Helpers,离在线模板编辑又进一步
- 论 静态方法@staticmethod 类方法@classmethod @property属性
- Nginx服务安全加固
- 履带式机器人运动模型及应用分析(图片版)
- mysql中rm+-f_Mysql命令大全
- linux/centos shell脚本中非交互式修改密码
- Java 高级工程师面试题总结-参考答案(已拿Offer)
- arcgis地理数据库之创建sde用户
- UML类图中实线虚线的指向关系
- shimo的学习之MySQL 学习
- 三维动画设计与制作【1】
- 请求接口参数正确请求失败的问题
- html中如何倒圆角,html – 在CSS中颠倒圆角?
- 指针型函数实现插入字符
- tp5:为什么find()出来的数据有时候可以用toArray() 有时候会报错?
- Codeforces Round #702 (Div. 3)ABCEF
- 前端工程师能够用很低的学习本钱来运用它完成常用的效劳端代码
- 【金猿案例展】某大型电机公司——水电机组智能运维系统建设
热门文章
- sketch_apr04a:82:4: error: stray ‘\302‘ in programsketch_apr04a:82:4: error: stray ‘\240‘ in progra
- 思维/图论 (CodeForces 1189D2 	 Add on a Tree: Revolution)
- 笔记1:VC获取系统时间的方法
- Moodle平台总结
- k8s kubelet 服务无法启动报 code=exited, status=1/FAILURE错误
- 薪资幅度上涨70%,外包翻身,拿下美团点评L8级技术专家岗(面经+心得)
- 安卓手机使用termux搭建centos7个人博客服务器
- 新装ubuntu adb不识别问题
- BZOJ1455罗马游戏
- 16、Python小案例