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

article/2025/8/23 16:14:45

文章目录

  • 前言
  • 背景
  • 总结
  • 一、YOLOv2改进之框架
    • 1.1 网络架构
    • 1.2 Batch Normalization
  • 二、YOLOv2改进方法之尺寸相关
    • 2.1 High Resolution Classifier(高分辨率的分类器)
      • 原因
      • 步骤
    • 2.2 Fine-Grained Features(细粒度特征)
      • 原因
      • 步骤
    • 2.3 Multi-Scale-Training(多尺度训练)
      • 原因
      • 训练细节
  • 三、YOLOv2改进方法之Anchor Box
    • 3.1 Convolutional With Anchor Boxes(带anchor的卷积)
      • 原因
      • 想法
      • 为什么采用416 x 416大小的输入代替原来的448 x 448?
    • 3.2 Dimension Clusters(维度聚类)
      • 目的
      • 公式
      • 思路
      • 效果
    • 3.3 Direct location prediction(直接位置预测)
  • 四、YOLOv1 vs YOLOv2 输出
  • 五、YOLO9000
    • 5.1 策略和方式
    • 5.2 Loss
    • 5.3 Word Tree
      • 原因
      • 思想
      • 输出及效果

前言

代码地址:Github:ultralytics/yolov3

  • 【建议先读】《YOLO 超详细入门(含开源代码)——网络结构、细节、目标损失函数、优点》

笔者在阅读《YOLO9000:Better, Faster, Stronger》原文后,根据自身理解及查阅资料,以入门角度尽可能想要还原论文细节,水平有限,欢迎交流。

背景

  • SSD 是 YOLOv1的强大竞争对手,它在当时展示了更高的实时处理精度。与基于区域的检测器相比,YOLO 的坐标定位误差更高,recall(召回率:衡量定位所有目标物体的好坏程度)更低。YOLOv2 是YOLO的第二个版本,其目标是显着提高准确性,同时使其更快。
  • YOLOv2 在 YOLOv1的基础上做了许多改进,其中在 VOC2007 资料集上的mAP 由 63.4% 提升到 78.6%,并且保持检测速度。从预测更准确(Better),速度更快(Faster),识别物体更多(Stronger)这三个方面进行了改进。其中识别更多目标物体也就是扩展到能够检测9000种不同物体,称之为YOLO9000。

总结

  1. Better:准确度提升。 主要手段有:
    • Batch Normalization(批归一化)1.2
    • High Resolution Classifier(高分辨率的分类器)2.1
    • Fine-Grained Features(细粒度特征)2.2
    • Multi-Scale-Training(多尺度训练)2.3
    • Anchor Box(锚盒)3.1
    • Dimension Cluster(维度聚类)3.2
    • Direct location prediction(直接位置预测)3.3
  2. Faster:速度提升。 主要手段:GoogleNet+DarkNet 1.1
  3. Stronger:识别种类提升。 主要手段:YOLO9000 5

一、YOLOv2改进之框架

1.1 网络架构

在这里插入图片描述
在这里插入图片描述
YOLOv2 采用Darknet-19 作为特征提取网络,包括19个卷积层, 5个 maxpooling 层。

  • 原型设计与 VGG16 一致,主要采用3x3卷积, 2x2 maxpooling层 (feature map维度降低两倍, channles增加两倍)。

  • 与NIN (Network in Network) 类似,Darknet-19最终采用global avgpooling做预测。
    在这里插入图片描述

  • 在3x3卷积层之间使用1x1卷积层来压缩 feature map channles 以降低模型计算量和参数 (parameters)。

  • 每个卷积层后面同样使用了 batch normalization 层以加快收敛速度,降低模型over-fitting。

1.2 Batch Normalization

在这里插入图片描述

原理等可参考:《Batch Normalization(BN)超易懂!图文详解——目的,原理,本质,有效性,副作用》

