【目标检测】YOLOV2详解

article/2025/8/23 13:24:17

前言

前面我们已经讲解过了YOLOV1,因此在这里我会接着前几天的讲解,进一步写一下YOLOV2的基本思想和改进。

YOLOv2的论文全名为YOLO9000: Better, Faster, Stronger,它斩获了CVPR 2017 Best Paper Honorable Mention。在这篇文章中,作者首先在YOLOv1的基础上提出了改进的YOLOv2,然后提出了一种检测与分类联合训练方法,使用这种联合训练方法在COCO检测数据集和ImageNet分类数据集上训练出了YOLO9000模型,其可以检测超过9000多类物体。所以,这篇文章其实包含两个模型:YOLOv2和YOLO9000,不过后者是在前者基础上提出的,两者模型主体结构是一致的。YOLOv2相比YOLOv1做了很多方面的改进,这也使得YOLOv2的mAP有显著的提升,并且YOLOv2的速度依然很快,保持着自己作为one-stage方法的优势,YOLOv2和Faster R-CNN, SSD等模型的对比如下图所示。下面将首先介绍YOLOv2针对YOLOv1改进策略。

在这里插入图片描述

 1、改进步骤

YOLOV2 相对于YOLOV1 的改进主要可以分为以下三点:

1、网络结构的改进

2、Anchor的设计

3、训练策略的改进

接下来我就从这三点进行展开阐述。

