优化改进 | YOLOv2算法超详细解析(包括诞生背景+论文解析+技术原理等)

前言:Hello大家好,我是小哥谈。YOLOv2是YOLO(You Only Look Once)目标检测算法的第二个版本,它在YOLOv1的基础上做了很多改进,包括使用更深的卷积神经网络Darknet-19作为特征提取器、使用Batch Normalization、使用锚盒(Anchor Box)等技术来提高准确性和速度。此外,YOLOv2还提出了一种分类和检测的联合训练策略,可以检测超过9000个类别的物体(故又称YOLO9000)。总的来说,YOLOv2在准确性、速度和识别种类方面都有很大的提升。本节课就给大家重点介绍下YOLO系列算法中的YOLOv2!🌈
目录
🚀1.诞生背景
🚀2.论文发表
🚀3.技术原理
💥💥3.1 网络结构
💥💥3.2 训练策略
🚀4.性能评价

🚀1.诞生背景
2017年,作者Joseph Redmon和Ali Farhadi在YOLOv1的基础上,进行了大量改进,提出了YOLOv2 ,重点解决YOLOv1召回率和定位精度方面的不足。YOLOv2 是一个先进的目标检测算法,比其它的检测器检测速度更快。除此之外,该网络可以适应多种尺寸的图片输入,并且能在检测精度和速度之间进行很好的权衡。相比于YOLOv1是利用全连接层直接预测Bounding Box的坐标,YOLOv2借鉴了Faster R-CNN的思想,引入Anchor机制。利用K-means聚类的方法在训练集中聚类计算出更好的Anchor模板,大大提高了算法的召回率。同时结合图像细粒度特征,将浅层特征与深层特征相连,有助于对小尺寸目标的检测。
作者动机:♨️♨️♨️
1.YOLOv1 速度还是不够快,更换了分类的网络结构。
2.YOLOv1 能检测的物体的种类不够多,提出的YOLO9000利用了分类的数据库使得能检测9000种物体。
3.YOLOv1 召回率低,利用了anchor box解决同一个bonding box 只能检测同一类物体的问题。
YOLOv1和YOLOv2是两个不同版本的目标检测模型。它们之间的区别总结如下:
-
网络架构:YOLOv1使用一个单一的卷积神经网络(CNN)来同时预测边界框和类别,而YOLOv2采用了Darknet-19作为主干网络,并在其之上添加了额外的卷积层和特征金字塔网络。
-
特征提取:YOLOv1在最后一层使用全连接层来生成预测,而YOLOv2在特征图上进行多尺度预测。这种多尺度预测使得YOLOv2能够更好地捕捉不同尺度的目标。
-
Anchor Boxes:YOLOv2引入了锚框(anchor boxes)的概念,通过在每个单元格上定义多个先验框,来预测不同尺度和长宽比的目标。这种方法使得YOLOv2能够更好地处理不同形状和大小的目标。
-
损失函数:YOLOv1使用平方误差来计算边界框坐标和类别的损失,而YOLOv2采用了适应性权重的交叉熵损失函数,以更好地处理类别不平衡问题。
-
训练策略:YOLOv2使用了分步训练策略。首先,使用较大的输入图像进行预训练,然后再用较小的输入图像进行微调。这种策略在提高模型性能的同时,还能提高模型的速度。
🚀2.论文发表
YOLOv2是一篇由Joseph Redmon和Ali Farhadi于2016年发表的目标检测论文。该论文提出了一种新的目标检测算法,可以更快地在各种图像尺寸下运行,并且可以检测9000种以上的目标类别。YOLOv2使用了锚框,这是YOLOv1没有使用的技术。此外,该论文还提出了一种新的网络结构,称为Darknet-19,可以在不损失准确性的情况下减少模型大小和计算量。YOLOv2的性能比YOLOv1有了显著的提升,成为了当时最先进的目标检测算法之一。

说明:♨️♨️♨️
论文题目:《YOLO9000: Better, Faster, Stronger》
论文地址: https://arxiv.org/abs/1612.08242
说明:♨️♨️♨️
关于YOLOv2论文的详细解析,请参考文章:
优化改进 | YOLOv2论文介绍及翻译(纯中文版)
🚀3.技术原理
💥💥3.1 网络结构
YOLOv2 采用 Darknet-19 作为特征提取网络,其整体结构如下:

