论文笔记:YOLO9000: Better, Faster, Stronger(yolo v2)

2023-10-12 19:59

本文主要是介绍论文笔记:YOLO9000: Better, Faster, Stronger(yolo v2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、基本信息

标题:YOLO9000: Better, Faster, Stronger
时间:2016
引用格式:Redmon, Joseph, and Ali Farhadi. “YOLO9000: better, faster, stronger.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2017.

二、研究背景

YOLO v1虽然速度上比Faster R-CNN快了不少,但是Recall不如后者,每个gird也就2个bbox,全图也就7 * 7 * 2 = 96个bbox,比不上Faster RCNN的50 * 38 * 9 = 17100个Anchor的Recall。

三、创新点

所以YOLO v2就借鉴了Faster RCNN的Anchor思想,以及多个改进,从而使得mPA轻微下降(总体是提升)的情况下,Recall大幅提升。最重要的是保持yolo系列的速度:快!

从标题可以看到 Better, Faster, Stronger
Better:一系列改进方法提升mPA和Recall,好!
Faster:骨架网络与时俱进换成了更快的Darknet-19(v1用的是基于GoogLeNet的一个网络),快!
Stronger:利用WordTree实现了可以对9000种对象检测的模型,强!

Better

batch normalization 批归一化

mAP有2.4的提升

整理了笔记,传送到->batch normalization
总结就是batch normalization这个方法很流行、有效。

批归一化有助于解决反向传播过程中的梯度消失和梯度爆炸问题,降低对一些超参数(比如学习率、网络参数的大小范围、激活函数的选择)的敏感性,并且每个batch分别进行归一化的时候,起到了一定的正则化效果(YOLO2不再使用dropout),从而能够获得更好的收敛速度和收敛效果。

High Resolution Classifier 高分辨率图像微调分类模型

mAP提升了3.7

目前大部分的检测模型都会在先在ImageNet分类数据集上预训练模型的主体部分(CNN特征提取器),ImageNet分类模型基本采用大小为 224*224 的图片作为输入,分辨率相对较低,不利于检测模型。

YOLOv1在采用 224224 分类模型预训练后,将分辨率增加至 448448 ,并使用这个较高分辨率在检测数据集上finetune。但是直接切换分辨率,检测模型可能难以快速适应高分辨率。

因此,YOLOv2增加了在ImageNet数据集上使用 448*448 输入来finetune分类网络这一中间过程(10 epochs),这可以使得模型在检测数据集上finetune之前已经适用高分辨率输入。使用高分辨率分类器后,YOLOv2的mAP提升了约4%。

Convolutional With Anchor Boxes 采用先验框

召回率大幅提升到88%,同时mAP轻微下降了0.2

借鉴Faster RCNN的做法,YOLO2也尝试采用先验框(anchor)。在每个grid预先设定一组不同大小和宽高比的边框,来覆盖整个图像的不同位置和多种尺度,这些先验框作为预定义的候选区在神经网络中将检测其中是否存在对象,以及微调边框的位置。

同时YOLO2移除了全连接层。另外去掉了一个池化层,使网络卷积层输出具有更高的分辨率。

之前YOLO1并没有采用先验框,并且每个grid只预测两个bounding box,整个图像98个。YOLO2如果每个grid采用9个先验框,总共有13139=1521个先验框。所以,相对YOLO1的81%的召回率,YOLO2的召回率大幅提升到88%。同时mAP有0.2%的轻微下降。

不过YOLO2接着进一步对先验框进行了改良。聚类

Dimension Clusters 聚类提取先验框尺度

mAP有4.8的提升

在Faster R-CNN和SSD中,先验框的维度(长和宽)都是手动设定的,带有一定的主观性。如果选取的先验框维度比较合适,那么模型更容易学习,从而做出更好的预测。因此,YOLOv2采用k-means聚类方法对训练集中的groud truth做了聚类分析。因为设置先验框的主要目的是为了使预测的BBox与ground truth的IOU更高,所以聚类分析时选用box与聚类中心box之间的IOU值作为距离指标:
d ( box, centroid ) = 1 − I O U ( box, centroid ) d(\text {box, centroid})=1-I O U(\text {box, centroid}) d(box, centroid)=1IOU(box, centroid)
centroid是聚类时被选作中心的边框,box就是其它边框,d就是两者间的“距离”。IOU越大,“距离”越近。YOLO2给出的聚类分析结果如下图所示:

在这里插入图片描述

上图容易误解,以为它是一幅图上框的分布,错!anchor是基于gird上的,位移不会在全图上,仅在gird内。所以上图我们只看形状不要看位置!

上图左边是选择不同的聚类k值情况下,得到的k个centroid边框,计算样本中标注的边框与各centroid的Avg IOU。显然,边框数k越多,Avg IOU越大。YOLO2选择k=5作为边框数量与IOU的折中。对比手工选择的先验框,使用5个聚类框即可达到61 Avg IOU,相当于9个手工设置的先验框60.9 Avg IOU。

上图右边显示了5种聚类得到的先验框,VOC和COCO数据集略有差异,不过都有较多的瘦高形边框。

Direct location prediction 约束预测边框的位置

对Anchor的改进和具体实施
推理时怎么算x和y:
x = ( t x ∗ w a ) + x a y = ( t y ∗ h a ) + y a \begin{array}{l} x=\left(t_{x} * w_{a}\right)+x_{a} \\ y=\left(t_{y} * h_{a}\right)+y_{a} \end{array} x=(txwa)+xay=(tyha)+ya
其中, x , y x, y x,y 是预测边框的中心, x a , y a \quad x_{a}, y_{a} xa,ya 是先验框 (anchor) 的中心点坐标, w a , h a w_{a}, h_{a} wa,ha 是先验框 (anchor) 的宽和高, t x , t y \quad t_{x}, t_{y} tx,ty 是要学习的参数。

由于 t x , t y t_{x}, t_{y} tx,ty的取值没有任何约束,因此预测边框的中心可能出现在任何位置,训练早期阶段不容易稳定。
在这里插入图片描述
YOLO调整了预测公式,将预测边框的中心约束在特定gird网格内(先将网格大小归一化,即令一个网格的宽=1,高=1)。

物体中心对应一个grid,所以不要乱跑啊,我们只需在grid内再精确一下xy位移就行。 p w , p h p_w, p_h pw,ph是聚类得到的先验框w和h,这也验证了上面提到的“所以上图我们只看形状不要看位置!”。为什么是e指数函数,我认为网络初始化时倾斜与输出0,所以希望在最开始时和先验框最接近?

b x = σ ( t x ) + c x b y = σ ( t y ) + c y b w = p w e t w b h = p h e t h \begin{array}{c} b_{x}=\sigma\left(t_{x}\right)+c_{x} \\ b_{y}=\sigma\left(t_{y}\right)+c_{y} \\ b_{w}=p_{w} e^{t_{w}} \\ b_{h}=p_{h} e^{t_{h}} \\ \end{array} bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=pheth
其中,σ是sigmoid函数。 t x , t y , t w , t h t_{x}, t_{y}, t_{w}, t_{h} tx,ty,tw,th是要学习的参数,分别用于预测边框的中心和宽高。

关于置信度:
P r ( object ) ∗ I O U ( b , object ) = σ ( t o ) {Pr}(\text {object}) * I O U(b, \text {object})=\sigma\left(t_{o}\right) Pr(object)IOU(b,object)=σ(to)
yolo v1是根据选2个bbox中IOU大的,此时 Pr ⁡ ( \operatorname{Pr}( Pr( Object ) = 1 )=1 )=1 C o n f i d e n c e = I O U pred truth  Confidence =IOU_{\text {pred}}^{\text {truth }} Confidence=IOUpredtruth 
yolo v2则是直接预测一个值即 t 0 t_0 t0,然后经过sigmoid函数,作为Confidence。
Confidence表示当前bbox的可信度

通过将confidence和最大可能输出的类的probability相乘之后,要是得出的结果大于门限0.24,就会输出当前计算出的bbox的大小和位置,同时会输出是哪一个类(所以一个gird可以输出多个类),probability大小是多少。一共会生成13135个bbox,然后根据probability,通过filter,产生出最后预测的物体和其边框。
在这里插入图片描述

Fine-Grained Features 检测细粒度特征

通过passthrough层检测细粒度特征使mAP提升1。

passthrough层与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的2倍,passthrough层抽取前面层的每个 2*2 的局部区域,然后将其转化为channel维度

在这里插入图片描述

YOLO2中的passthrough
在这里插入图片描述
对于 2626512 的特征图,经passthrough层(下路)处理之后就变成了 13132048 的新特征图(特征图大小降低4倍,而channles增加4倍),这样就可以与后面(上路)的 13131024 特征图连接在一起形成 13133072 大小的特征图,然后在此特征图基础上卷积做预测。

Multi-Scale Training 多尺度图像训练

多尺度图像训练对mAP有1.4的提升。

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

Further Experiments

个hi-res detector,使mAP提高了1.8。

因为YOLO2调整网络结构后能够支持多种尺寸的输入图像。通常是使用416416的输入图像,如果用较高分辨率的输入图像,比如544544,则mAP可以达到78.6,有1.8的提升。

另外,作者在后期的实现中借鉴了ResNet网络,不是直接对高分辨特征图处理,而是增加了一个中间卷积层,先采用64个 11 卷积核进行卷积,然后再进行passthrough处理,这样 2626512 的特征图得到 1313*256 的特征图。这算是实现上的一个小细节。使用Fine-Grained Features之后YOLOv2的性能有1%的提升。可以看下面的对象检测模型各层的结构。

Faster

为了进一步提升速度,YOLO2提出了Darknet-19(有19个卷积层和5个MaxPooling层)网络结构。DarkNet-19比VGG-16小一些,精度不弱于VGG-16,但浮点运算量减少到约1/5,以保证更快的运算速度。
Darknet-19 分类模型:
在这里插入图片描述

对象检测模型各层的结构如下:
在这里插入图片描述
看一下passthrough层。图中第25层route 16,意思是来自16层的output,即2626512,这是passthrough层的来源(细粒度特征)。第26层11卷积降低通道数,从512降低到64(这一点论文在讨论passthrough的时候没有提到),输出262664。第27层进行拆分(passthrough层)操作,1拆4分成1313256。第28层叠加27层和24层的输出,得到13131280。后面再经过33卷积和11卷积,最后输出1313*125。

损失

在这里插入图片描述
公式中:
1 MaxIOU < T h r e s h 1_{\text {MaxIOU}<T h r e s h} 1MaxIOU<Thresh意思是预测边框中,与真实对象边框IOU最大的那个,其IOU<阈值Thresh,此系数
为1,即计入误差,否则为0,不计入误差。YOLO2使用Thresh=0.6。
1 t < 128000 1_{t<128000} 1t<128000 意思是前128000次迭代计入误差。注意这里是与先验框的误差,而不是与真实对象边框 的误差。可能是为了在训练早期使模型更快学会先预测先验框的位置。
1 k t r u t h 1_{k}^{t r u t h} 1ktruth 意思是该边框负责预测一个真实对象(边框内有对象)。
各种 λ \lambda λ 是不同类型误差的调节系数。
感觉和yolo v1中差不多

Stronger

利用Wordtree识别对象更多,YOLO9000

四、实验结果

五、结论与思考

作者结论

总结

思考

参考

<机器爱学习>YOLOv2 / YOLO9000 深入理解
YOLOv2目标检测详解
YOLO2原理理解

这篇关于论文笔记:YOLO9000: Better, Faster, Stronger(yolo v2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/198113

相关文章

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