【YOLO学习】YOLOv2详解

文章目录

  • 1. 概述
  • 2. Better
    • 2.1 Batch Normalization(批归一化)
    • 2.2 High Resolution Classifier(高分辨率分类器)
    • 2.3 Convolutional With Anchor Boxes(带有Anchor Boxes的卷积)
    • 2.4 Dimension Clusters(维度聚类)
    • 2.5 Direct location prediction(直接的位置预测)
    • 2.6 Fine-Grained Features(细粒度的特征)
    • 2.7 Multi-Scale Training(多尺度的训练)
  • 3. Faster
  • 4. YOLOV2训练


原论文:YOLO9000: Better, Faster, Stronger
作者 Joseph Redmon 和 Ali Farhadi 在 YOLOv1 的基础上,进行了大量改进,提出了 YOLOv2 和 YOLO9000,重点解决 YOLOv1 召回率和定位精度方面的不足。

1. 概述

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

在这里插入图片描述

2. Better

2.1 Batch Normalization(批归一化)

 1. YOLOv2 中在每个卷积层后加 Batch Normalization(BN)层,去掉了 dropout 层。 Batch
Normalization 层可以起到一定的正则化效果,能提升模型收敛速度,防止模型过拟合。YOLOv2 通过使用 BN 层使得 mAP 提高了2%。

 2. Batch Normalization 通常放置在激活函数之前,即在卷积层或全连接层的输出之后进行归一化操作。Batch Normalization 的过程主要包括以下几个步骤:
 (1) 计算小批量的均值和方差:对于一个 mini-batch B = [ x 1 , x 2 , . . . , x m ] B=[x_1,x_2,...,x_m] B=[x1,x2,...,xm] 首先计算该小批量的均值 μ B μ_B μB 和方差 σ 2 B {σ^2}_B σ2B

在这里插入图片描述

 (2) 归一化:使用计算得到的均值和方差对每个输入数据进行归一化处理,得到新的输入。其中, ϵ ϵ ϵ 是一个很小的常数,用于防止分母为零。

在这里插入图片描述

 (3) 归一化后的数据可能会破坏原始数据的表达能力,因此通过引入可学习的参数 γ γ γ β β β,对归一化后的数据进行缩放和平移,以恢复数据的表达能力。

在这里插入图片描述

2.2 High Resolution Classifier(高分辨率分类器)

 1. 所有最先进的检测方法都使用在 ImageNet 上预训练的分类器。从AlexNet开始,大多数分类器在小于 256×256 的输入图像上运行。最初的 YOLO 在 224×224 的情况下预训练分类器网络,并将分辨率提高到 448 以进行检测训练。这意味着网络在切换到检测学习时还必须调整到新的输入分辨率。

:YOLOv1 在预训练阶段,输入尺寸是 224×224;而在检测阶段,输入尺寸则变为 448×448。这种变化是为了满足不同阶段和任务的需求,并实现更好的性能表现。

 2. 对于 YOLOv2,我们首先在 ImageNet 上以 448×448 的完整分辨率对分类网络进行微调,并进行 10 个 epoch 的预训练。这让网络有时间调整其滤波器,以便在更高的分辨率输入下更好地工作。然后,我们再对检测网络的结果微调。这个高分辨率的分类网络使我们的 mAP 增加了近 4%。

:YOLOv2 直接在预训练中输入的就是 448×448 的尺寸,微调的时候也是 448 × 448。

2.3 Convolutional With Anchor Boxes(带有Anchor Boxes的卷积)

 1. 锚框(anchor box) / 先验框(prior bounding box):在众多经典的目标检测模型中,均有先验框的说法,有的 paper(如Faster RCNN)中称之为 anchor(锚点),有的 paper (如SSD)称之为 prior bounding box(先验框),实际上是一个概念,特此说明。

 2. 对于一个 224×224 的图片,假设每个位置设置 3 个不同尺寸的先验框,那么就有 224×224×3=150528 个锚框,这个数量太大了。所以,更好的处理方式是先对原图进行下采样处理,得到 feature map,在 feature map 中生成锚框。以 vgg16 的 backbone 为例,把 224×224 的输入图片下采样了 5 次,得到 7×7 的 feature map,那就只需要得到 7×7×3=147 个先验锚框,这样的设置大大减少了先验框的数量,同时也能覆盖大多数情况。

 3. 如先前所述,一般会在同一位置生成不同形状和大小的多个锚框来增加预测的成功率。形状和大小分别用尺度(scale)和宽高比(ratio)来描述。由于Anchor Box 通常是以 CNN 提取到的 Feature Map 的点为中心位置,生成边框,所以一个 Anchor Box 不需要指定中心位置。

  • 尺度:描述基准锚框的大小信息。若尺度为 a a a,那么基准锚框由原图的宽和高分别缩小 a a a 倍所得。(注意,若宽高缩小为 a a a 倍,面积缩小 a 2 a^2 a2 倍)
  • 宽高比:生成锚框的形状信息,即最终生成锚框的宽和长的比。在改变宽高比时,应维持最终生成的锚框和基准锚框的面积恒定。

