YOLOv2:YOLO9000:Better,Faster,Stronger解读,入门小白,若博文有不妥之处,望加以指点,笔者一定及时修正。

① 论文翻译

摘要

(emmmmmm......没啥重要的)

1. 引言

目标检测的一个难题是小目标的检测。 常见的用于检测的数据集比用于分类的数据集小得多了。因为检测的数据集成本比分类的高得多。

我们提出了一种新方法来利用我们已有的大量分类数据,并用它来扩展当前检测系统的范围。 我们的方法使用对象分类的分层视图,允许我们将不同的数据集组合在一起。 我们还提出了一种联合训练算法,它允许我们在检测和分类数据上训练检测器。 我们的方法利用标记的检测图像来学习精确定位对象,同时使用分类图像来增加其多样性和鲁棒性。

首先,我们改进了基础YOLO检测系统,产生YOLOv2。 然后使用数据集组合方法和联合训练算法来训练来自ImageNet的9000多个类的模型。

2. Better

YOLOV1与Fast RCNN相比,定位误差大;与基于region proposal方法相比,召回率较低。 计算机视觉应用的趋势是更大、更深的网络。一般训练更大的网络或者将多个模型融合起来可以获取更好的性能。对于YOLOV2,保证速度和精度。不扩展我们的网络,我们简化我们的网络,使其更容易学习。我们将很多 trick与YOLO结合起来,来提高性能。如table 2:

①Batch Normalization

在每个卷积层后面添加一个BN层,可以加快收敛速度,也有利于正则化。所以去除了YOLOV1后面的dropout层。

②高分辨率分类器

简单的说就是很多模型都是用在 ImageNet 数据集上预训练的模型,一般都是去除后面几层,保留前面的用来提取特征。比如SSD里面使用VGG、ResNet、MobileNetV2等。YOLOV1是预训练的是 224X224,然后提升到 448X448。而YOLOV2直接是 448X448 进行预训练。

③Convolutional With Anchor Boxes

下面先介绍一下 RPN:在 feature map 上进行滑窗操作,每一个中心预测 9 种不同大小的建议框。

每个点预测 K (Faster RCNN里面 k=9 )种不同大小的建议框,3个尺度和3个纵横比。上面的256-d是指通道数,reg 为 4K,因为一个reg表示(x,y,w,h);而 cls 为 2K,表达是或者不是目标。

之前的YOLOV1利用最后的全连接层完成 bounding boxes 的预测,会丢失较多的空间信息,定位不准确。为了引入Anchor boxes来预测 bounding boxes,去掉网络的全连接层。 1)去掉最后一个池化层确保输出的卷积层特征图有更高的分辨率;

2)缩减输入图片的分辨率,从 448x448 变成 416x416,这样让后面产生的特征图大小都为奇数。这样最中间就会有一个中心格。作者的解释是: 大物体通常会占据图像的中间位置,可以只用一个中心的 cell 来预测大物体的位置。如果特征图的宽和高是偶数,就需要用中间的 4个cell来预测,效率会比1个低得多;

3)使用卷积层进行降采样,最后得到13x13的特征图(416/32); 4)有了 Anchor box,同时预测类别和位置。YOLOV1是每个 cell 来预测类别,也就是每个网格来预测类别。而每个 cell 画的两个bounding boxes 负责预测框的坐标,让类别的预测与每个cell预测的位置绑在一起。而在YOLOV2中,不再绑在一起,而是全部放到Anchor box 中。

使用了 Anchor boxes 之后,预测框超过1000个,而YOLOV1只能在每张图片给出98个预测框(7x7x2 = 98)。

④聚类

这边先介绍一下 K-means: K-means是非监督学习中的聚类方法。它需要事先确定常数 K,K表示最终的聚类类别数。首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(欧式距离、曼哈顿距离、契比雪夫距离、余弦距离、Jaccard相似系数(IOU)),将样本点归到最相似的类中。接着重新计算每个类的类中心,重复上述过程,直到质心不再变化,最终确定了每个样本所属类别以及每个类的质心。

