YOLOv2学习笔记
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
- 最后输出为13×13×225,13代表划分为13×13个
- 将分类和空间检测解耦,利用
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-CNN和SSD的做法利用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)=1−IOU(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} (50−45)2+(50−45)2=50(5−4.5)2+(5−4.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 prior为anchor 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网络架构
缺点:
- 小目标检测效果差
- 整体检测效果还有待提高
相关文章:
YOLOv2学习笔记
YOLOv2 背景 YOLOv2是YOLO的第二个版本,其目标是显著提高准确性,同时使其更快 相关改进: 添加了BN层——Batch Norm采用更高分辨率的网络进行分类主干网络的训练 Hi-res classifier去除了全连接层,采用卷积层进行模型的输出&a…...
第十五届蓝桥杯----数字串个数\Python
目录 问题: 思想: 代码: 问题: Q:小蓝想要构造出一个长度为 10000 的数字字符串,有以下要求: 1) 小蓝不喜欢数字 0 ,所以数字字符串中不可以出现 0 ; 2) 小蓝喜欢数字 3 和 7 ,所以数字字符串中必须…...
【YOLOv8改进 - 卷积Conv】PConv(Pinwheel-shaped Conv): 风车状卷积用于红外小目标检测, 复现!
YOLOv8目标检测创新改进与实战案例专栏 专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例 专栏链接: YOLOv8基础解析+创新改进+实战案例 文章目录 YOLOv8目标检测创新改进与实战案例专栏介绍摘要文章链…...
LeetCode:链表
160. 相交链表 /*** 单链表的定义* Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {public ListNode getIntersectionN…...
Dockerfile项目实战-单阶段构建Vue2项目
单阶段构建镜像-Vue2项目 1 项目层级目录 以下是项目的基本目录结构: 2 Node版本 博主的Windows电脑安装了v14.18.3的node.js版本,所以直接使用本机电脑生成项目,然后拷到了 Centos 7 里面 # 查看本机node版本 node -v3 创建Vue2项目 …...
音视频小白系统入门笔记-0
本系列笔记为博主学习李超老师课程的课堂笔记,仅供参阅 音视频小白系统入门课 音视频基础ffmpeg原理 绪论 ffmpeg推流 ffplay/vlc拉流 使用rtmp协议 ffmpeg -i <source_path> -f flv rtmp://<rtmp_server_path> 为什么会推流失败? 默认…...
Zabbix 简介+部署+对接Grafana(详细部署!!)
目录 一.Zabbix简介 1.Zabbix是什么 2.Zabbix工作原理(重点) 3.Zabbix 的架构(重点) 1.服务端 2.客户端: 4.Zabbix和Prometheus区别 二.Zabbix 部署 1.前期准备 2.安装zabbix软件源和组件 3.安装数据库…...
C++: Initialization and References to const 初始化和常引用
cpp primer 5e, P97. 理解 这是一段很容易被忽略、 但是又非常重要的内容。 In 2.3.1 (p. 51) we noted that there are two exceptions to the rule that the type of a reference must match the type of the object to which it refers. The first exception is that we …...
Ubuntu2404装机指南
因为原来的2204升级到2404后直接嘎了,于是要重新装一下Ubuntu2404 Ubuntu系统下载 | Ubuntuhttps://cn.ubuntu.com/download我使用的是balenaEtcher将iso文件烧录进U盘后,使用u盘安装,默认选的英文版本, 安装后,安装…...
职坐标:智慧城市未来发展的核心驱动力
内容概要 智慧城市的演进正以颠覆性创新重构人类生存空间,其发展脉络由物联网、人工智能与云计算三大技术支柱交织而成。这些技术不仅推动城市治理从经验决策转向数据驱动模式,更通过实时感知与智能分析,实现交通、能源等领域的精准调控。以…...
DAY 45 leetcode 28的kmp算法实现
KMP算法的思路 例: 文本串:a a b a a b a a f 模式串:a a b a a f 两个指针分别指向上下两串,当出现分歧时,并不将上下的都重新回退,而是利用“next数组”获取已经比较过的信息,上面的指针不…...
从代码学习深度学习 - 自注意力和位置编码 PyTorch 版
这里写自定义目录标题 前言一、自注意力:Transformer 的核心1.1 多头注意力机制的实现1.2 缩放点积注意力1.3 掩码和序列处理1.4 自注意力示例二、位置编码:为序列添加位置信息2.1 位置编码的实现2.2 可视化位置编码总结前言 深度学习近年来在自然语言处理、计算机视觉等领域…...
设计和实现一个基于 DDS(直接数字频率合成) 的波形发生器
设计和实现一个基于 DDS(直接数字频率合成) 的波形发生器 1. 学习和理解IP软核和DDS 关于 IP 核的使用方法 IP 核:在 FPGA 设计中,IP 核(Intellectual Property Core)是由硬件描述语言(HDL&a…...
AWS IAM权限详解:10个关键权限及其安全影响
1. 引言 在AWS (Amazon Web Services) 环境中,Identity and Access Management (IAM) 是确保云资源安全的核心组件。本文将详细解析10个关键的IAM权限,这些权限对AWS的权限管理至关重要,同时也可能被用于权限提升攻击。深入理解这些权限对于加强AWS环境的安全性至关重要。 2.…...
UniRig ,清华联合 VAST 开源的通用自动骨骼绑定框架
UniRig是清华大学计算机系与VAST联合开发的前沿自动骨骼绑定框架,专为处理复杂且多样化的3D模型而设计。基于强大的自回归模型和骨骼点交叉注意力机制,UniRig能够生成高质量的骨骼结构和精确的蒙皮权重,大幅提升动画制作的效率和质量。 UniR…...
DELL电脑开机进入自检界面
疑难解答 - 如何解决开机直接进入BIOS画面 添加链接描述 一、DELL电脑开机自检提示please run setup program 未设置一天中的时间-请运行安装程序(Time-of-day not set - please run SETUP program) 配置信息无效-请运行安装程序(Invalid configuration information - ple…...
分库分表-除了hash分片还有别的吗?
在分库分表的设计中,除了常见的 Hash 分片,还有多种策略根据业务场景灵活选择。以下是几种主流的分库分表策略及其应用场景、技术实现和优缺点分析,结合项目经验(如标易行投标服务平台的高并发场景)进行说明: 一、常见分库分表策略 1. 范围分片(Range Sharding) 原理:…...
Spring Cloud初探之使用load balance包做负载均衡(三)
一、背景说明 基于前一篇文章《Spring Cloud初探之nacos服务注册管理(二)》,我们已经将服务注册到nacos。接下来继续分析如何用Spring cloud的load balance做负载均衡。 load balance是客户端负载均衡组件。本质是调用方拿到所有注册的服务实例列表,然…...
MySQL 数据库备份和恢复全指南
MySQL 是一款常用的开源数据库系统,在日常运维中,数据备份和恢复是系统管理的重要一环。本文将细致介绍 MySQL 两大备份方案—— mysqldump 和 XtraBackup,包括备份方式、恢复步骤、定时脚本、远程备份和常见问题处理方案。 一、mysqldump 备…...
Linux 命令全解析:从零开始掌握 Linux 命令行
Linux 作为一款强大的开源操作系统,广泛应用于服务器、嵌入式系统以及超级计算机领域。掌握 Linux 命令行技能,是每一位开发者和系统管理员的必备能力。本文将从基础开始,为你详细介绍常用的 Linux 命令,以及它们的使用场景和示例…...
vector常用的接口和底层
一.vector的构造函数 我们都是只讲常用的。 这四个都是比较常用的。 第一个简单来看就是无参构造,是通过一个无参的对象来对我们的对象进行初始化的,第一个我们常用来当无参构造来使用。 第二个我们常用的就是通过多个相同的数字来初始化一个vector。 像…...
VMware安装Ubuntu实战分享
1.前期准备 1. 硬件要求 确保您的计算机满足以下基本硬件要求,以便顺利运行 VMware 和 Ubuntu: 处理器: 至少支持虚拟化技术(如 Intel VT-x 或 AMD-V)。可以在 BIOS 设置中启用此功能。 内存: 至少 4GB …...
解锁Grok-3的极致潜能:高阶应用与创新实践
引言 Grok-3,作为xAI公司推出的第三代人工智能模型,以其强大的推理能力和多模态处理能力在全球AI领域掀起了热潮。不仅在数学、科学和编程等基准测试中超越了众多主流模型,其独特的DeepSearch和Big Brain模式更赋予了它处理复杂任务的卓越性…...
【2025年3月中科院1区SCI】Rating entropy等级熵及5种多尺度,特征提取、故障诊断新方法!
引言 2025年3月,研究者在国际机械领域顶级期刊《Mechanical Systems and Signal Processing》(JCR 1区,中科院1区 Top,IF:7.9)上以“Rating entropy and its multivariate version”为题发表科学研究成果。…...
【AI学习】李宏毅老师讲AI Agent摘要
在b站听了李宏毅2025最新的AI Agent教程,简单易懂,而且紧跟发展,有大量最新的研究进展。 教程中引用了大量论文,为了方便将来阅读相关论文,进一步深入理解,做了截屏纪录。 同时也做一下分享。 根据经验调整…...
Nacos-Controller 2.0:使用 Nacos 高效管理你的 K8s 配置
作者:濯光、翼严 Kubernetes 配置管理的局限 目前,在 Kubernetes 集群中,配置管理主要通过 ConfigMap 和 Secret 来实现。这两种资源允许用户将配置信息通过环境变量或者文件等方式,注入到 Pod 中。尽管 Kubernetes 提供了这些强…...
小程序获取用户总结(全)
获取方式 目前小程序获取用户一共有3中(自己接触到的),但由于这个API一直在改,所以不确定后期是否有变动,还是要多关注官方公告。 方式一 使用wx.getUserInfo 实例: wxml 文件<button open-type="getUserInfo" bindgetuserinfo="onGetUserInfo&quo…...
SQL(2):SQL条件判断、排序、插入、更新、删除
1、满足条件 AND和OR,简单 SELECT * FROM 表 WHERE countryCN AND alexa > 50;SELECT * FROM Websites WHERE countryUSA OR countryCN;2、排序,掌握:<order by,降序怎么表示> 就没问题 默认升序,ASC表示升…...
玩转Docker | 使用Docker部署Xnote笔记工具
玩转Docker | 使用Docker部署Xnote笔记工具 前言一、Xnote介绍Xnote简介1.2 Xnote特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署Xnote服务下载镜像编辑配置文件编辑部署文件创建容器检查容器状态检查服务端口安全设置四、访问Xnote服务访问Xnote首页…...
RPCRT4!OsfCreateRpcAddress函数分析之AssociationBucketMutexMemory数组的填充
第一部分: 1: kd> p RPCRT4!OsfCreateRpcAddress0x28: 001b:77c0f4f5 e888e5ffff call RPCRT4!OSF_ADDRESS::OSF_ADDRESS (77c0da82) 1: kd> t RPCRT4!OSF_ADDRESS::OSF_ADDRESS: 001b:77c0da82 ?? ??? 1: kd> kc # 00 RPCRT4!…...