在这里插入图片描述

 4. 之前 YOLOv1:使用全连接层来直接预测边界框(x,y,w,h,c)其中边界框的坐标是相对于 cell 的,宽与高是相对于整张图片。由于各个图片中存在不同尺度和长宽比的物体,YOLOv1 在训练过程中学习适应不同物体的形状是比较困难的,这也导致 YOLOv1 在精确定位方面表现较差。

 5. 相较于 YOLOv1,使用 Anchor,模型的 mAP 值从 69.5 降到了 69.2,下降了一丢丢,而召回率却从 81% 提高到了 88%。

关于精度和召回率的介绍可以参考这篇文章:https://blog.csdn.net/m0_62881487/article/details/133722683

 6. 与 YOLOv1 类似。(1)在训练阶段,对于每个网格单元,只有那些与真实边界框具有最高 IoU(交并比)的锚点才会被标记为 “负责” 预测该物体。这意味着在训练中,每个真实边界框只会与一个最适合它的锚点进行匹配,而其他锚点则被视为 “负例”,即它们不包含任何物体,从而学习到不预测物体的情况。(2)在推断阶段,每个网格单元的 5 个锚点都会产生预测,但是 NMS 过程会去除那些重叠的低置信度预测,只保留最可能的检测结果。

在这里插入图片描述

 7. YOLOv2 输出结构中每个 grid cell 输出 K 个 bounding boxes(K通常为5),每个 bounding box 包含:

  • 4 个坐标值(x, y, w, h)
  • 1个置信度分数
  • 20 个类别概率分布

 YOLOv2 每个 grid cell 输出:5 × (4 + 1 + 20) =125 个值

2.4 Dimension Clusters(维度聚类)

 1. 在 Faster R-CNN 和 SSD 中,先验框的维度(长和宽)都是手动设定的,带有一定的主观性。如果选取的先验框维度比较合适,那么模型更容易学习,从而做出更好的预测。因此,YOLOv2 采用 k-means 聚类方法对训练集中的边界框做了聚类分析。因为设置先验框的主要目的是为了使得预测框与 ground truth 的 IOU 更好,到聚类中心的距离越小越好,但 IOU 值是越大越好,所以使用 1-IOU,这样就保证距离越小,IOU 值越大,所以聚类分析时选用 box 与聚类中心 box 之间的 IOU 值作为距离指标:

在这里插入图片描述

 2. 边界框聚类步骤:

在这里插入图片描述

 3. 如下图,选取不同的 k 值(聚类的个数)运行 K-means算法,并画出平均 IOU 和 K 值的曲线图。当 k = 5 时,可以很好的权衡模型复杂性和高召回率。与手工挑选的相比,K-means 算法挑选的检测框形状多为瘦高型。

在这里插入图片描述

2.5 Direct location prediction(直接的位置预测)

 1. 传统 RPN 网络的位置预测:(1) 方法: 预测相对于 Anchor Box 的坐标的偏移,和相对于Anchor Box 的高宽的偏移。 (2) 计算公式: 预测框中心坐标 = 输出的偏移量 × Anchor 宽高 + Anchor 中心坐标。 (3) 不足: 这个公式是不受约束的,因此任何锚框可以出现在图像中的任何位置。在随机初始化的情况下,模型需要很长时间才能稳定到预测合理的偏移量。