1. 网络结构的改进

 在每个卷积层和激活函数层之间加入了BN层。Batch Normalization有助于解决反向传播过程中的梯度消失和梯度爆炸问题,降低对一些超参数(比如学习率、网络参数的大小范围、激活函数的选择)的敏感性,可以提升模型收敛速度,而且可以起到一定正则化效果,降低模型的过拟合。在YOLOv2中,每个卷积层后面都添加了Batch Normalization层,并且不再使用droput,关于这一点改进也是现在很多模型用的一点。使用Batch Normalization后。YOLOv2的mAP提升了2.4%。

 加入BN层之后,为了能够更好地对小目标的物体进行检测,YOLOV2 还提出了一个passthrough层来检测细粒度特征。与SSD使用多尺度特征图不同,passthrough层与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。具体来说,将倒数第二次下采样之前的特征图(26×26×512)抽取成为2 × 2 的局部区域并将其在channel维度上面进行拼接。对于26×26×512的特征图,经passthrough层处理之后就变成了13×13×2048的新特征图(特征图大小降低4倍,而channles增加4倍,这样就可以与后面的13×13×1024特征图连接在一起形成13×13×3072的特征图,然后在此特征图基础上卷积做预测。具体实现方式如下图所示。(注意此处的连接使用的是concatenate连接方式,即通道拼接)。

在这里插入图片描述

在这里插入图片描述

 至于为什么 passthrough 好用吗,具体来说浅层特征图包含的更多是位置。细节信息,在检测上面可以更好地用于检测框的回归。而更深层次的特征图包含的就是语义信息,分类需要的是语义信息,而检测更多的是需要物体的物理信息。因此融合浅层特征可以提升检测的效果。

2. Anchor的设计

YOLOV2关于Anchor的部分还是有很大改变的。首先体现在 在YOLOv1中,输入图片最终被划分为7×7网格,每个单元格预测2个边界框。YOLOv1中包含全连接层,从而能直接预测bounding boxes的坐标值,其中边界框的宽与高是相对整张图片大小的。由于各个图片中存在不同尺度和长宽比的物体,YOLOv1在训练过程中学习适应不同物体的形状是比较困难的,这也导致YOLOv1在精确定位方面表现较差。作者发现通过预测偏移量而不是坐标值能够简化问题,让网络学习起来更容易。

借鉴Faster R-CNN的做法,YOLOv2移除了YOLOv1中的全连接层而采用了卷积核anchor boxes来预测边界框。通过在每个cell预先设定一组不同大小和宽高比的边框,来覆盖整个图像的不同位置和多种尺度。同时为了使检测实用的特征图分辨率更高,去掉了网络中的一个pooling层。并且网络输入图像尺寸变为416×416,而不是原来的448×448。YOLO的卷积层采用32这个值来下采样图像,所以网络输入为416×416,输出为13×13的feature map。使用Anchor Box会让精确度稍微下降,但用了它能使YOLO能预测出13×13×9=1521个框。因此相对于YOLOv1 81%的召回率, YOLOv2的召回率大幅度提升到88%。

在Faster R-CNN和SSD中,先验框的维度(长和宽)都是手动设定的,带有一定的主观性。如果选取的先验框维度比较合适,那么模型更容易学习,从而做出更好的预测。因此,YOLOv2采用k-means聚类方法对训练集中的边界框做了聚类分析,以寻找尽可能匹配样本的边框尺寸。
       聚类算法最重要的是选择如何计算两个边框之间的“距离”,对于常用的欧式距离,大边框会产生更大的误差。而且设置先验框的主要目的是为了使得预测框与ground truth的IOU更好,所以聚类分析时选用box与聚类中心box之间的IOU值作为距离指标:

centroid是聚类时被选作中心的边框,box就是其它边框,d就是两者间的“距离”。IOU越大,“距离”越近。YOLO2给出的聚类分析结果如下图所示:

在这里插入图片描述

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

在这里插入图片描述

 所以综合以上三点,在YOLOV2的输出为7*7*(5*5+s),其中s是分类的数量。

3、训练策略的改进

 图像分类的训练样本很多,而标注了边框的用于训练对象检测的样本相比而言就比较少了,因为标注边框的人工成本比较高。所以对象检测模型通常都先用图像分类样本训练卷积层,提取图像特征。但这引出的另一个问题是,图像分类样本的分辨率不是很高。所以YOLO v1使用ImageNet的图像分类样本采用 224*224 作为输入,来训练CNN卷积层。然后在训练对象检测时,检测用的图像样本采用更高分辨率的 448×448 的图像作为输入。但这样切换对模型性能有一定影响。所以YOLO2在采用 224×224 图像进行分类模型预训练后,再采用 448×448 的高分辨率样本对分类模型进行微调(10个epoch),使网络特征逐渐适应 448×448 的分辨率。然后再使用 448×448 的检测样本进行训练,缓解了分辨率突然切换造成的影响。

由于YOLOv2模型中只有卷积层和池化层,所以YOLOv2的输入可以不限于416×416大小的图片。为了增强模型的鲁棒性,YOLOv2采用了多尺度输入训练策略,具体来说就是在训练过程中每间隔一定的iterations之后改变模型的输入图片大小。由于YOLOv2的下采样总步长为32,输入图片大小选择一系列为32倍数的值:{320,352,…,608},输入图片最小为320×320,此时对应的特征图大小为10×10,而输入图片最大为608*608,对应的特征图大小为19×19。在训练过程,每隔10个iterations随机选择一种输入图片大小,然后只需要修改对最后检测层的处理就可以重新训练。 这样训练出来的模型可以预测多个尺度的物体。并且,输入图片的尺度越大则精度越高,尺度越小则速度越快,因此YOLOv2多尺度训练出的模型可以适应多种不同场景的要求。

在这里插入图片描述

采用Multi-Scale Training策略,YOLOv2可以适应不同大小的图片,并且预测出很好的结果。在测试时,YOLOv2可以采用不同大小的图片作为输入,在VOC 2007数据集上的效果如下图所示。可以看到采用较小分辨率时,YOLOv2的mAP值略低,但是速度更快,而采用高分辨输入时,mAP值更高,但是速度略有下降,对于544*544,mAP高达78.6%。注意,这只是测试时输入图片大小不同,而实际上用的是同一个模型(采用Multi-Scale Training训练)。

在这里插入图片描述

 2、网络架构

这里的东西前面基本都讲过了,需要说的一点就是由于YOLOv2在每一个区域预5个边框,每个边框有25个预测值,因此最后输出的特征图通道数为125。其中,一个边框的25个预测值分别是20个类别预测,4个位置预测及1个置信度预测值。这里和v1有很大区别,v1是一个区域内的边框共享类别预测,而这里则是相互独立的类别预测值(即解决YOLOv1中每个cell只能预测一个物体的缺点)。

在这里插入图片描述

 至于正负样本以及损失函数,和YOLOV1一样,并没有做出改变。

3、总结

 总结来看,虽然YOLOv2做了很多改进,但是大部分都是借鉴其它论文的一些技巧,如Faster R-CNN的anchor boxes,YOLOv2采用anchor boxes和卷积做预测,这基本上与SSD模型(单尺度特征图的SSD)非常类似了,而且SSD也是借鉴了Faster R-CNN的RPN网络。从某种意义上来说,YOLOv2和SSD这两个one-stage模型与RPN网络本质上无异,只不过RPN不做类别的预测,只是简单地区分物体与背景。在two-stage方法中,RPN起到的作用是给出region proposals,其实就是作出粗糙的检测,所以另外增加了一个stage,即采用R-CNN网络来进一步提升检测的准确度(包括给出类别预测)。而对于one-stage方法,它们想要一步到位,直接采用“RPN”网络作出精确的预测,要因此要在网络设计上做很多的tricks。YOLOv2的一大创新是采用Multi-Scale Training策略,这样同一个模型其实就可以适应多种大小的图片了。
       YOLOv2相较于之前的版本有了质的飞跃,主要体现在吸收了其他算法的优点,使用了先验框、特征融合等方法,同时利用了多种训练技巧,使得模型在保持极快速度的同时大幅度提升了检测的精度。YOLOv2已经达到了较高的检测水平,但如果要分析其不足的话,大体有一下3点:
● 单层特征图:虽然采用了Passthought层来融合浅层特征,增强多尺度检测性能,但仅仅采用一层特征图做预测,细粒度仍然不够,对小物体等检测提升有限,并且没有使用残差这种较为简单、有效的结构。
● 受限于其整体网络架构,仍然没有很好地解决小物体的预测问题。

参考:【目标检测】单阶段算法--YOLOv2详解


http://chatgpt.dhexx.cn/article/vNY3wv2a.shtml

相关文章

YOLOv2目标检测算法——通俗易懂的解析

目录 YOLOv2目标检测算法前沿一.YOLOv2的改进1.1.BN1.2.High Resolution Classifier1.3.anchor1.4.Fine-Grained Features(细粒度特征)1.5.Multi-Scale Training 二.损失函数三.检测更多类别 YOLOv2目标检测算法 前沿 前面我们讲过了YOLOv1目标检测算法,不了解的小…

YOLOP v2

还是先道歉啊 就是自学求知 又一个自称更好的!! 网上找到的就发了 不知道 大伙用的怎么样啊 更好、更快、更强 ... YOLOv7结合YOLOP的多任务版本 论文链接:https://arxiv.org/pdf/2208.11434v1.pdf 代码链接:https://github.com/CAIC-AD/YOLOPv2 在…

YOLO系列(V1-V2-V3)

yolo系列整理 版本作者主页程序论文yoloV1点击打开点击打开点击打开yoloV2点击打开点击打开点击打开yoloV3点击打开点击打开点击打开 改进 V2 VS V1: 增加BN层: 解决问题:每层的输入分布一直在改变,训练难度增加;采取措施&am…

YOLO_v2讲解

文章目录 一:YOLO_v2的改进二:网络细节【BN层取代了Dropout】【高分辨率分类器】【Anchor思想】【K-means选定先验框】【预测坐标相对于Grid Cell的位置】【细粒度的特征】【多尺度训练】 三:损失函数四:YOLO_v2的不足 一&#xf…

YOLOV2原理理解

YOLOV2 一、YOLOV1的不足之处二、YOLOV2的改进论文精读AbstractIntroductionBetter(重点笔记)FasterStronger(非重点) 三、YOLOV2网络的输出输出结果解释输出图示 四、YOLOV2的LOSS函数五、Kmeans聚类——anchor box六、YOLOV2算法总结七、关于YOLOV2中a…

【目标检测】单阶段算法--YOLOv2详解

论文题目:《YOLO9000: Better, Faster, Stronger》 论文地址:https://arxiv.org/pdf/1612.08242.pdf 一文读懂YOLOv1:YOLOv1 一文读懂YOLOv3:YOLOv3 一文读懂YOLOv4:YOLOv4 1. 前言 在前面的一篇文章中,我…

yolov2详细讲解

yolov2详细讲解 概述 YOLO v1虽然检测速度快,但在定位方面不够准确,并且召回率较低。为了提升定位准确度,改善召回率,yolov2在yolov1的基础上提出了几种改进策略,如下图所示,一些改进方法能有效提高模型的…

YOLO V2解析

YOLO V2是YOLO系列的第二版,在YOLO V1的基础上加以改进,改善了YOLO V1定位不准的问题,又保证了检测的速度,可谓集准确性与速度于一身(YOLO V2获得了CVPR2017的最佳论文提名)。YOLO V2的原文提出了两个模型:YOLO V2和YOLO9000,本文主要着重YOLO V2,下面让我们一同走进Y…

YOLOV2详解

yolov2 YOLOv2论文中英文对照翻译_IT修炼家的博客-CSDN博客 YOLOv2 论文笔记Jesse_Mx的博客-CSDN博客yolov2论文 精读目标检测5——yolo2详解及其预测代码复现cv君的博客-CSDN博客yolo2 目标检测|YOLOv2原理与实现(附YOLOv3) - 知乎 (zhihu.com) YOLO v2 - ZhicongHou - 博客园…

YOLO 超详细入门02 v2 (含代码及原文)

文章目录 前言背景总结一、YOLOv2改进之框架1.1 网络架构1.2 Batch Normalization 二、YOLOv2改进方法之尺寸相关2.1 High Resolution Classifier(高分辨率的分类器)原因步骤 2.2 Fine-Grained Features(细粒度特征)原因步骤 2.3 …

深度学习目标检测_YOLOV2超详细解读

文章目录 YOLO v2概述Batch Normalization(批归一化)High Resolution Classifier(高分辨率预训练分类网络)New Network:Darknet-19神经网络中的filter (滤波器)与kernel(内核&#x…

【YOLO系列】YOLOv2论文超详细解读(翻译 +学习笔记)

前言 时隔一年,YOLOv2隆重登场,新的YOLO版本论文叫《YOLO9000: Better, Faster, Stronger》,作者 Joseph Redmon 和 Ali Farhadi 在 YOLOv1 的基础上,进行了大量改进,提出了 YOLOv2 和 YOLO9000,重点解决Y…

训练Doc2Vec

将文本数据表示成list of list的形式: 对每一条文本进行分词操作,可能的话,去除停用词,加上自定义词等: 将分词后的文本转换为gensim所需要的形式: 训练Doc2Vec,其中参数dm1表示DM模型&#…

Doc2vec计算文本相似度

1.Doc2vec模型介绍 Doc2Vec模型基于Word2vec模型,并在其基础上增加了一个段落向量。 以Doc2Vec的C-BOW方法为例。算法的主要思想在以下两个方面: 训练过程中新增了paragraph id,即训练语料中每个句子都有一个唯一的id。paragraph id和普通的…

Doc2vec 简介及应用

Doc2vec是基于Word2Vec方法,有两种训练方法,为Distributed Memory (DM) 和Distributed Bag of Words (DBOW); Distributed Memory version of Paragraph Vector (PV-DM)方法与CBOW方法类似,Bag of Words version of Paragraph Vec…

doc2vec java_Doc2Vec,Word2Vec文本相似度 初体验。

https://radimrehurek.com/gensim/models/word2vec.html 接上篇 : import jieba all_list jieba.cut(xl[‘工作内容‘][0:6],cut_allTrue) print(all_list) every_one xl[‘工作内容‘].apply(lambda x:jieba.cut(x)) import traceback def filtered_punctuations…

文本多分类之Doc2Vec实战篇

在我之前的几篇博客中,我介绍了两种文档向量化的表示方法,如Sklearn的CountVectorizer和TfidfTransformer,今天我们再来学习另外一种文档的向量化表示方法-Doc2Vec。如果你还不太了解Doc2Vec的话,我提供一些资料以便你可以对它有深入的了解: …

【NLP】 Word2Vec模型 Doc2Vec模型

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

基于gensim的doc2vec实践

1.“句向量”简介 word2vec提供了高质量的词向量,并在一些任务中表现良好。 关于word2vec的原理可以参考这几篇论文: https://arxiv.org/pdf/1310.4546.pdfhttps://arxiv.org/pdf/1301.3781.pdf 关于如何使用第三方库gensim训练word2vec可以参考这篇…

Word2vec And Doc2vec - 文本向量化

word2vec 与 doc2vec的区别: 两者从字面意思上就可以大致判断出区别来,word2vec主要针对与单词,而doc2vec主要针对于文本: 顾名思义,Word2Vec是在单个单词上训练的,而Doc2vec是在可变长度的文本上训练的,因…