YOLO_v2讲解

article/2025/8/23 13:25:31

文章目录

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

一:YOLO_v2的改进

在这里插入图片描述
YOLO V2是YOLO系列的第二版,在YOLO V1的基础上加以改进,改善了YOLO V1定位不准的问题,以及对于重叠的物体极差的检测能力。同时,又保证了检测的速度,可谓集准确性与速度于一身(YOLO V2获得了CVPR2017的最佳论文提名)。YOLO V2的原文提出了两个模型:YOLO V2和YOLO9000,本文主要着重YOLO V2,想要了解YOLO_v1的友友可以看本人写的YOLO_v1详解,首先列出v2版本的几个改进之处

  • BN层取代了Dropout
  • 使用了高分辨率分类器
  • 使用Anchor思想
  • K-means选定先验框的尺寸
  • 使用YOLO_v1的策略,预测坐标相对于Grid Cell的位置
  • 细粒度的特征
  • 多尺度训练

下面,我将针对上述几个创新点,依次进行讲解。

二:网络细节

【BN层取代了Dropout】

在V1的基础上增加了BN层,位置在Conv层的后面,同时去掉了Dropout,增加BN层后,给YOLO 的mAP带来了2%的提升,也说明了BN的重要作用。本人在BN的理解中对BN层进行了详细讲解,在这里不再赘述。
在这里插入图片描述
在这里插入图片描述

【高分辨率分类器】

在训练物体检测任务时,会使用ImageNet上预训练的模型作为特征提取器,而其训练时,输入图像分辨率通常在224x224左右,而训练物体检测任务时,需要分辨率更大的图像(因为图像越大,越清晰,越容易检测上面的物体),这样就会造成两者在输入图像分辨率上的不一致;比如YOLO V1,在224x224大小的输入图像上训练检测模型,然后将图像分辨率提升至448x448,在检测数据集上Finetune。可以理解为检测顺应了分类的低分辨,所以必然对检测精度有较大影响

为了更好的适应分辨率的差异,YOLO V2选择先在ImageNet上Finetune高分辨率(448x448)的模型(10 epochs),然后再训练检测模型,可以理解为分类迎合了检测需要的高分辨率输入,这样就“弱化”了分类模型和检测模型在输入图像分辨率上的“不一致”使用高分辨率分类模型,给YOLO带来了4%的mAP提升。同时YOLO V2提出了新的网络结构DarkNet-19,顾名思义就是指19层卷积,具体的结构如下图所示:
在这里插入图片描述
DarkNet-19在ImageNet上Top1的准确率为72.9%,发现里面有很多1x1的Conv在Channel维度上压缩特征图。同时,总共进行了5次下采样,目的是扩大最终的feature map的大小,最终映射到原图上的cell更多。v1中是进行了6次下采样的,最后只有7×7,而v2可以达到13×13(对于输入416×416而言)。还有一点!!!DarkNet-19中没有FC层,都是卷积层!!这样也为后期的多尺度训练做了准备。

【Anchor思想】

YOLO V1没有Anchor的概念,而且候选框一共98个(7x7x2),所以可想而知,模型的Recall是个问题,所以YOLO V2为了增加Recall(如果连正确的框都没有检查出来,就更不用想着后续的优化了,所以需要增加Recall),使用了Anchor的概念,像Faster RCNN,一个Anchor会产生9个候选框,这样在YOLO V1的情况下,原本的98个框就变成了441(7x7x9)。

同时为了进一步增加候选框的数目,YOLO V2中最后用来预测的特征图尺寸是原图的1/32(YOLO V1是1/64),由于448 / 32 = 14,这样一来图像中心点是4个点(图7方便理解),这样就会导致在图像中心的物体的中心点落在4个Grid Cell中,不方便分配,所以作者把输入图像的尺寸改成了416(416/32=13),中心点只有一个。增加了Anchor的概念后,mAP由原来的69.5%降低到了69.2%,但是Recall从81%增加到88%,这也为后续的优化提供了可能性
在这里插入图片描述
举例说明为何选择13x13而不是14x14

【K-means选定先验框】

像Faster RCNN,Anchor产生的9个候选框是“人为”选择的(“瞎编”出来的),YOLO V2为了选择更合理的候选框,使用了聚类(K-means)的策略,选出最具有代表性的5个尺寸作为Anchor候选框的尺寸