这里为什么使用聚类呢?我们知道 Faster RCNN 和 SSD 中的 Anchor box 的大小和比例是按照经验设定的,然后网络会在训练过程中调整 Anchor boxes 的尺寸。但是如果一开始就找到合适尺寸的 Anchor boxes ,那么肯定可以帮助网络更好预测。作者使用了 K-means的方式对训练集的 bounding boxes 做聚类,试图找到合适的 Anchor boxes。

作者发现如果采用标准的 K-means (即采用欧氏距离来衡量差异),在 box 的尺寸比较大的时候其误差也更大。而作者希望的是误差和 box 的尺寸没有太大关系。所以距离函数重新定义,这里使用了 IOU 参与距离计算,使得通过这些 Anchor boxes 获得好的 IOU 分值。使用聚类进行选择的优势是达到相同的 IOU 结果时所需的 anchor box 数量更少, 使得模型的表示能力更强, 任务更容易学习。距离公式:

上面的 centroid 表示聚类是被选中作为质心的框,box 表示其他边框,D 表示两者之间的距离,而 IOU 表示两个框之间的重叠度。IOU越大,距离越小,越接近。

作者实验表明,边框 K 越多,Avg IOU越大。K = 5的时候,就可与人工设置 9 个 Anchor boxes尺寸得到的效果。聚类得到的框和之前手动挑选的框大不一样。有稍微短宽的和高瘦一些的(框)。这表明了使用k-means聚类来生成b-box的初始框,这个模型能有更好的表型以及更容易学习。 (笔者就不懂了,是生成很多框,然后用这种方法选取 bounding box 的初始框,也就是一个cell 产生5个 bounding box?好像③④矛盾啊而且这作用类似于NMS作用?看下面的分析。读论文还是很难受的啊。。。。。而YOLOV1里面是认为设置每个 cell 有两个 bounding box)

⑤直接预测位置

这一小段需要仔细阅读,回味无穷: 当YOLOV2运用 Anchor boxes机制的时候,也就是上述的 ③,设定 9 个固定面积和尺寸的框。产生了一个问题,模型不稳定。论文中不稳定的因素:来自于 bounding box 的 (x,y) 的预测。在RPN中,网络预测了值

以及(x,y)坐标,计算公式为:简单点说,这边也就是预测(x,y)的坐标

其中,x,y 是预测框的中心点坐标,

是先验框的中心点坐标,
是先验框的宽和高。
是要学习的参数,也就是偏移量。

公式没有限制条件,所以任何Anchor box 都可以偏移到图像任意的位置上,所以随机初始化模型会需要很长一段时间才能稳定产生可靠的偏移量。但是YOLOV2没有预测偏移量,而是直接预测对于网格单元的相对位置。即相对单元格的左上角的位置坐标。当(x, y)被直接预测出来,那整个bounding box还差w和h需要确定。YOLOV2的做法是既有保守又有激进,x和y直接暴力预测,而w和h通过bounding box prior的调整来确定,YOLOV2为每个bounding box预测出5个坐标

。 YOLOV2的公式为:将预测边框的中心约束在特定gird网格内。

其中,

为预测框的中心和宽高。
是预测框的置信度。注意的是:YOLOV1直接计算置信度的值,而YOLOV2是对预测的参数
进行
变换后作为置信度的值。

是当前网格左上角到图像左上角的距离,需要先将网格大小归一化,即令一个网格宽和高均为1。

均为先验框的宽和高。
是Sigmoid函数。
是要学到的函数,分别用于预测框的中心点坐标和宽高,以及置信度。

看上面的公式也可以看出,b-box的宽和高也是同时确定出来,并不会像RPN那样通过regression来确定。

都是k-means聚类之后先验框的宽和高YOLOV2直接预测出偏移量

,相当于直接预测了bounding box的宽和高。使用聚类搭配直接位置预测法的操作,使得模型上升了5个百分点。

由于σ函数将

约束在(0,1)范围内,所以根据上面的计算公式,预测边框的蓝色中心点被约束在蓝色背景的网格内。约束边框位置使得模型更容易学习,且预测更为稳定。

这边注意的是:Anchor只是试验性在YOLOV2上铺设,一旦有了dimension priors就把$Anchor$抛弃了