在这里插入图片描述
 2. YOLOv2 的改进:(1) 方法:预测边界框中心点相对于对应 cell 左上角位置的相对偏移值。将网格归一化为 1×1,坐标控制在每个网格内,同时配合 Sigmod 函数将预测值转换到 0~1 之间的办法,做到每一个 Anchor 只负责检测周围正负一个单位以内的目标 box。 (2) 计算公式:一个网格相对于图片左上角的偏移量是 cx,cy。先验框的宽度和高度分别是 pw 和 ph,则预测的边界框相对于特征图的中心坐标 (bx,by) 和宽高 bw、bh。 (3) 效果:使模型更容易稳定训练,mAP 值提升了约 5%。

在这里插入图片描述

2.6 Fine-Grained Features(细粒度的特征)

 1. 为什么使用细粒特征:这个修改后的 YOLO 在 13×13 特征图上进行检测。虽然这对于大型对象来说已经足够了,但是对于较小的对象来说,更细粒度的特性可能会使得检测效果更好。使用后最终提升了 1% 的 mAP

 2. 使用细粒度特征
 (1) Faster R-CNN 和 SSD:使用了多尺度的特征图来分别检测不同大小的物体,前面更精细的特征图可以用来预测小物体。
 (2) YOLOv2:不同的方法,为网络简单地添加一个直通层(passthrough layer),获取前层 26×26 分辨率特征。

 3. 直通层( passthrough layer)
 (1) 将相邻的特征叠加到不同的通道来,将高分辨率的特征与低分辨率的特征连接起来。
 (2) 将前层 26×26×512 的特征图转换为 13×13×2048 的特征图,并与原最后层特征图进行拼接。

 4. 具体过程:

  • YOLOv2 提取 Darknet-19 最后一个 maxpooling 层的输入,得到 26×26×512 的特征图。经过 1×1×64 的卷积以降低特征图的维度,得到 26×26×64 的特征图,然后经过 pass through 层的处理变成 13×13×256 的特征图(抽取原特征图每个 2×2 的局部区域组成新的 channel,即原特征图大小降低 4 倍,channel 增加 4 倍),再与 13×13×1024 大小的特征图连接,变成 13×13×1280 的特征图,最后在这些特征图上做预测。
  • 具体操作:一个 feature map,也就是在最后的池化之前,分成两路:一路是做拆分,分成四块,四块拼成一个长条,另一个是做正常的池化卷积操作,最后两个长条进行拼接叠加输出。

在这里插入图片描述

如何拆分成四块的:并不是简单的 “两刀切 4 块”,而是在每个 2×2 的小区域上都选择左上角块,具体看下图。
在这里插入图片描述

2.7 Multi-Scale Training(多尺度的训练)

 1. YOLOv1:(1) 方法: 使用448×448的固定分辨率输入。

 2. YOLOv2 的改进:
 (1) 原理:YOLOv2 模型只使用了卷积和池化层,所以可以动态调整输入大小。每隔几次迭代就改变网络,而不是固定输入图像的大小。
 (2) 做法:网络每 10 批训练后随机选择一个新的图像尺寸大小。由于模型下采样了 32 倍,从以下 32 的倍数 {320,352,…,608} 作为图像维度的选择。将网络输入调整到那个维度,并继续训练。
 (3) 作用:这种机制使得网络可以更好地预测不同尺寸的图片,意味着同一个网络可以进行不同分辨率的检测任务,在输入 size 较大时,训练速度较慢,在输入 size 较小时,训练速度较快,而 multi-scale training 又可以提高准确率,因此算是准确率和速度都取得一个不错的平衡。

 3. YOLOv2 和其他网络成绩对比:
 在小尺寸图片检测中,YOLOv2 成绩很好,输入为 228×228 的时候,帧率达到 90FPS,mAP 几乎和 Faster R-CNN 的水准相同。使得其在低性能 GPU、高帧率视频、多路视频场景中更加适用。在大尺寸图片检测中,YOLOv2 达到了先进水平,VOC2007 上 mAP 为 78.6%,仍然高于平均水准。

在这里插入图片描述

在这里插入图片描述

