浅析目标检测入门算法: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.


http://www.niftyadmin.cn/n/5009312.html

相关文章

2023 年前端编程 NodeJs 包管理工具 npm 安装和使用详细介绍

npm 基本概述 npm is the world’s largest software registry. Open source developers from every continent use npm to share and borrow packages, and many organizations use npm to manage private development as well. npm 官方网站:https://www.npmjs.…

SecureCRT ssh链接服务器

SecureCRT通过密钥进行SSH登录 说明: 一般的密码方式登录容易被密码暴力破解。所以一般我们会将 SSH 的端口设置为默认22以外的端口,或者禁用root账户登录。其实可以通过密钥登录这种方式来更好地保证安全。 密钥形式登录的原理是:利用密钥…

使用HTTP代理上网安全吗?

HTTP代理是一种代理服务器,它可以充当客户端和服务器之间的中介,以帮助客户端访问服务器上的资源。虽然使用HTTP代理可以带来一些便利,但是在安全方面也存在一些问题。 HTTP代理的安全问题 窃取用户信息 如果HTTP代理服务器不受信任&#xff…

Fluidd摄像头公网无法正常显示修复一例

Fluidd摄像头在内网正常显示,公网一直无法显示,经过排查发现由于url加了端口号引起的,摄像头url中正常填写的是/webcam?actionsnapshot,或者/webcam?actionstream。但是由于nginx跳转机制,会被301跳转到/webcam/?ac…

代码随想录训练营第38天|62.不同路径,63.不同路径II

代码随想录训练营第38天|62.不同路径,63.不同路径II 62.不同路径文章思路代码 63.不同路径II文章思路代码 总结 62.不同路径 文章 代码随想录|0062.不同路径 思路 d p [ i ] [ j ] { 1 , i 0 ∧ j 0 d p [ i − 1 ] [ j ] d p [ i ] [ j − 1 ] , e l s e \b…

Linux之SELinux

目录 概述 定义 作用 SELinux与传统的权限区别 SELinux工作原理 名词解释 主体(Subject) 目标(Object) 策略(Policy) 安全上下文(Security Context) 文件安全上下文查看 …

Spring boot环境搭建

使用IDE工具:IntelliJ IDEA 目录 一、安装JAVA 二、安装maven(Java项目管理工具) 三、安装IDE 四、在IDE中配置spring boot项目环境 1、配置jdk 2、配置maven 3、安装创建spring boot项目插件:Spring Assistant 4、安装简…

idea插件推荐——Bito提高编码效率

Bito是一款在IntelliJ IDEA编辑器中的插件,Bito插件是由ChatGPT团队开发的,它是ChatGPT团队为了提高开发效率而开发的一款工具。Bito插件的强大之处在于它可以帮助开发人员更快地提交代码,同时还提供了一些有用的功能,如自动补全提…