K-means是聚类的方法,最后得到K个聚类中心以及每个样本属于哪个中心,其中K是聚类的个数,需要人为指定,其中使用“距离”来衡量每个样本与聚类中心的关系,通常使用欧式距离,但是对YOLO V2来说,需要选取框的尺寸,衡量的标准应该是“覆盖率”,所以YOLO V2利用IOU来计算,所以距离公式如下:

d(box, centroid) = 1 – IOU(box, centroid)(经过实验证明,K=5刚刚好,再大精度可能退化。)
在这里插入图片描述

同时YOLO V2虽然使用了Anchor的思想,而预测框的坐标时依然使用YOLO V1的策略,直接预测坐标相对于Grid Cell的位置,而不是Anchor Box与Ground Truth之间的Offset。下面会详细说明。

【预测坐标相对于Grid Cell的位置】

跟Faster RCNN相同的地方,YOLO V2使用了Anchor的概念,其中在处理W和H的部分基本一致,我们设置Anchor框的Wa和Ha,Ground Truth为W和H,那么最后回归的目标为:
在这里插入图片描述

这样避免了YOLO V1中直接回归W和H的尴尬。

与Faster RCNN不同的是,YOLO V2回归的目标没有选择Offset,而是选择YOLO V1的策略,我们这里回忆一下Faster RCNN是如何做的,我们设置Anchor的坐标Xa和Ya,Ground Truth的坐标为X和Y:

在这里插入图片描述

YOLO V2指出这种做法是存在风险的,什么风险呢,假设我们最后的预测结果为tx, ty, tw, th,那么最后预测的框的坐标为:

在这里插入图片描述

从上述公式发现,如果tx=1,那么最后的结果相对于Anchor向右偏移了1倍(同理,tx=-1,则是向左偏移了1倍),说明这种回归目标对取值范围“约束”很弱,这样最后得到的框会出现在图的任何位置,训练就很难稳定下来为了解决这个问题,YOLO V2沿用了V1的策略,直接预测坐标相对于Grid Cell的位置,计算公式如下:

在这里插入图片描述
其中x,y为物体的中心点坐标,分成SxS个Grid Cell,针对YOLO V2,S=13,width和height为原图的宽和高。

同时也说明了YOLO V2分配训练样本的策略与V1相同,物体的中心点落在哪个Grid Cell中,其对应的Anchor候选框负责这个物体。

【细粒度的特征】

其实就是为了增强网络对于小物体检测的能力,但提升效果不明显,这一缺点在v3版本中有巨大改进。

实际上有两种实现策略,原版和改进版。

原版:首先需要两个特征图26x26x512和13x13x1024,分成两步,1)26x26x512的特征图重组成13x13x2048的特征图;2)将13x13x2048的特征图与13x13x1024的特征图Concatenate,得到13x13x3072的特征图。

这里有个细节,“重组”是如何做的?我这里简单的用下图描述一下:
在这里插入图片描述
上图简单的描述了重组的过程,一个2x2x1的特征图变成了1x1x4的特征图,这个过程不涉及任何参数变量,所以重组后的特征图很好的保存了原特征图的信息。

改进版:改进版在原版的基础上增加了一次卷积操作,先将26x26x512的特征图变为26x26x64的特征图,然后再执行后续的操作。原版和改进版的对比图如下:
在这里插入图片描述

【多尺度训练】

为了适应不同尺寸的输入图片,YOLO V2采用了多尺度训练的策略,尺度的选择:从320到608,{320,352,…,608},每隔32选取一个尺度(其中320/32=10,与上文奇数尺寸相违背了,有些尴尬)。训练的时候,系统每隔10个batch,随机从这些候选尺度中选择一个进行训练。“多尺度”在目前的物体检测训练中,已经属于常见的操作了。、

三:损失函数

最后聊聊YOLO V2的损失函数,YOLO V2的整篇文章并没有给出损失函数的公式。YOLO V2的损失函数依然以“回归”为主,里面没有Cross Entropy Loss,全部都是L2-Loss,整体的感觉和YOLO V1很像,见下面的公式:
在这里插入图片描述

我们来一点点解释,首先W、H分别指的是特征图(13×13)的宽与高,而A指的是先验框数目(这里是5),各个 λ λ λ 是各个Loss部分的权重系数。