3. Faster

 1. (1) 通常目标检测框架:大多数检测框架依赖于 VGG-16 作为基本的特征提取器。VGG-16 是一个强大、精确的分类网络,但是它计算复杂。
 (2) YOLO 框架:使用基于 GoogLeNet 架构的自定义网络。虽说整体 mAP 表现较 VGG-16 差一些,但是却换来更快速、更少的预测运算。
 (3) YOLOv2 框架:使用的是一个全新的架构:Darknet-19。

 2. Darknet-19 细节:有 19 个卷积层和 5 个 maxpooling 层。(v1 的 GooLeNet 是 4 个卷积层和 2 个全连接层)

在这里插入图片描述

4. YOLOV2训练

 YOLOv2 训练分为三个阶段:

 第一阶段:第一阶段就是先在 ImageNet 分类数据集上预训练 Darknet-19,此时模型输入为 224×224,共训练 160 个 epochs。

 第二阶段:将网络的输入调整为 448x448,继续在 ImageNet 数据集上 finetune 分类模型,训练 10 个 epochs,此时分类模型的 top-1 准确度为 76.5%,而 top-5 准确度为 93.3%。

 第三阶段:修改 Darknet-19 分类模型为检测模型,并在检测数据集上继续 finetune 网络。网络修改包括:移除最后一个卷积层、global avgpooling 层以及 softmax 层,并且新增了三个 3×3×1024 卷积层,同时增加了一个 passthrough 层,最后使用 1×1 卷积层输出预测结果,输出的 channels 数为:num_anchors × (5 + num_classes),和训练采用的数据集有关系。

 由于 anchors 数为 5,对于 VOC 数据集输出的 channels 数就是 125,而对于 COCO 数据集则为 425。这里以 VOC 数据集为例,最终的预测矩阵为 T(shape为(batch_size, 13, 13, 125)),可以 reshape 到(batch_size, 13, 13, 5, 25),其中 T[:, :, :, :,0:4] 为预测框的位置和大小,T[:, :, :, :,5] 为预测框的置信度,T[:, :, :, :,5:] 为类别预测值。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/444064.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光伏开发:一充一放和两充两放是什么意思?

一充一放 一充一放是指储能设备在一次充电过程中充满电,并在一次放电过程中将电能全部释放。这种模式的原理相对简单,充电时电能转化为化学能或其他形式的能量储存,放电时则将这些能量转化回电能供应给负载。一充一放模式适用于对储能设备充…

2024年9月国产数据库大事记-墨天轮

本文为墨天轮社区整理的2024年9月国产数据库大事件和重要产品发布消息。 目录 2024年9月国产数据库大事记 TOP102024年9月国产数据库大事记(时间线)产品/版本发布兼容认证代表厂商大事记厂商活动相关资料 2024年9月国产数据库大事记 TOP10 2024年9月国…

51单片机的无线通信智能车库门【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块红外传感器光照传感器时钟模块步进电机蓝牙按键、LED、蜂鸣器等模块构成。适用于智能车库自动门、无线控制车库门等相似项目。 可实现功能: 1、LCD1602实时显示北京时间和自动/手动模式,以及验证是否成…

揭秘HCIE证书:职场神话or锦上添花?深度剖析!

HCIE:职场赛道上的加速器 在职场这条充满挑战与机遇的赛道上,每个人都渴望找到那个能让自己加速前行的助推器。 HCIE证书,作为IT领域的顶级认证,无疑成为了许多人心目中的理想选择。它不仅是华为对网络专家专业能力的认可&#…

Biomamba求职| 国奖+4篇一作SCI

转眼间我也要参加秋招啦,认真的求职帖,各位老师/老板欢迎联系~其它需要求职的小伙伴也欢迎把简历发给我们,大家一起找工作。 一、基本信息 姓名:Biomamba 性别:男 出厂年份:1998 籍贯:浙江…

App测试时常用的adb命令

adb 全称为 Android Debug Bridge(Android 调试桥),是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。 adb 是一种功能强大的命令行工具,可让 PC 端与 Android 设备进行通信。adb 命令可执行各种设备操作&#xff0…

如何构建某一行业的知识图谱

构建一个行业的知识图谱是一个系统而复杂的过程,它涉及到数据收集、处理、分析等多个环节。以下是构建行业知识图谱的基本步骤: 1. 需求分析: - 明确构建知识图谱的目的和应用场景,比如是用于辅助决策、市场分析、产品推荐等。…

k8s网络通信