该网络结构的主要优势在于:
- 没有全连接层,可以输入任意尺寸的图片。
- 速度快,每2个卷积层之间用了1x1的卷积核来压缩模型。最后没用全链接层, 而是利用了avgpool。速度提升了。
- 特点:每次pool尺寸减半,通道增加 一倍。
改进后的YOLOv2: Darknet-19,总结如下:
- 与VGG相似,使用了很多3×3卷积核;并且每一次池化后,下一层的卷积核的通道数 = 池化输出的通道 × 2。
- 在每一层卷积后,都增加了批量标准化(Batch Normalization)进行预处理。
- 采用了降维的思想,把1×1的卷积置于3×3之间,用来压缩特征。
- 在网络最后的输出增加了一个global average pooling层。
- 整体上采用了19个卷积层,5个池化层。
💥💥3.2 训练策略
YOLOv2的训练策略主要包括以下几个步骤:
-
数据准备:首先需要准备训练数据集,包括图像和标注信息。标注信息通常包括物体的类别和边界框的位置。
-
网络初始化:使用预训练的卷积网络(如Darknet-19)作为特征提取器,然后添加额外的卷积层和全连接层来预测边界框的位置和类别。
-
损失函数:定义损失函数来度量预测和真实标注之间的差异。YOLOv2使用多任务损失函数,包括分类损失、边界框坐标损失和置信度损失。
-
训练过程:使用随机梯度下降(SGD)或其他相似的优化算法来最小化损失函数。在每个训练批次中,随机选择一批图像,并通过前向传播计算预测结果。然后使用反向传播更新网络参数。
-
数据增强:为了增加训练样本的多样性和鲁棒性,可以采用数据增强技术,如随机缩放、随机裁剪、随机旋转等。
-
迭代训练:重复执行步骤4和步骤5,直到达到预定的训练轮数或收敛条件。
-
推理阶段:在训练完成后,可以使用训练好的模型对新的图像进行目标检测。
🚀4.性能评价
🍀(1)优点
- 结果:相对v1 (更快、mAP更高)
- 正负样本:引入Anchor和使用K-means聚类,提高了Recall。
- Backbone:DarkNet-19,降低了计算量(更快)。
- Neck:引入特征融合模块(passthrouch),融合细粒度特征。
- 检测头:多尺度训练提高模型能力,实现了速度和精度的权衡。
- 小技巧:引入BN,加速网络收敛;约束输出范围,训练更稳定;
🍀(2)缺点
- Backbone 可持续优化。
- Neck 可持续优化。
- 只是单个检测头,小目标识别还不太好。
- 损失函数可持续优化