⑥小目标检测的处理

为了加强对小目标检测的精确度。YOLOV2使用了一个passthrough层的方法。具体来说,就是在最后一个pooling之前,特征图的大小是2626512,将其1拆4,直接传递到pooling后(并且又经过一组卷积)的特征图,两者叠加到一起作为输出的特征图。

上面的图只是一个示意图,而不是代码中的做法。

⑦多尺度训练

因为去掉了全连接层,YOLO2可以输入任何尺寸的图像。因为整个网络下采样倍数是32,作者采用了{320,352,...,608}等10种输入图像的尺寸,这些尺寸的输入图像对应输出的特征图宽和高是{10,11,...19}。训练时每10个batch就随机更换一种尺寸,使网络能够适应各种大小的对象检测。

3. Faster

追求速度和精确度之间的平衡。 提出了一个网络结构 Darknet-19,比 VGG小但是精度不弱于 VGG。但浮点运算量减少到约1/5,以保证更快的运算速度。 用 darknet-19 作为 YOLOV2的 backbone 网络。一般的检测任务模型都会有一个分类网络作为 backbone网络,比如 SSD 拿 VGG 作为 backbone 。YOLOV2用的自家的分类网络 darknet-19 作为base。同时在 darknet-19 中使用 Batch Normalization 来加速收敛。最后输出为(batch_size,13,13,num_anchors*(5+num_classes))。。。。。。网络结构不细究了咯!其中 num_anchors = 5,先验框个数,这个先验框是聚类来做的。

4. Stronger

提出了一种联合训练方法,能够容许同时使用目标检测数据集和分类数据集。使用有标记的检测数据集精确定位,使用分类数据增加类别和鲁棒性。 (个人觉得不必在意。。。。。)

5. YOLOV2的损失函数

误差依然包括边框位置误差、置信度误差、对象分类误差。

1)

意思是预测边框中,与真实对象边框IOU最大的那个,其IOU<阈值Thresh,此系数为1,即计入误差,否则为0,不计入误差。YOLO2使用Thresh=0.6。

2)

意思是前128000次迭代计入误差。这里是与先验框的误差,而不是与真实对象边框的误差。可能是为了在训练早期使模型更快学会先预测先验框的位置。

3)

意思是该边框负责预测一个真实对象(边框内有对象)。 各种
是不同类型误差的调节系数,类似于YOLOV1中的。 (历来损失函数都是调试代码才会透彻理解。。。。笔者小白也不例外啊!)

② 阅读笔记及V1与V2的比较

1、对比YOLO1的输出张量,YOLO2的主要变化就是会输出5个先验框,且每个先验框都会尝试预测一个对象。输出的

张量中,25维向量包含 20个对象的分类概率+4个边框坐标+1个边框置信度。

2、

3、5个

,是聚类K-means产生的,计算距离的依据是IOU;

4、Backbone:Darknet-19;

5、YOLO V2是一个纵向自上而下的网络架构,随着通道数目的不断增加,FLOPS是不断增加的。

嘿!。。。。。。。后期代码解读会上传到github上哈,敬请期待!

③ 参考

这几位的博客十分好,隆重推荐!

  • 1、https://zhuanlan.zhihu.com/p/25167153
  • 2、https://blog.csdn.net/zxyhhjs2017/article/details/83013297
  • 3、https://zhuanlan.zhihu.com/p/47575929
  • 4、https://blog.csdn.net/leviopku/article/details/82588959

