YOLOv2学习笔记

news2025/4/16 15:37:35

YOLOv2

背景

YOLOv2是YOLO的第二个版本,其目标是显著提高准确性,同时使其更快

相关改进

  • 添加了BN层——Batch Norm
  • 采用更高分辨率的网络进行分类主干网络的训练 Hi-res classifier
  • 去除了全连接层,采用卷积层进行模型的输出,同时采用与锚框(anchor)进行bounding box的预测
  • 采用新的网络架构Darknet-19
  • 采用k-means聚类方法对训练集中的标准框做聚类分析,获取anchor boxes
  • 使用sigmoid函数处理位置预测值
  • 采用passthrough的网络模型的连接方式(类似resnet
  • 多尺度输入数据训练模型(可以用任意尺度的图像输入)

改进点详述

Batch Norm

引入Batch Norm,解决数据分布问题,有利于网络的训练

在这里插入图片描述

同时,为了防止经过某层网络后,数据的分布发生变化,因此约定,在每一层卷积层后都要加一层BN

基本步骤:

  • 求每一个训练批次数据的均值

  • 求每一个训练批次数据的方差

  • 使用求的的均值和方差对该批次的训练数据做归一化(调整为正态分布

  • 尺度变化和偏移:使用可学习的参数,做尺度变化和偏移
    B N γ , β = γ x i + β BN_{\gamma, \beta} = \gamma x_i + \beta BNγ,β=γxi+β
    在这里插入图片描述

实验证明,添加了BN层同时去除Dropout可以提高2%的mAP

一般BN层不和Dropout一起使用

Hi-res Classifier

使用更高分辨率的图像对模型进行预训练

对于分类模型:

  • 先使用224×224的数据训练160轮
  • 再使用448×448的数据训练10轮

对于检测模型:

  • 利用多尺度训练的方法一共训练160轮

Convolutional + Anchor Box

作者在实验中说明,如果仅仅单独地使用全卷积或者Anchor Box,会导致mAP下降

Yolov1中全连接层的缺点:

  • 参数量大
  • 容易过拟合

因此,作者在Yolov2中进行了改进:

  • 把最后的全连接层去掉
  • 一处最后一个Pool层,使得卷积层输出更高分辨率
  • 用416×416代替原来的输入大小448×448
    • 最后输出为13×13×225,13代表划分为13×13个bounding box
    • 416 / 13 = 0 416 / 13 = 0 416/13=0
  • 将分类和空间检测解耦,利用anchor box来预测目标的空间位置和类别——每一个框使用一组概率
    • 最后输出为13×13×225
    • 225 = 9×25 → \to 9 × ( x , y , w , h , c ) + p (x, y, w, h, c) + p (x,y,w,h,c)+p(其中,p为20个类别

在这里插入图片描述

使用奇数划分bounding box:防止物体中心点落在四个bounding box中心的情况
在这里插入图片描述

Anchor Box

yolov1中直接预测出物体的检测框大小的坐标,但由于物体大小不一,直接根据主干网络提取的信息进行矩形框和坐标的预测是一件很难的事情

而yolov2借鉴Faster R-CNNSSD的做法利用anchor框进行预测——核心是事先设置一个合理的box,即anchor box,基于这个合理的box进行预测

在这里插入图片描述

对每个grid cell都设置一些(9个)合理的anchor box,然后每个grid cell都基于这些anchor box进行预测,即预测框基于模型提取的特征和**anchor box**进行检测

anchor box的设置:

  • 三种尺寸:小、中、大三种尺寸
  • 三种长宽比例:1:1、1:2、2:1
  • 共有 3 × 3 = 9 种anchor box
    在这里插入图片描述

同时,由于引入了anchor box,因此存在两个问题:

  • anchor box的尺寸是人为手动选择,因此需要较合理的先验尺寸
  • 引入anchor box后模型训练不稳定,尤其是训练刚开始的时候,这种预测的不稳定来自于预测box的(x,y)
anchor box的选取

解决:使用k-means对9个设定的anchor box进行筛选

利用k-means真实框进行聚类算法步骤:

  • 定义簇类的个数,随机选取k个样本作为簇中心
  • 分别计算所有样本到k个簇中心的欧式距离
  • 根据距离,将样本点进行簇的划分
  • 计算各中心样本的均值作为新的簇心
  • 重复上述步骤,直至新的中心和原来的中心基本不变化时,结束

对所有样本中所有的真实框做聚类,将最终聚类的结果作为anchor box

同时,为了确保大的真实框和小的真实框之间的量纲问题,使用IOU作为聚类的评判准则:
d ( b o x , c e n t r o i d s ) = 1 − I O U ( b o x , c e n t r o i d s ) d(box, centroids) =1-IOU(box, centroids) d(box,centroids)=1IOU(box,centroids)
注:计算IOU是将不同的box中心点重合,计算不同box之间的交并比

大的真实框和小的真实框之间的量纲问题

如果使用欧式距离作为度量,则大的真实框会比小的真实框产生更多地误差,例50x50和45x45的box 与5x5和4.5x4.5的box,使用欧氏距离计算:
( 50 − 45 ) 2 + ( 50 − 45 ) 2 = 50 ( 5 − 4.5 ) 2 + ( 5 − 4.5 ) 2 = 0.5 \sqrt{(50-45)^2 + (50 - 45)^2} = \sqrt{50} \\ \sqrt{(5-4.5)^2 + (5 - 4.5)^2} = \sqrt{0.5} (5045)2+(5045)2 =50 (54.5)2+(54.5)2 =0.5
可见大的真实框产生的误差更大,这就会导致,假设k=5,大的box被分到多个簇中,而其余中小形状的box被分到一个簇中

作者在平衡复杂度和IOU之后,最终得到的最佳k值为5,因此最后的输出是13×13×125(5×25)

在这里插入图片描述

DarkNet-19网络模型

分类模型

该网络模型种由于没有全连接层,因此模型对输入数据(图片大小)没有特殊的规定要求
在这里插入图片描述

且其中每一个卷积模块由**卷积+BN+激活函数**构成

在这里插入图片描述

由上述结构可以看出,不论输入的图片大小是多少,最终经过一层1×1卷积层和全局平均池化后都会转化为1×1×1000的向量,从而进行分类工作

——正是由于这种网络结构(对输入数据大小不做严格要求),使得总体网络架构可以进行多尺度数据训练,增强模型的鲁棒性

检测模型

去除分类输出,即去除最后的1×1卷积层、全局平均池化核Sodtmax,使用一个1×1×N(N由输出结果而定)卷积代替
在这里插入图片描述

直接位置预测

弃用RPN网络预测方式,沿用yolov1的方式,预测边界框中心点相对于相应cell左上角位置的相对偏移值,同时使用sigmoid函数处理,进行归一化,防止偏移过多
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 b_x = \sigma(t_x) + c_x \\ b_y = \sigma(t_y) + c_y \\ b_w=p_we^{t_w} \\ b_h = p_he^{t_h} bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=pheth
其中, ( c x , c y ) (c_x, c_y) (cx,cy)cell左上角的坐标, ( p w , p h ) (p_w, p_h) (pw,ph)anchor框的尺寸大小

在这里插入图片描述

Passthrough

输入图像经过多层网络提取特征后(经过卷积、下采样),最后输出的特征图中,较小的对象特征可能不明显或者被忽略掉——为了更好地检测一些比较小的对象,最后输出的特征图需要保留一些更细节的信息

基本步骤:

  • 先对原始数据沿着通道维度进行拆分,得到 O 1 O1 O1
    在这里插入图片描述

  • 再对原始数据进行卷积和池化,得到 O 2 O2 O2

  • O 1 O1 O1 O 2 O2 O2进行Concat,得到特征融合后的数据

在这里插入图片描述

完整版的DarkNet-19

在这里插入图片描述

多尺度训练

作者再训练过程中引入了多尺度训练数据,即在训练过程中使用不同尺度的数据大小进行训练,增强模型的鲁棒性

具体操作为:每训练10个batch,网络就会随机选择另一种size的输入

训练过程

Yolov2的训练分为三个阶段

第一阶段

ImageNet分类数据集上预训练DarkNet-19,此时模型的输入为224×224,共训练160个轮次

第二阶段

将网络的输入调整为448x448,继续在ImageNet数据集上finetune(微调)分类模型,训练10个epoch

第三阶段

  • 修改DarkNet-19分类模型为检测模型,并在检测数据集上继续微调160轮

    网络的修改包括:

    • 移除最后一个卷积层、全局池化层和softmax层,增加三个3×3×1024卷积层
    • 增加passthrough
  • 输出数据中,channels = num_anchors×(5+num_calsses),该数与数据集有关

    同时在训练过程中使用多尺度的方式进行训练

损失函数

在这里插入图片描述

背景置信度误差

在这里插入图片描述

其中, 1 M a x I o U < T h r e s h 1_{Max IoU<Thresh} 1MaxIoU<Thresh为判定条件; λ n o o b j \lambda _{noobj} λnoobj为系数,当框内为背景时,该值为1

该误差用于计算各个预测框和所有真实标注框之间的IoU,并且取最大的IoU,如果该值小于一定的阈值(0.6),则这个预测框就标记为背景

先验框与预测框的坐标误差

其中, p r i o r prior prioranchor box的数据, b b b为预测框的相关数据

只在前12800步计算,目的是在训练前期预测框快速学习到先验框的形状,使得预测框不至于太过离谱

有物体的损失

计算与真实框匹配的预测框的损失,包括坐标损失、置信度损失和类别损失

匹配原则:

  • 对于某个特定的真实框,首先计算其中心点落在哪个cell上
  • 然后将这个cell对应的所有的anchor box与真实框之间的IoU,且这个过程中不考虑坐标只考虑形状
  • 选择最大的IoU作为于其匹配的anchor box,用这个anchor box对应的预测框来预测真实框

对于那些没有被真实框匹配的先验框,除去那些Max_IoU低于阈值的(需要计算背景置信度损失),其他的就全部忽略

在这里插入图片描述

其中, 1 k t r u t h 1_k^{truth} 1ktruth为判定条件

总结

相比于Yolov1,定位的准确度和召回率均有提升,且速度较快

提出了几个比较好的模块,使得后续版本继续沿用:

  • anchor box预选框
  • DarkNet网络架构

缺点:

  • 小目标检测效果差
  • 整体检测效果还有待提高

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【YOLOv8改进 - 卷积Conv】PConv(Pinwheel-shaped Conv): 风车状卷积用于红外小目标检测, 复现!

YOLOv8目标检测创新改进与实战案例专栏 专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例 专栏链接: YOLOv8基础解析+创新改进+实战案例 文章目录 YOLOv8目标检测创新改进与实战案例专栏介绍摘要文章链…

Dockerfile项目实战-单阶段构建Vue2项目

单阶段构建镜像-Vue2项目 1 项目层级目录 以下是项目的基本目录结构&#xff1a; 2 Node版本 博主的Windows电脑安装了v14.18.3的node.js版本&#xff0c;所以直接使用本机电脑生成项目&#xff0c;然后拷到了 Centos 7 里面 # 查看本机node版本 node -v3 创建Vue2项目 …

Zabbix 简介+部署+对接Grafana(详细部署!!)

目录 一.Zabbix简介 1.Zabbix是什么 2.Zabbix工作原理&#xff08;重点&#xff09;​ 3.Zabbix 的架构&#xff08;重点&#xff09;​ 1.服务端 2.客户端&#xff1a; 4.Zabbix和Prometheus区别 二.Zabbix 部署 1.前期准备 2.安装zabbix软件源和组件 3.安装数据库…

Ubuntu2404装机指南

因为原来的2204升级到2404后直接嘎了&#xff0c;于是要重新装一下Ubuntu2404 Ubuntu系统下载 | Ubuntuhttps://cn.ubuntu.com/download我使用的是balenaEtcher将iso文件烧录进U盘后&#xff0c;使用u盘安装&#xff0c;默认选的英文版本&#xff0c; 安装后&#xff0c;安装…

Spring Cloud初探之使用load balance包做负载均衡(三)

一、背景说明 基于前一篇文章《Spring Cloud初探之nacos服务注册管理(二)》&#xff0c;我们已经将服务注册到nacos。接下来继续分析如何用Spring cloud的load balance做负载均衡。 load balance是客户端负载均衡组件。本质是调用方拿到所有注册的服务实例列表&#xff0c;然…

vector常用的接口和底层

一.vector的构造函数 我们都是只讲常用的。 这四个都是比较常用的。 第一个简单来看就是无参构造&#xff0c;是通过一个无参的对象来对我们的对象进行初始化的&#xff0c;第一个我们常用来当无参构造来使用。 第二个我们常用的就是通过多个相同的数字来初始化一个vector。 像…

【2025年3月中科院1区SCI】Rating entropy等级熵及5种多尺度,特征提取、故障诊断新方法!

引言 2025年3月&#xff0c;研究者在国际机械领域顶级期刊《Mechanical Systems and Signal Processing》&#xff08;JCR 1区&#xff0c;中科院1区 Top&#xff0c;IF&#xff1a;7.9&#xff09;上以“Rating entropy and its multivariate version”为题发表科学研究成果。…

【AI学习】李宏毅老师讲AI Agent摘要

在b站听了李宏毅2025最新的AI Agent教程&#xff0c;简单易懂&#xff0c;而且紧跟发展&#xff0c;有大量最新的研究进展。 教程中引用了大量论文&#xff0c;为了方便将来阅读相关论文&#xff0c;进一步深入理解&#xff0c;做了截屏纪录。 同时也做一下分享。 根据经验调整…

Nacos-Controller 2.0:使用 Nacos 高效管理你的 K8s 配置

作者&#xff1a;濯光、翼严 Kubernetes 配置管理的局限 目前&#xff0c;在 Kubernetes 集群中&#xff0c;配置管理主要通过 ConfigMap 和 Secret 来实现。这两种资源允许用户将配置信息通过环境变量或者文件等方式&#xff0c;注入到 Pod 中。尽管 Kubernetes 提供了这些强…

【BUG】Redis RDB快照持久化及写操作禁止问题排查与解决

1 问题描述 在使用Redis 的过程中&#xff0c;遇到如下报错&#xff0c;错误信息是 “MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk...”&#xff0c;记录下问题排查过程。 2 问题排查与解决 该错误提示表明&#…

java分页实例

引言 在现代Web应用和移动应用中&#xff0c;面对大量数据的展示&#xff0c;分页技术成为了提升用户体验和优化数据加载效率的关键手段。尤其是在MySQL数据库环境中&#xff0c;合理运用分页查询不仅能显著减少服务器负载&#xff0c;还能提升数据访问速度&#xff0c;为用户提…

【Linux篇】ELF文件及其加载与动态链接机制

ELF文件及其加载与动态链接机制 一. EFL文件1.1 ELF文件结构二. ELF文件形成与加载2.1 ELF形成可执行2.2 ELF控制性文件的加载2.2.1总结 三. ELF加载与进程地址空间3.1 动态链接与动态库加载3.1.1 进程如何看到动态库 3.2 全局偏移量表GOT(global offset table&#xff09;3.2.…

经典算法 判断一个图中是否有环

判断一个图中是否有环 问题描述 给一个以0 0结尾的整数对列表&#xff0c;除0 0外的每两个整数表示一条连接了这两个节点的边。假设节点编号不超过100000大于0。你只要判断由这些节点和边构成的图中是否存在环。存在输出YES&#xff0c;不存在输出NO。 输入样例1 6 8 5 3 …

AI与深度伪造技术:如何识别和防范AI生成的假视频和假音频?

引言&#xff1a;深度伪造的崛起 近年来&#xff0c;人工智能技术迅猛发展&#xff0c;其中深度伪造&#xff08;Deepfake&#xff09; 技术尤为引人注目。这项技术利用深度学习和神经网络&#xff0c;可以轻松生成高度逼真的假视频和假音频&#xff0c;使人物的面部表情、语音…

ESP32驱动读取ADXL345三轴加速度传感器实时数据

ESP32读取ADXL345三轴加速度传感器实时数据 ADXL345三轴加速度传感器简介ADXL345模块原理图与引脚说明ESP32读取ADXL345程序实验结果 ADXL345三轴加速度传感器简介 ADXL345是一款由Analog Devices公司推出的三轴数字加速度计&#xff0c;分辨率高(13位)&#xff0c;测量范围达…

【Linux】系统入门

【Linux】系统初识 起源开源 闭源版本内核内核编号 Linux的安装双系统(不推荐)WindowsLinuxvmware虚拟机vitualbox操作系统的镜像centos 7/ubuntu云服务器租用 Linux的操作lsmkdir 文件名pwdadduser userdel -rrm文件名cat /proc/cpuinfolinux支持编程vim code.c./a.out 运行程…

github配置ssh,全程CV

1)随便找一个文件夹右键进入git bash 2)验证是否已有公私钥文件 cd ~/.ssh ls如果不存在则生成然后获取 生成时一直回车 ssh-keygen -t rsa -C "xxxxxx.com" cd ~/.ssh cat id_rsa.pub如果存在则直接获取 cd ~/.ssh cat id_rsa.pub3&#xff09;复制 4&#xf…

Dify简介:从架构到部署与应用解析

Dify 是一个开源的生成式 AI 应用开发平台&#xff0c;融合了后端即服务&#xff08;Backend as a Service, BaaS&#xff09;和 LLMOps 的理念&#xff0c;旨在帮助开发者快速搭建生产级的生成式 AI 应用。本文将详细解析 Dify 的技术架构、部署流程以及实际应用场景&#xff…

碳化硅(SiC)功率模块方案对工商业储能变流器PCS市场格局的重构

碳化硅&#xff08;SiC&#xff09;模块方案&#xff08;如BMF240R12E2G3&#xff09;对工商业储能变流器PCS市场格局产生颠覆性的重构&#xff1a; 2025年&#xff0c;SiC模块方案&#xff08;如BMF240R12E2G3&#xff09;凭借效率、成本和政策支持的三重优势&#xff0c;将重…

Redis入门(Java中操作Redis)

目录 一 基础概念 1. Redis 核心特点 2. Redis 与 MySQL 的对比 3. Redis的开启与使用 二 Redis的常用数据类型 1 基础概念 2 数据结构的特点 三 Redis基础操作命令 1 字符串操作命令 2 哈希操作命令 3 列表操作命令 4 集合操作命令 5 有序集合操作命令 6 通用命令…