浅析目标检测入门算法:YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4

本文致力于让读者对以下这些模型的创新点和设计思想有一个大体的认识,从而知晓YOLOv1到YOLOv4的发展源流和历史演进,进而对目标检测技术有更为宏观和深入的认知。本文讲解的模型包括:YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4。

R-CNN

        候选区域

SPP-Net

        和R-CNN最大区别是什么?

                先提取特征,再对候选区域做处理?

Fast R-CNN: 

        并行选择性搜索算法和ConvNet提取特征

        将SPPNet中的金字塔池化替换为RoI池化层

Faster R-CNN

        每个候选框一个分数,就不用手工设计算法来筛选候选框了,用CNN进行候选区域的提取

二阶段目标检测算法 将目标检测作为一个     分类问题  来解决,(S1)一个模块提出一些候选框,(S2)后续的网络将其分类为目标或背景

YOLO将  目标检测问题  重构成一个    回归问题   ,直接将图片中的每个像素分类为  (1)目标、(2)边界框、 (3)不是目标(也就是背景)  这三种类型

单阶段目标检测算法 

YOLOv1

        YOLOv1的设计灵感来自于GoogLeNet模型,使用较小的卷积网络的级联模块。使用的具体细节是,使用GoogLeNet在ImageNet上预训练过、精度已经很高的预训练模型。在此基础上,添加随机初始化的卷积层和全连接层进行微调fine-tuning

        YOLOv1在准确性和速度都远远超过当时的两阶段实时目标检测模型,但是小目标检测和密集目标检测效果不好