相关文章:
优化改进 | YOLOv2算法超详细解析(包括诞生背景+论文解析+技术原理等)
前言:Hello大家好,我是小哥谈。YOLOv2是YOLO(You Only Look Once)目标检测算法的第二个版本,它在YOLOv1的基础上做了很多改进,包括使用更深的卷积神经网络Darknet-19作为特征提取器、使用Batch Normalizati…...
作为前端开发,你应该知道的这十几个在线免费工具
偶然刷到知乎一位前端大佬 表歌 多篇优秀实用的文章,真的发现宝藏了 以下内容就是他在知乎分享的十几个在线免费工具 1. 页面设计检查清单:https://www.checklist.design/ 页面设计检查清单 通过清单可以检查一些常用容易忽略的设计要素。 2. 背景色…...
【广州华锐互动】关于物理力学的3D实验实操平台
在科学的广阔领域中,物理力学是一个至关重要的分支,它探索了物体在力作用下的运动规律。然而,传统的物理实验往往需要复杂的设备和大量的操作,这对于学生来说是一项巨大的挑战。为了解决这个问题,广州华锐互动开发了物…...
LVS负载均衡(LVS简介、三种工作模式、十种调度算法)
LVS简介 LVS(Linux Virtual Server)是一种基于Linux内核的高可用性负载均衡软件。它通过将客户端请求分发到多个后端真实服务器,提高系统性能和可靠性。LVS支持多种调度算法,如轮询、最少连接、源地址哈希等,用于决定…...
Vue响应式数据的实现原理(手写副作用函数的存储和执行过程)
1.命令式和声明式框架 命令式框架关注过程 声明式框架关注结果(底层对命令式的DOM获取和修改进行了封装) 2.vue2 Object.defineProperty()双向绑定的实现 <body><div id"app"><input type"text" /><h1>…...
内核进程的调度与进程切换
进程被创建到了链表中,如何再进行进一步的调用和调用? 进程调度 void schedule(void); 进程调度 switch_to(next); 进程切换函数 void schedule(void) {int i,next,c;struct task_struct ** p;/* check alarm, wake up any i…...
docker-rabbitmq 安装依赖
出现的问题如下: channel error; protocol method: #method(reply-code404, reply-textNOT_FOUND - no channel error; protocol method: #method<channel.close>(reply-code404, reply-textNOT_FOUND - no 查看rabbitmq 客户端是否存在如…...
(1)(1.9) HC-SR04声纳
文章目录 前言 1 连接到自动驾驶仪 2 参数说明 前言 HC-SR04 声纳是一种价格低廉但量程很短(最远只有 2m)的测距仪,主要设计用于室内,但也成功地在室外的 Copter 上使用过。极短的测距范围使其用途有限。 !Warning…...
06 MIT线性代数-列空间和零空间 Column space Nullspace
1. Vector space Vector space requirements vw and c v are in the space, all combs c v d w are in the space 但是“子空间”和“子集”的概念有区别,所有元素都在原空间之内就可称之为子集,但是要满足对线性运算封闭的子集才能成为子空间 中 2 …...
【每日一题Day360】LC1465切割后面积最大的蛋糕 | 贪心
切割后面积最大的蛋糕【LC1465】 矩形蛋糕的高度为 h 且宽度为 w,给你两个整数数组 horizontalCuts 和 verticalCuts,其中: horizontalCuts[i] 是从矩形蛋糕顶部到第 i 个水平切口的距离verticalCuts[j] 是从矩形蛋糕的左侧到第 j 个竖直切口…...
中国地名信息库
地名是社会基本公共信息,是历史文化的重要载体。 2014年至2018年,国家启动实施并完成了第二次全国地名普查工作,全国共计采集地名1320多万条,修测标绘地名图2.4万多幅,新设更新地名标志68万多块,普遍建立了…...
网络时代下的声音之路:如何在中央新闻媒体发布网评稿
在当今数字时代,信息传播已经变得更加便捷和广泛。各大中央新闻媒体平台为民众提供了一个发布观点、表达意见的平台。在这个背景下,撰写并发布网评稿成为了一种重要的社会参与方式。根据媒介易软文发稿平台的总结,下面是探讨如何在各大中央新…...
Selenium中WebDriver最新Chrome驱动安装教程
😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…...
云原生Docker数据管理
目录 Docker的数据管理 数据卷 数据卷容器 容器互联 容器中管理数据主要有两种方式: 数据卷(Data Volumes)数据卷容器(Data Volume Dontainers) Docker的数据管理 数据卷 数据卷是一个供容器使用的特殊目录&a…...
endnote设置
问题1:参考文献的tab太长 首先要在endnote里面这样设置,file->output->edit "XXX" 保存之后,在word更新目录。 在word里面设置悬挂缩进 结果: Endnote参考编号与参考文献距离太远怎么调整 endnote 文献对齐方式…...
计算机网络整理-简称缩写【期末复习|考研复习】
文章目录 前言一、物理层1.1 FDM频分复用 Frequency-division multiplexing1.2 TDM时分复用 Time-division multiplexing1.3 WDM波分复用 Wavelength Division Multiplexing1.4 Hub 集线器1.5 FSK频移键控 Frequency-shift keying 二、数据链路层2.1 GBN回退N步协议 Go Back N …...
Flink Hive Catalog操作案例
在此对Flink读写Hive表操作进行逐步记录,需要指出的是,其中操作Hive分区表和非分区表的DDL有所不同,以下分别记录。 基础环境 Hive-3.1.3 Flink-1.17.1 基本操作与准备 1、上传依赖jar包到flink/lib目录下 cp flink-sql-connector-hive-…...
NSSCTF做题第9页(3)
[GKCTF 2020]CheckIN 代码审计 这段代码定义了一个名为ClassName的类,并在脚本的最后创建了一个ClassName类的实例。 在ClassName类的构造函数中,首先通过调用$this->x()方法获取了请求参数$_REQUEST中的值,并将其赋值给$this->code属性…...
从瀑布模式到水母模式:ChatGPT如何赋能软件研发全流程【文末送书五本】
从瀑布模式到水母模式:ChatGPT如何赋能软件研发全流程 前言内容简介购买链接作者简介专家推荐读者对象参与方式往期赠书回 🏘️🏘️个人简介:以山河作礼。 🎖️🎖️:Python领域新星创作者,CSDN实…...
设置使用LibreOffice作为默认程序打开word、excel等文档
以win7为例。打开控制面板,点击程序: 点击“设置默认程序”: 左侧选中LibreOffice,然后在右下方点击“选择此程序的默认值”: 然后根据自己的需要勾选就行了:...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