第一项loss是计算background的置信度误差,但是哪些预测框来预测背景呢,需要先计算各个预测框和所有ground truth的IOU值,并且取最大值Max_IOU,如果该值小于一定的阈值(YOLOv2使用的是0.6),那么这个预测框就标记为background,需要计算noobj的置信度误差。(不能是落有物体中心点的cell中的代表框,若它小于0.6也没办法,还是得代表某个类)

第二项是计算先验框与预测框的坐标误差,但是只在前12800个iterations间计算,我觉得这项应该是在训练前期使预测框快速学习到先验框的形状。

第三大项计算与某个ground truth匹配的预测框各部分loss值,包括坐标误差、置信度误差以及分类误差。先说一下匹配原则,对于某个ground truth,首先要确定其中心点要落在哪个cell上,然后计算这个cell的5个先验框与ground truth的IOU值(YOLOv2中bias_match=1),计算IOU值时不考虑坐标,只考虑形状,所以先将先验框与ground truth的中心点都偏移到同一位置(原点),然后计算出对应的IOU值,IOU值最大的那个先验框与ground truth匹配,对应的预测框用来预测这个ground truth

在计算obj置信度时,在YOLOv1中target=1,而YOLOv2增加了一个控制参数rescore,当其为1时,target取预测框与ground truth的真实IOU值。**对于那些没有与ground truth匹配的先验框(与预测框对应),除去那些Max_IOU低于阈值的,其它的就全部忽略,不计算任何误差。**这点在YOLOv3论文中也有相关说明:YOLO中一个ground truth只会与一个先验框匹配(IOU值最好的),对于那些IOU值超过一定阈值的先验框,其预测结果就忽略了。这和SSD与RPN网络的处理方式有很大不同,因为它们可以将一个ground truth分配给多个先验框。

尽管YOLOv2和YOLOv1计算loss处理上有不同,但都是采用均方差来计算loss。另外需要注意的一点是,在计算boxes的和误差时,YOLOv1中采用的是平方根以降低boxes的大小对误差的影响,而YOLOv2是直接计算,但是根据ground truth的大小对权重系数进行修正:l.coord_scale * (2 - truth.w*truth.h),这样对于尺度较小的boxes其权重系数会更大一些,起到和YOLOv1计算平方根相似的效果(参考YOLO v2 损失函数源码分析)。

四:YOLO_v2的不足

  • 对于小目标的检测效果还是不理想
  • 5个anchors虽然增大了recall,但是准确度却下降不少,可见策略还是可以改进
  • backbone所用的Darknet-19虽然相对于YOLO_v1的有改进,但是还是不太OK

  至此我对YOLO_v2的原理,进行了简单讲解,希望对大家有所帮助,有不懂的地方或者建议,欢迎大家在下方留言评论。

我是努力在CV泥潭中摸爬滚打的江南咸鱼,我们一起努力,不留遗憾!


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

相关文章

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是在可变长度的文本上训练的,因…

doc2vec原理

doc2vec和word2vec类似,Doc2vec也有两种训练方式,分别是Distributed Memory(DM) 和 Distributed Bag of Words(DBOW)。 DM 试图在给定上下文和段落向量的情况下预测单词的概率,与word2vec中CBOW类似,在一个句子或者文档的训练过程…

Doc2vec论文阅读及源码理解

《Distributed representationss of Sentences and Documents》 Quoc Le and Tomas Mikolov, 2014 文章目录 《Distributed representationss of Sentences and Documents》1. Distributed Memory Model of Paragraph Vectors (PV-DM).1.1 模型架构图1.2 相关代码阅读 2. Dist…

doc2vec介绍和实践

简介 与其他方法的比较 bag of words (BOW):不会考虑词语出现的先后顺序。 Latent Dirichlet Allocation (LDA):更偏向于从文中提取关键词和核心思想extracting topics/keywords out of texts,但是非常难调参数并且难以评价模型的好坏。 …

doc2vec java_word2vec和doc2vec

word2vec基本思想 通过训练每个词映射成k维实数向量(k一般为模型中的超参数),通过词之间的距离来判断语义相似度。 word2vec采用一个三层的神经网络。 训练的时候按照词频将每个词语Huffman编码,词频越高的词语对应的编码越短。这三层的神经网络本身是对…