在每层卷积层的后面都加入 batch normalization 层,不再使用dropout,使得模型在 mAP 上提升了2.4%。

二、YOLOv2改进方法之尺寸相关

2.1 High Resolution Classifier(高分辨率的分类器)

原因

因为大部分的检测模型是使用 ImageNet 分类数据集上pre-train的模型,YOLOv1 采用 224x224 的图片分类器,但因为分辨率比较低,不利于检测模型。因此YOLO2 提高分辨率至 448x448 并在test数据集上进行 fine-tuning(微调)

步骤

如果直接切换图片尺寸即分辨率大小,模型可能难以快速地对高分辨率的图片进行反应。因此,YOLO 训练由 2 个阶段组成。我们训练一个像 VGG16 这样的分类器网络。然后我们用卷积层替换全连接层,并对其进行端到端的重新训练以进行目标检测。
Pre-training步骤如下:

  • 先采用 224x224 的 ImageNet 图像数据集进行约160个 epoch的训练,然后再将输入图像的尺寸更改为 448x448 再训练10个 epoch。训练完的这个 pre-train model也就可以适用高分辨率的图像输入了。
  • 最后再拿这个model 在test数据集上 fine-tuning。

最终使得mAP提升了3.7%。

2.2 Fine-Grained Features(细粒度特征)

在这里插入图片描述

原因

我们知道,卷积层会逐渐减小空间维度。随着相应分辨率的降低,也就更难检测到小物体
YOLOv2 图片输入大小为 416 x 416,经过5次 maxpooling 后得到13x13 的feature map,并以此 feature map 采用卷积做预测,如此已经可以达到检测大物体的作用。但如果需要检测小物体,则还需要更精细的 feature map,因此 YOLOv2 提出了一种 passthrough 层以利用更精细的 feature map。
在这里插入图片描述

步骤

它将 26 × 26 × 512 层使用按行列隔行采样的方法,抽取 2x2 的局部区域,然后将其转化为 channel 维度,便可以巧妙地reshape为 13 × 13 × 2048。然后与原始的 13 × 13 ×1024 输出层连接。现在我们在新的 13 × 13 × 3072 层上应用卷积滤波器来进行预测,相当于做了一次特征融合,有利于检测小的目标

2.3 Multi-Scale-Training(多尺度训练)

原因

由于模型仅使用卷积层和池化层,因此可以随时调整输入的大小。为了使 YOLOv2 在不同大小的图像上运行时具有鲁棒性,作者针对不同的输入大小训练了模型,就是在训练的过程中每间隔一定的 iterations 后改变输入的图片大小

训练细节

在这里插入图片描述
YOLOv2 下采样步长为32,因此输入图片大小要选择32的倍数 (最小尺寸为320x320, 最大尺寸为608x608)。在训练过程,每隔10个 iterations 随机选择一种输入图片大小,然后只需要修改对最后检测层的处理就可以重新训练。这起到了数据增强的作用,并迫使网络对不同的输入图像尺寸和比例进行良好的预测。
在这里插入图片描述
采用 Multi-Scale Training 策略使 YOLOv2 模型可以更好的预测不同大小的图片,由上图 VOC 2007 数据集上的结果可以看到: 采用较低分辨率的图片mAP 值略低,但速度更快。采用较高解析度的图片mAP 值较高,但速度较慢。对于 554X554 的图片 mAP 高达78.6%!

三、YOLOv2改进方法之Anchor Box

3.1 Convolutional With Anchor Boxes(带anchor的卷积)

ps:原文中anchor也被称为prior box以表示对目标检测的最佳anchor的选择。

原因

