(论文精读)YOLO-V2 & YOLO9000 ……(YOLO9000: Better, Faster, Stronger)

YOLO9000是一个实时目标检测系统,能检测9000多种物体。YOLOv2作为其改进版,在提高精度的同时保持了速度,通过多尺度训练可在速度和准确性间灵活调整。使用联合训练方法,YOLO9000能在未标记的数据上检测新类别,且在ImageNet检测任务上表现优秀。
摘要由CSDN通过智能技术生成

论文地址:https://arxiv.org/pdf/1612.08242.pdf

一、精读论文

论文题目

YOLO9000:
Better, Faster, Stronger

论文作者

Joseph Redmon∗†, Ali Farhadi∗

刊物名称

出版日期

2016

摘要

作者在摘要里说明了本篇论文分为两部分,
第一部分就是对yolov1的改进,最终效果是,可以很快但精度略低,可以很精准但速度略慢。
第二部分是对如何检测9000个物体的说明,用了一个联合训练的方法,使得yolov2可以检测出来原本没有标签的物体。
训练是在coco目标检测数据集和imagenet分类数据集,验证在imagenet目标检测数据集,这里有不同的三个数据集。

关键词

yolo

总结

我们介绍了YOLO9000,一个最先进的,实时的目标检测系统,可以检测超过9000个目标类别。首先,我们提出了对YOLO检测方法的各种改进,包括新颖的和来自以前的工作。改进后的模型YOLOv2是最先进的标准检测任务,如高标准VOC和COCO。使用一种新颖的、多尺度的训练方法,相同的YOLOv2模型可以在不同的大小下运行,在速度和准确性之间提供了一个简单的权衡。在67FPS的速度下,YOLOv2在VOC2007上获得76.8mAP。在40FPS的速度下,YOLOv2获得78.6mAP,性能优于最先进的方法,如使用ResNet和SSD的Faster RCNN,同时运行速度仍然要快得多。最后,我们提出了一种联合训练目标检测和分类的方法 ,利用该方法,我们在COCO检测数据集和ImageNet分类数据集上同时训练YOLO9000。我们的联合训练允许YOLO9000预测没有标记检测数据的对象类的检测。我们在ImageNet检测任务上验证了我们的方法。YOLO9000在ImageNet检测验证集上获得19.7mAP,尽管只有200个类中的44个的检测数据。在非COCO的156个类别中,YOLO9000得到16.0mAP。但是YOLO可以检测到200多个类;它预测了对9000多个不同对象类别的检测。而且它仍然可以实时运行。

二、研读总结(分三段总结,500字左右)

1、 针对问题与解决方法

(1)Batch Normalization.(BN,批归一)
BN我在之前读论文的时候详细的说过,这里就不再赘述了,可以看一下我整理的BN那一篇论文,【精读AI论文-BN】
这是一个普遍的常用技巧。BN是对每一个神经元的输出进行标准化,而不是对某一层输出整体标准化。

在yolov2的所有卷积层中都加入了BN(卷积-BN-激活)。加入后有2%的mAP提升。

(2)High Resolution Classifier.(高分辨率的分类器)
对于目标检测而言,图片分辨率高的话会让定位和识别分类更加精准,所以在yolo v1中,作者预训练时用的是imagenet分类数据集是224 * 224的,后面微调的时候将224 * 224 图片变成448 * 448的尺寸(目标检测)输入网络,这样改变尺寸,网络就要多重新学习一部分,会带来性能损失。

这块容易混,再简单说一下,v1中预训练使用的是分类数据集,大小是224 * 224 ,然后迁移学习,微调时使用yolo模型做目标检测的时候才将输入变成448 * 448。

作者在V2中改进,直接在预训练中输入的就是448 * 448的尺寸,微调的时候也是448 * 448。

这一个弥补措施提高了 4%的mAP。

说实话我觉得这是作者故意留的一手,这是非常容易想到的点,要不就是作者着急发论文,要不就是作者想第二年再继续发论文留的(手动狗头)。

(3)Convolutional With Anchor Boxes.(带有锚的卷积)
这个anchor机制我最早是在Faster R-CNN里看到的,在刚看yolov1的时候我就在想,grid cell生成的是不是 anchor,读到后面发现不是,在v1里生成的是 bounding boxes。

在yolov2中,一张图片分割成13 * 13 的网格,每个grid cell生成5个长度比例都定好的 anchor。也是通过IOU计算,选出来一个anchor产生的预测框去预测物体。

也就是每一个grid cell生成5个anchor,这5个anchor分别对应5个预测框,这些预测框要计算对应anchor的偏移量和置信度。

刚开始的anchor尺寸比例通过数据集分析聚类得到。

v1版本中每个grid cell 携带的是30个信息(whxy+置信度+分类数),v2版本中每个grid cell携带的是 25 * 5 =125个信息,5就是5个anchor,25是 xywh+置信度+分类数。所以v1输出7 * 7 * 30 。v2输出 13 * 13 * 125(13 * 13 * 5 * 25)。

为了让模型更加稳定,并且v1中bbox存在尺度无限制问题,v2中做出了一些改进,让预测框的中心点约束在该grid cell内,而对于anthor则没有约束。

并且去掉了v1中的全连接层。
去掉池化层,让输出的分辨率更高,并且将输入分辨率变成416*416,目的是想让最后输出的feature map是奇数大小。这里的奇数偶数是指最后输出的大小(输入除以32)。

为啥要奇数?如果是偶数的话,中心点就落在了四个格子的交汇处,奇数就刚好落在一个格子的中心。也就是希望让一个grid cell去预测物体,而不是四个。
v1中是 7 * 7 * 2 = 98个框,v2中是13 * 13 * 5 = 845个框。

不用anchor:69.5%mAP,recall 81%。
用anchor:69.2mAP,recall 88%。

精度下降0.3%,不过recall上升了 7%,这里其实也比较好理解,v1里就不到一百个框,v2里变成不到一千个框了,多了这么多框recall肯定增加了,不过增加了这么多框,必然带来了更多无用的框,precision下降一点点也是可以理解的。

再明确一下这俩的区别:
recall:真正目标被检测出来的比例。
precision:预测框中包含目标的比例。

简言之,recall表示得找全,precision表示得找准。

(4)Dimension Clusters.(维度聚类)
这一块主要解释如何得到anchor。
首先批评了一下Faster R-CNN。Faster R-CNN使用的RPN里出现了anchor,但他的anchor是手工指定了长宽比和尺寸,相当于一个超参数,不过这违背了yolo对于目标检测模型的初衷,因为如果指定了anchor的大小就没办法适应各种各样的物体了。

v2中不再手工指定anchor的长宽比,而是使用k均值聚类方法。
关于k均值聚类我之前也有整理过笔记,可以看一下----机器学习算法----聚类
在计算聚类距离的时候没有用传统的欧氏距离,用的IOU。

2、 数据实验与结论分析

对比yolov1所作出的改进:

加了BN(卷积后,激活函数前);
加了高分辨率分类器;
加了anchor(聚类得到个数,1个gird cell 生成5个anchor);
限制预测框;
加入细粒度特征(类似于concat的残差)
加入对尺度训练
改进骨干网络(GoogleNet 变darknet-19)
通过WordTree将不同数据集结合联合训练。用一种新颖的方法扩充了数据集。
再用一张表格对比一下V1和V2版本

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云雨、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值