SSD

        基于VGG-16来构建的

        模型浅层的SSD(特征图的size比较大,小目标的信息被保留的比较完整)用来检测较小的目标。较深的层用来 检测较大的物体

        在训练期间,SSD将每个GT框(ground truth)与具有最佳IoU的默认框匹配,( 【我猜】truth的答案标签 框 和你模型预测的  框 相匹配),并相应的训练网络,类似Muti-Box。(啥是Multi-box?

        SSD作者还使用了困难负样本挖掘和(啥是困难负样本挖掘?)大量数据增强方法

        损失函数:与DPM(啥是DPM?)类似,SSD利用  定位损失    和       置信度损失   的   加权和,作为总的损失值来训练监督模型

        并通过执行菲最大抑制NMS(什么是是非最大抑制,有什么用?)获得最终输出 

        SSD在检测小目标方面也存在困难。这个问题可以通过使用更好的backbone网络(如ResNet)来解决

YOLOv2

        相比YOLOv1,YOLOv2提供了速度和准确性之间良好的平衡

        YOLOv2,是YOLO系列中,首次使用了DarkNet-19作为backbone的。,

        使用了BatchNormalization以提高收敛性

        分类和检测系统的联合训练以增加检测类别(意思是:分类  和 打bouding box  这两个任务一起训练, 然后类别就多了?  啥叫检测类别? 识别是人,是车,是摩托?这和前面的联合训练有什么关系

        移除Fully connected层以提高速度(参数量小了,计算量小了,速度自然块 )

        使用学习的anchor框(是可学习的anchor框吧?)来提高召回率recall并获得更好的先验(啥叫先验?事先就知道这些框有可能是真实的框?

                recall=TP/(TP+FN)。实际为正的样本里,预测正确的样本的比例。所有的罪犯里,有多少罪犯被你抓住了。

                precision=TP/(TP+FP)。在你预测为正的样本集合里,多大比例是被正确预测的。所有你认为是犯人,被抓进Police局里人里,多少人真的是犯人

        YOLOv2的作者Redmon等人,使用WordNet将分类和检测数据集,组合在层次结构中。此WordTree可以用于预测更高的上位词条件概率,从而提高系统的整体性能。(啥意思啊?不知所云!

YOLOv3

        YOLOv3是在YOLOv2基础上做增量改进,整个范式上没有太大的改进了。YOLOv3相比YOLOv2只是速度上更快了,但是上从技术上是没有突破的。

        使用了比YOLOv2的backbone Darknet-19更大更深的网络Darknet-53来做backbone。 Darknet-53和Darknet-19的不同是,53增加了残差结构。缓解了因为网络过深带来的梯度消失问题,从而使得网络变得更深。

        使用了 数据增强、多尺度训练 muti scale training、Batch Normalization。

        分类器中的softmax层被逻辑分类器所取代。(是logistics regression吗?

CenterNet

        抛弃了传统的bouding box这种对目标object进行建模的方式,将一个object用 一个  点   来表示。这个  点   是bouding box的中心点。

        输入图像通过高斯半径生成热力图Heatmap, Heatmap head用于确定目标中心,Dimension Head用于估计目标大小(从目标中心向外半径多少),Offset head用于校正目标点的偏移。

        CenterNet使用预训练的DLANet作为提取器网络(什么是DLANet?有什么独特的优良特性),这个DLANet网络有3个Head: Heatmap Head, Dimension Head, Offset Head。这三个Head的多任务损失在训练时被反向传播到特征提取器进行参数更新,梯度优化。

        他比之前的工作更准确,推理时间更短。 

EfficientDet

        比之前的模型准确率更高,效率更高(体现在哪里?),是可扩展的目标检测器(可扩展体现在哪里?——可以把这个EfficientDet很好的推广到其他任务上)

        引入了高效的多尺度特征、BiFPN和模型缩放(啥叫模型缩放?是不是指的,我串联堆叠3个BiFPN也行,五个也行,一个也行)。BiFPN是     具有可学习权重的      双向Bi-directional     特征金字塔Feature Pyramid Network,用于在不同尺度上将输入特征   交叉连接。

                上图想展示的是作者如何一步步改机和演进,从而设计出BiFPN这个网络

               第一步 (a) 是利用 top-down自上而下的方式去融合level 3到level 7的特征(P3-P7)

               第二步 (b)在top-down的FPN的基础之上 ,串联   一条 通路 path, 可以bottom-up 自底向上

               第三步(c)引入NAS(Neural Architecture Search)神经网络架构搜索技术,去找到一条不规则的特征提取网络Feature Network的拓扑结构topology,然后重复串行这个结构多次(我猜的,不知道对不对)。你看图(c)就会发现这个网络结构十分不规则和奇怪,但是这种奇怪的网络结构是最优的网络结构。(或者performance更好,或者保证前者的基础上参数量相对较少)

                第四步(d)在权衡的accuracy和efficiency的基础上,平衡二者最优的架构是这个样子的结构的BiFPN。

         EfficientDet利用EfficientNet作为主干网络(下图左边那个),将多组BiFPN层串联堆叠作为特征提取网络(下面这个示意图,从左到右,堆叠了三个BiFPN)。最终BiFPN层的每个输出都被送到分类网络和框检测。

YOLOv4

        YOLOv4相比YOLOv3在范式上没有太大的改进,只是一堆Trick(奇淫巧技)的集合,使得模型速度很快,易于训练。

        为了改进性能引入了,数据增强、正则化方法、类标签平滑、CIoU-loss、CmBN(Cross mini-Batch Normalization)、自对抗训练、余弦退火算法来改进其最终的性能。

        使用了Mish激活函数、跨阶段部分连接CSP(Cross Stage Partial)、SPP-block(Spatial Pyramid Pooling)、PAN路径聚合块(Path Aggregation Network)、多输入加权残差连接MiWRC(Multiple input Weighted Residual Connection)

        检测头沿用YOLOv3的,backbone在YOLOv3的Darknet-53的基础上加入CSPNet,骨干网络是CSPNetDarknet-53.

趋势总结

整体趋势,逐渐走向End-to-End端到端

        End-to-End的意思是,从输入数据的开始端到模型处理得到最终结果的结束段之间,不需要将问题拆分成多个独立的子问题。开始端到结束端整个过程一体化的进行优化。

        (1)Craft Free, 不再需要手工设计特征,用神经网络来自动提取特征

        (2)proposal free, 不需要候选区域推荐,从二阶段算法到单阶段算法

        (3)anchor free

        (4)NMS free, YOLOX尝试过,但是没提供代码

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

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

相关文章

用户体验设计师是什么,一篇文章读懂!

我是设计师l1m0,今天要给大家分享一个有趣的职业:UX设计师。 在我们日常生活中,我们无时无刻都在与产品发生交互行为,例如使用应用APP、访问网站、与实体陈燕萍进行交互(例如试穿衣服)或者享受某个服务&am…

No1.详解【2023年全国大学生数学建模竞赛】C题——蔬菜类商品的自动定价与补货决策(代码 + 详细输出 + 数据集代码 下载)

时间告诉你什么叫衰老,回忆告诉你什么叫幼稚。不要总在过去的回忆里纠缠,昨天的太阳,晒不干今天的衣裳。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客…

Unity 之Material 类型和 MeshRenderer 组件中的 Materials 之间有一些重要的区别

文章目录 区别代码例子 区别 在Unity中,Material 类型和 MeshRenderer 组件中的 Materials 之间有一些重要的区别。 Material 类型: Material 是 Unity 中用来定义渲染属性的资源。它包含了一系列定义了如何绘制一个对象的属性,比如颜色、纹…

mysql的索引语法

创建索引 CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name ( index_col_name,... ) ; 普通索引 name字段为姓名字段,该字段的值可能会重复,为该字段创建索引。 CREATE INDEX idx_user_name ON tb_user(name); 唯一索引 phone手机…

Go 基础15-在init()函数中检查包级变量的初始状态

从程序逻辑结构角度来看,包(package)是Go程序逻辑封装的基本单元,每个包都可以理解为一个“自治”的、封装良好的、对外部暴露有限接口的基本单元。一个Go程序就是由一组包组成的。 在Go包这一基本单元中分布着常量、包级变量、函…

探究Vue3中的Composition API:优化组件逻辑的新利器

一、toRef函数 在 Vue 3.0 中&#xff0c;引入了一种新的响应式 API,即 toRef。toRef 函数可以将一个普通值转换为响应式引用类型&#xff0c;这样就可以在模板中直接使用这个响应式引用类型的属性&#xff0c;并且当该属性发生变化时&#xff0c;视图会自动更新。 <templat…

兵者多诡(HCTF2016)

环境:https://github.com/MartinxMax/CTFer_Zero_one 题目简介 解题过程 登录首页 提交png图片上传抓包&#xff0c;可以看到是向upload文件提交数据 在fp参数中尝试伪协议读取home.php文件 http://127.0.0.1:88/HCTF2016-LFI/home.php?fpphp://filter/readconvert.base64…

Mybatis的关系关联配置

前言 MyBatis是一个流行的Java持久化框架&#xff0c;它提供了一种简单而强大的方式来映射Java对象和关系数据库之间的数据。在MyBatis中&#xff0c;关系关联配置是一种用于定义对象之间关系的方式&#xff0c;它允许我们在查询数据库时同时获取相关联的对象。 在MyBatis中&…

第17章 站点构建

mini商城第17章 站点构建 一、课题 站点构建 二、回顾 1、Gateway限流 2、Nginx限流 3、Redis集群应用 4、缓存灾难处理 三、目标 1、Sentinel Sentinel介绍 Sentinel核心功能 Sentinel集成Gateway Sentinel控制台 2、Lvs+Nginx集群 Lvs负载均衡模式 NAT模式 TUN模式 …

实现在外网SSH远程访问内网树莓派的详细教程

文章目录 如何在局域网外SSH远程访问连接到家里的树莓派&#xff1f;如何通过 SSH 连接到树莓派步骤1. 在 Raspberry Pi 上启用 SSH步骤2. 查找树莓派的 IP 地址步骤3. SSH 到你的树莓派步骤 4. 在任何地点访问家中的树莓派4.1 安装 Cpolar4.2 cpolar进行token认证4.3 配置cpol…

HCIA自学笔记01-冲突域

共享式网络&#xff08;用同一根同轴电缆通信&#xff09;中可能会出现信号冲突现象。 如图是一个10BASE5以太网&#xff0c;每个主机都是用同一根同轴电缆来与其它主机进行通信&#xff0c;因此&#xff0c;这里的同轴电缆又被称为共享介质&#xff0c;相应的网络被称为共享介…

15:00面试,15:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

算法通关村第12关【白银】| 字符串经典问题

一、反转问题 1.反转字符串 思路&#xff1a;双指针&#xff0c;反转数组一个套路 class Solution {public void reverseString(char[] s) {int l 0;int r s.length -1;while(l<r){char c s[l];s[l] s[r];s[r] c;l;r--;}} } 2.k个一组反转 思路&#xff1a;每k个进行…

第14章_瑞萨MCU零基础入门系列教程之QSPI

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

【leetcode 力扣刷题】删除字符串中的子串or字符以满足要求

删除字符串中的子串或者字符以满足题意要求 1234. 替换子串得到平衡字符串680. 验证回文串917. 仅仅反转字母 1234. 替换子串得到平衡字符串 题目链接&#xff1a;1234. 替换子串得到平衡字符串 题目内容&#xff1a; 题目中给出了平衡字符串的定义——只有’Q’&#xff0c;…

彻底掌握Protobuf编码原理与实战

目录 1.类型2.VARINT 2.1 无符号数2.2 有符号数3.定长 3.1 I64类型3.2 I32类型4.LEN5.代码 学习这些有什么用&#xff1f; - 如果你是后端开发者&#xff0c;掌握这个对工作非常有用 - 如果你是求职者&#xff0c;面试时可以临危不惧 1.类型 最近看到有直接操作wire type相关的…

React+antd实现可编辑单元格,非官网写法,不使用可编辑行和form验证

antd3以上的写法乍一看还挺复杂&#xff0c;自己写了个精简版 没用EditableRowCell的结构&#xff0c;也不使用Context、高阶组件等&#xff0c;不使用form验证 最终效果&#xff1a; class EditableCell extends React.Component {state {editing: false};toggleEdit () &…

系统软件启动过程

实验一&#xff1a;系统软件启动过程 参考 重要文件 调用顺序 1. boot/bootasm.S | bootasm.asm&#xff08;修改了名字&#xff0c;以便于彩色显示&#xff09;a. 开启A20 16位地址线 实现 20位地址访问 芯片版本兼容通过写 键盘控制器8042 的 64h端口 与 60h端口。b.…

Selenium自动化测试框架常见异常分析及解决方法

01 pycharm中导入selenium报错 现象: pycharm中输入from selenium import webdriver, selenium标红 原因1: pycharm使用的虚拟环境中没有安装selenium, 解决方法: 在pycharm中通过设置或terminal面板重新安装selenium 原因2: 当前项目下有selenium.py,和系统包名冲突导致, …

Amazon Aurora MySQL 和 Amazon RDS for MySQL 集群故障转移和只读实例扩容时间测试

01 测试背景 Amazon Aurora MySQL 是与 MySQL 兼容的关系数据库&#xff0c;专为云而打造&#xff0c;性能和可用性与商用数据库相当&#xff0c;成本只有其 1/10。 Amazon RDS for MySQL 让您能够在云中更轻松设置、操作和扩展 MySQL 部署。借助 Amazon RDS&#xff0c;您可以…