YOLOv1在训练过程中学习适应不同物体的形状比较困难,导致其在精度定位方面表现不佳。其早期训练容易受到不稳定梯度的影响。首先,YOLO对bounding box进行随机预测。这些随机的预测可能对部分目标的检测有效果,但对另一些目标识别却很糟糕,从而导致陡然的梯度变化。在早期的训练中,预测会在专门研究什么形状上去探索,尝试,甚至竞争。
在这里插入图片描述
例如上图,早期训练中,对人和车预测的bounding box形状可能都是竖着的。对人也许应该这样预测,因为行人的横纵比为0.41,但汽车显然需要更扁的bounding box来预测。
在这里插入图片描述
因为我们只需要一个猜测是正确,只要有一个猜测能找到物体就行,因此如果从生活中常见的猜测开始,那么初始训练就会更加地稳定。(比如预测一个横的,一个纵的)

想法

在这里插入图片描述

  • 一般而言,我们可以创建5个具有上面形状的anchors。
  • 借鉴 Faster R-CNN 的方法: 用卷积层与RPN( Region Proposal Network )来预测Anchor Box 的偏移值与置信度,作者发现通过预测偏移量而不是 bounding box坐标值能够简化问题,让神经网络学习起来更容易,因此 YOLOv2 也尝试使用不同形状的矩形来作为锚框 (Anchor Box)。
  • YOLOv2首先移除掉 YOLOv1 网路的全连接层 (FC层),改用 Anchor Box 来预测bounding box。跟 YOLOv1 不一样的是 Anchor Box 不是直接预测 bounding box 的坐标值,而是预测 Anchor Box的 offset (坐标的偏移值) 与 confidence scores (置信度)。如果我们限制偏移值,我们可以保持预测的多样性并使每个预测都集中在一个特定的形状上。所以初期训练会比较稳定。

为什么采用416 x 416大小的输入代替原来的448 x 448?

在这里插入图片描述

奇数可以使grid只有唯一Center cell
  • 为了使最后的卷积层可以有更高分辨率的特征YOLOv2 将其中一个Pooling层去掉,并且用 416x416 大小的输入代替原来的 448x448,目的是为了使网路输出的特征图 (feature map) 有奇数大小的宽和高,进而使每个特征图在划分网格 grid) 的时候只有一个中心单元格 (Center Cell)
  • 因为物体倾向出现在照片中央,物体中心点往往落入图片中心位置,因此使用这个中心单元格去预测这些物体的边界框相对容易。

3.2 Dimension Clusters(维度聚类)

在这里插入图片描述

目的

**为了识别对训练数据具有最佳覆盖率的 top-K 边界框,我们对训练数据运行 K-means 聚类来定位 top-K 聚类的质心。**在许多问题域中,边界框具有很强的模式。在 Faster R-CNN 和 SSD 中,Anchor Box 的尺寸是手动选择的,有一定的主观性。若能选取合适的 Anchor Box,可以使模型更容易学习并预测出准确的 bounding box。例如,在自动驾驶中,最常见的 2 个边界框则是不同距离的汽车和行人。

公式

聚类目的为提高选取的 Anchor Box 和同一个聚类下的 ground truth 之间的 IoU,采用的距离公式如下:
d ( b o x , c e n t r o i d ) = 1 − I o U ( b o x , c e n t r o i d ) d(box,centroid) = 1-IoU(box,centroid) d(box,centroid)=1IoU(box,centroid) p s : 1. c e n t r o i d 为聚类时被选作中心的 b o u n d i n g b o x ps:1.centroid为聚类时被选作中心的bounding\ box ps1.centroid为聚类时被选作中心的bounding box 2. b o x 为其他的 b o u n d i n g b o x 2.box为其他的bounding\ box 2.box为其他的bounding box

思路

在这里插入图片描述
5个红色框代表VOC 2007数据集集中对象的平均尺寸和位置。
在这里插入图片描述

在训练集边界框上针对各种 k 值运行k-means 聚类,并绘制具有最近质心的平均 IOU,但作者没有使用欧几里德距离,而是使用边界框和质心之间的 IOU,公式如上。
在这里插入图片描述
作者权衡了模型复杂度和高召回率(Recall),选择 k = 5 (也就是选择了5个不同大小的Anchor Box来进行定位预测)作为模型复杂性和高召回率(Recall),如上图。