yolov2训练_YOLOv2 : YOLO9000:Better,Faster,Stronger解读相关推荐

  1. 【目标检测 论文精读】……YOLO-V2 YOLO9000 ……(YOLO9000: Better, Faster, Stronger)

    文章目录 1.YOLO-V1回顾 2.Abstract(摘要) 3.Introduction(引言) 4.Better(更准) (1)Batch Normalization.(BN,批归一) (2)H ...

  2. 【YOLOv2原文+翻译】YOLO9000: Better, Faster, Stronger

    最近新出了YOLOV4,我系统的从V1开始整理出稿,传送门: [YOLOv1原文+翻译]You Only Look Once Unified, Real-Time Object Detection [ ...

  3. 目标检测经典论文——YOLOV2论文翻译:YOLO9000: Better, Faster, Stronger(YOLO9000:更好、更快、更强)

    YOLO9000: Better, Faster, Stronger YOLO9000:更好.更快.更强 Joseph Redmon*†, Ali Farhadi*† University of Wa ...

  4. 深度学习论文阅读目标检测篇(五)中文版:YOLOv2《 YOLO9000: Better, Faster, Stronger》

    深度学习论文阅读目标检测篇(五)中文版:YOLOv2< YOLO9000: Better, Faster, Stronger> 摘要 1.引言 2. 更好 3. 更快 4. 更强 5. 结 ...

  5. 深度学习论文阅读目标检测篇(五)中英对照版:YOLOv2《 YOLO9000: Better, Faster, Stronger》

    深度学习论文阅读目标检测篇(五)中文版:YOLOv2< YOLO9000: Better, Faster, Stronger> Abstract 摘要 1. Introduction 1. ...

  6. 目标检测 - YOLO9000 : Better, Faster, Stronger

    YOLO9000 : Better, Faster, Stronger code: http://pjreddie.com/darknet/yolo/ 本文主要有两点: 1)改进YOLO,提出了 YO ...

  7. YOLO9000, Better, Faster, Stronger论文翻译——中英文对照

    文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书 声明:作者翻译论文仅为学习,如有侵权请联系作者删除博文,谢谢! 翻译论文汇总:https://github.com ...

  8. YOLO9000, Better, Faster, Stronger论文翻译——中文版

    文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书 声明:作者翻译论文仅为学习,如有侵权请联系作者删除博文,谢谢! 翻译论文汇总:https://github.com ...

  9. YOLO 9000论文翻译 | YOLO9000:Better, Faster, Stronger

    文章已迁至:http://www.machunjie.com/translate/27.html 如需交流,请移步新地址,谢谢! YOLO 9000论文翻译 | YOLO9000:Better, Fa ...

最新文章

  1. 「iOS 面试之道」勘误(二)
  2. python bytes' is not JSON serializable
  3. 鸿蒙是安卓换皮UI,鸿蒙2.0是安卓换皮?还真不是
  4. 关于jQuery对象(类数组对象)以及DOM对象相互转化问题——[object Object]和[object HTMLInputElement]
  5. AngularJs 入门系列-1 使用 AngularJs 搭建页面基本框架
  6. Wpf 使用x命名空间的ClassModifier
  7. php mysql合同跟踪,使用TCP协议进行路由跟踪
  8. Unity3D:UGUI遍历子控件
  9. RocketMQ类关系图之broker/store
  10. ad中按钮开关的符号_收藏:电路图形符号大全
  11. WebView加载淘宝,天猫链接失败
  12. tenacity库 重试代码
  13. php 搜索引擎 分词_PHP 实现中文分词搜索功能
  14. Java 比较字符串之间大小
  15. Lattice ddr3教程全攻略之时序约束篇
  16. 高中数学必修二立体几何中的向量方法(经典案例讲解)
  17. html游戏让目标人物移动,如何用html5编写鼠标事件与游戏人物移动
  18. curl命令 – 文件传输工具
  19. Linux 中 wq 、wq!、x、q、q!区别
  20. LTE从开机到RACH过程

热门文章

  1. 在java中如何输入角度_在Java中以特定角度绘制一条线
  2. centos安装mysql5.6系统崩溃_CentOS中安装MySQL5.6报错的解决方法
  3. new ext.toolbar控制按钮间距_新闻速递 | APT携新品金属按钮亮相宝博会,圈粉无数!...
  4. python手机编译器推荐_Python编译器最新版|Python编译器手机版下载 v1.2 安卓版 - 数码资源网...
  5. Springboot+多线程+等待获取执行结果
  6. Java中线程的实现方式
  7. Python个 flask 教程地址 做个记录方便以后学习用
  8. Java开发中巧妙使用链表来实现模拟栈的入栈出栈操作
  9. IDEA Java开发常用插件
  10. Visual Studio 打开程序提示仅我的代码怎么办