k8s通信整体架构 k8s通过CNI接口接入其他插件来实现网络通讯。目前比较流行的插件有flannel,calico等 CNI插件存放位置:# cat /etc/cni/net.d/10-flannel.conflist 插件使用的解决方案如下 虚拟网桥,虚拟网卡,多个容器共用一个虚…

模拟实现消息队列(基于SpringBoot实现)

项目代码 提要:此处的消息队列是仿照RabbitMQ实现(参数之类的),实现一些基本的操作:创建/销毁交互机(exchangeDeclare,exchangeDelete),队列(queueDeclare&a…

<Rust>iced库(0.13.1)学习之部件(三十二):使用markdown部件来编辑md文档

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 注:新版本已更新为0.13 概述 这是本专栏的第三十二篇,主要介绍一…

zabbix7.0配置中文界面

Zabbix 是一个广泛使用的开源监控解决方案,支持多种语言界面。本文将详细介绍如何配置 Zabbix 以使用中文界面,从而提高用户体验和可读性。 1. 环境准备 在开始配置之前,请确保你已经安装并运行了 Zabbix 服务器、前端和数据库。如果你还没有…

WPF|依赖属性SetCurrentValue方法不会使绑定失效, SetValue方法会使绑定失效?是真的吗?

引言 最近因为一个触发器设置的结果总是不起效果的原因,进一步去了解[依赖属性的优先级](Dependency property value precedence - WPF .NET | Microsoft Learn)。在学习这个的过程中发现对SetCurrentValue一直以来的谬误。 在WPF中依赖属性Dependency property的…

从0到1:小区业主决策投票小程序开发笔记

可研 小区业主决策投票小程序: 便于业主参与社区事务的决策,通过网络投票的形式,大大节省了业委会和业主时间,也提高了投票率。其主要功能:通过身份证、业主证或其他方式确认用户身份;小区管理人员或业委会…

Java 17流程控制语句3w字解读

本笔记来自尚硅谷教育-康师傅,学习教程:https://www.bilibili.com/video/BV1PY411e7J6/?spm_id_from333.337.search-card.all.click 本章专题与脉络 第1阶段:Java基本语法-第03章 流程控制语句是用来控制程序中各语句执行顺序的语句&#xf…

5个免费ppt模板网站推荐!轻松搞定职场ppt制作!

每次过完小长假,可以明显地感觉到,2024这一年很快又要结束了,不知此刻的你有何感想呢?是满载而归,还是准备着手制作年终总结ppt或年度汇报ppt呢? 每当说到制作ppt,很多人的第一反应&#xff0c…

threejs-基础材质设置

一、介绍 主要内容:基础材质(贴图、高光、透明、环境、光照、环境遮蔽贴图) 主要属性: side: three.DoubleSide, //设置双面 color: 0xffffff, //颜色 map: texture, //纹理 transparent: true, // 透明度 aoMap: aoTexture, //ao贴图 aoMapIntensity: 1…

YOLO11改进|注意力机制篇|引入局部注意力HaloAttention

目录 一、【HaloAttention】注意力机制1.1【HaloAttention】注意力介绍1.2【HaloAttention】核心代码 二、添加【HaloAttention】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【HaloAttention】注意力机制 1.1【HaloAttent…

使用FastAPI做人工智能后端服务器时,接口内的操作不是异步操作的解决方案

在做AI模型推理的接口时,这时候接口是非异步的,但是uvicorn运行FastAPI时就会出现阻塞所有请求。 这时候需要解决这个问题: api.py: import asyncio from fastapi import FastAPI from fastapi.responses import StreamingResp…

嵌入式开发:STM32 硬件 CRC 使用

测试平台:STM32G474系列 STM32硬件的CRC不占用MCU的资源,计算速度快。由于硬件CRC需要配置一些选项,配置不对就会导致计算结果错误,导致使用上没有软件计算CRC方便。但硬件CRC更快的速度在一些有时间资源要求的场合还是非…

从 Reno TCP 到 Scalable TCP,HighSpeed TCP

前文 Scalable TCP 如何优化长肥管道 介绍了 Scalable TCP,但联系另一个类似的算法 HighSpeed TCP(简称 HSTCP),就会看到一个类似从 Reno TCP 经 BIC 到 CUBIC 的路线,但采用了不同的策略。 Reno TCP 经 BIC 到 CUBIC 路线的核心在于 “在长…