效果

在这里插入图片描述
作者采用5个不同大小的 Anchor Box (Cluster IOU 5),Avg IOU 是61,比不使用聚类方法的9种 Anchor Box 的 Avg IOU高一些。若选择 Cluster IOU 9,Avg IOU更显著提高。

3.3 Direct location prediction(直接位置预测)

在这里插入图片描述
我们对锚点的offset(偏移量)进行预测。然而,如果它不受约束,我们的预测将再次随机化。因此YOLOv2此次预测 5 个参数( t x 、 t y 、 t w 、 t h t_{x}、t_{y} 、t_{w}、t_{h} txtytwth t o t_{o} to ,并应用 sigmoid( σ \sigma σ) 函数来限制其可能的偏移范围,即 ( 0 , 1 ) (0,1) 01之间。

  • t x 、 t y 、 t w 、 t h t_{x}、t_{y} 、t_{w}、t_{h} txtytwth是预测的bounding box中心点左边和宽高, P r ( 𝑜 𝑏 𝑗 𝑒 𝑐 𝑡 ) ∗ 𝐼 𝑂 𝑈 ( 𝑏 , 𝑜 𝑏 𝑗 𝑒 𝑐 𝑡 ) Pr(𝑜𝑏𝑗𝑒𝑐𝑡)∗𝐼𝑂𝑈(𝑏, 𝑜𝑏𝑗𝑒𝑐𝑡) Pr(object)IOU(b,object) 是预测的bounding box的 confidence score。
  • c x , c y c_{x}, c_{y} cx,cy 是当前网格左上角到图像左上角的距离 (要先将网格大小归一化,即令grid的宽高都为1)。
  • p w , p h p_{w}, p_{h} pw,ph 是 Anchor Box 的宽和高。
    在这里插入图片描述
    上图为可视化效果,蓝色框为预测的bounding box,虚线矩形是Anchor Box。

四、YOLOv1 vs YOLOv2 输出

在这里插入图片描述

  • YOLOv1 在 feature map (7x7) 的每一个 grid中预测出 2个bounding box 及分类概率值,即每个bounding box预测出5个值(4个位置值+1个置信度)。
总输出: 7 x 7 x ( 5 x 2 + 20 )
  • YOLOv2 在 feature map (13x13) 的每一个 grid 中预测出 5个 bounding box (对应5个 Anchor Box,如上一图),每个 bounding box 预测出5个值(4个位置值+1个置信度)及分类概率值(置信度)。
总输出: 13 x 13 x 5 x ( 5 + 20 )

五、YOLO9000

YOLO9000 是在 YOLOv2 的基础上提出的一种可以检测超过9000个类别的模型,其主要贡献点在于提出了一种分类检测联合训练策略

目标检测 label 的成本比分类数据集高很多(物体类别、框出物体在图片中的位置),因此分类数据集比检测数据集的数量多很多。
而边界框的预测又不依赖于类别检测,因此 YOLO 可以在分类和检测数据集上的联合训练。

5.1 策略和方式

在这里插入图片描述

  • 联合训练策略方式: 对于testing data(检测数据集),用来学习预测物体的边界框 (bounding box)、置信度 (confidence) 以及物体(class)分类,而对于分类数据集仅用来学习(class)分类,但这样一来便可以大大扩充模型所能检测的物体种类。

  • 训练方式: 首先在检测数据集上训练一定的epoch,待预测框的 loss 基本稳定后,再联合分类数据集、检测数据集进行交替训练。同时为了分类、检测数据量平衡,作者对 COCO 数据集进行了上采样,使得 COCO、ImageNet 数据总数的比例为 4:1。

5.2 Loss

  • 计算 loss 方式: 若是检测样本,按照 YOLOv2 的 loss 计算误差。若是分类样本,只计算分类误差。

5.3 Word Tree

在这里插入图片描述

结合 COCO 和 ImageNet 建立的 WordTree

原因

联合数据集训练遇到的问题: 类别之间不一定是互斥关系,例如人与女生。所以作者提出了一种层级分类方法 (Hierarchical classification),根据类别之间的从属关系建立一种树结构word Tree。

思想

正如我们所看到的,所有的类都在根(physical object)下。作者在 WordTree 上训练了 Darknet-19 模型。作者从 WordTree 中提取了 1000 类 ImageNet 数据集,并将所有中间节点添加到其中,从而将标签空间从 1000 扩展到 1369,并将其称为WordTree1k。现在,darknet-19 的输出层大小变为 1369 而不是 1000。

在这里插入图片描述
Word Tree 的根节点为 physical object,每个节点的子节点都是属于同一个子类,在进行 softmax 时,不对所有类别进行,而是对同一层级的类别进行操作。如上图,对同一个颜色 (同一层级) 的类别进行 softmax
在这里插入图片描述
在进行预测时,会从根结点向下遍历,每一层级选取机率最高的子节点,并计算该节点至根节点的所有条件机率之积。当该条件机率之积小于某个阈值时停止,以当前节点表示预测的类别。计算公式如下:
在这里插入图片描述

输出及效果

预测输出为confidence: Pr(physical object)、bounding box位置、一个树状机率图。最终,通过联合训练策略,YOLO9000 可以快速的检测出超过 9000个类别的物体,总值 mAP 为19.7%。


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

相关文章

深度学习目标检测_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编码,词频越高的词语对应的编码越短。这三层的神经网络本身是对…

Doc2vec

目录 一:背景 二:基本原理 2.1:PV-DM 2.2:PV-DBOW 2.3:和word2vec区别 2.4:预测新文本的向量 三:代码实战 3.1:接口介绍 3.2:主要代码 一:背景 之前总结了Word2vec训练词向量的细节,讲解了一个词是如何通过wor…

关于doc2vec

原文地址:https://blog.csdn.net/john_xyz/article/details/79208564 1.“句向量”简介 word2vec提供了高质量的词向量,并在一些任务中表现良好。 关于word2vec的原理可以参考这几篇论文: https://arxiv.org/pdf/1310.4546.pdfhttps://arx…

doc2vec java_doc2vec

gensim 是处理文本的很强大的工具包,基于python环境下: 1.gensim可以做什么? 它可以完成的任务,参加gensim 主页API中给出的介绍,链接如下: http://radimrehurek.com/gensim/apiref.html 2.word2vec的使用 …

Doc2Vec的简介及应用(gensim)

作者:Gidi Shperber 在本文中,你将学习什么是doc2vec,它是如何构建的,它与word2vec有什么关系,你能用它做什么,并且没有复杂的数学公式。 介绍 文本文档的量化表示在机器学习中是一项具有挑战性的任务。很多应用都…

Doc2Vec模型介绍及使用

Doc2Vec模型 Doc2Vec模型 摘要背景段落向量 PV-DM模型PV-DBOW模型gensim实现Doc2Vec说明参考文献摘要 通过本文,你将了解到: Doc2Vec模型是如何产生的Doc2Vec模型细节Doc2Vec模型的特点Doc2Vec的使用及代码(gensim)背景 Doc2Vec模型的产生要从词向量表示(论文word2vec模型)开…

Doc2Vec - 计算文档之间的相似性

本文旨在向您介绍 Doc2Vec 模型,以及它在计算文档之间的相似性时如何提供帮助。 目录 前言 一、Word2Vec 1.Skip-Gram 2.Continuous Bag-of-Words (CBOW) 二、Doc2Vec 1.Distributed Memory version of Paragraph Vector (PV-DM) 2.Words version of Paragra…