部分基于深度学习的主流目标检测算法

文章目录

    • Anchor-Based方法
      • Two-stage目标检测算法
        • RCNN
        • Fast RCNN
        • Faster RCNN
        • FPN(理解为Faster R-CNN中的一个关键组件或改进模块)
      • One-stage目标检测算法
        • YOLO
        • SSD
    • Anchor-Free方法
        • CornerNet
        • CenterNet
        • FSAF
        • FCOS
        • SAPD
    • 基于transformer的方法
        • DETR
    • 常用数据集
    • Reference

目标检测是计算机视觉的一个非常重要的核心方向,它的主要任务目标定位和目标分类。

基于深度学习的目标检测方法大致可分为两类:Anchor based方法(一阶段,二阶段)、Anchor free方法、基于transformer的方法。

无论是anchor还是anchor free,检测任务无非就是这样的思路:

  1. 表示:如何表示图像上的物体,如bbox,conner,center,reppoints等;

  2. 分配:如何分配正负样本:IOU、高斯热图、centerness等;

  3. 分类:分类任务计算物体类别损失,解决样本不平衡的问题;

  4. 回归:回归任务计算物体尺度、offset等等,以进行一些修正。

Anchor-Based方法

基于CNNs的目标检测算法主要有两条技术发展路线:anchor-based和anchor-free方法,而anchor-based方法则包括一阶段和二阶段检测算法(二阶段目标检测算法一般比一阶段精度要高,但一阶段检测算法速度会更快)。

局限性:

  1. Anchor的大小,数量,长宽比对于检测性能的影响很大(通过改变这些超参数Retinanet在COCO benchmark上面提升了4%的AP),因此Anchor based的检测性能对于anchor的大小、数量和长宽比都非常敏感。
  2. 这些固定的Anchor极大地损害了检测器的普适性,导致对于不同任务,其Anchor都必须重新设置大小和长宽比。
  3. 为了去匹配真实框,需要生成大量的Anchor,但是大部分的Anchor在训练时标记为负样本,所以就造成了样本极度不均衡问题(没有充分利用fore-ground)。
  4. 在训练中,网络需要计算所有Anchor与真实框的IOU,这样就会消耗大量内存和时间。

Two-stage目标检测算法

二阶段检测算法主要的两个阶段:

Stage1: 从图像中生成region proposals

Stage2: 从region proposals生成最终物体框

相较于单阶段目标检测算法,双阶段目标检测算法先根据图像提取候选框,然后基于候选区域做二次修正得到检测点结果,检测精度较高,但检测速度较慢。

这类算法的开山之作是RCNN,随后Fast RCNN、Faster RCNN依次对其进行了改进。

由于优秀的性能,Faster RCNN至今仍然是目标检测领域很有竞争力的算法。随后,FPN、Mask RCNN等算法又针对Faster RCNN的不足提出了改进,这进一步丰富了Faster RCNN的组件,提升了它的性能。

RCNN

简介:
CNN首先通过选择性搜索算法Selective Search从一组对象候选框中选择可能出现的对象框,然后将这些选择出来的对象框中的图像resize到某一固定尺寸的图像,并喂入到CNN模型(经过在ImageNet数据集上训练过的CNN模型,如AlexNet)提取特征,最后将提取出的特征送入到分类器来预测该对象框中的图像是否存在待检测目标,并进一步预测该检测目标具体属于哪一类。

不足:
重叠框(一张图片大2000多个候选框)特征的冗余计算使得整个网络的检测速度变得很慢(使用GPU的情况下检测一张图片大约需要14S)。

Fast RCNN

简介:
在RCNN中,每个候选区域都需要用CNN单独提取特征。为了减少算法的计算时间,Fast-RCNN希望在每张图片上只使用一次CNN,就能提取到所有关注区域的特征。
该网路使得我们可以在相同的网络配置下同时训练一个检测器和边框回归器。该网络首先输入图像,图像被传递到CNN中提取特征,并返回感兴趣的区域ROI,之后再ROI上运用ROI池化层以保证每个区域的尺寸相同,最后这些区域的特征被传递到全连接层的网络中进行分类,并用Softmax和线性回归层同时返回边界框。

不足:
与RCNN相比,Fast RCNN计算一张图片只需要2秒,速度有大幅提升,每张图片的计算时间只有但仍不够理想。因为它依然用到了选择性搜索方法得到感兴趣区域,而这一过程通常很慢。

Faster RCNN

简介:
Faster RCNN针对感兴趣区域的生成方式,对RCNN进行了优化,进一步提高了计算速度和准确率。具体来说,Faster RCNN使用Region Proposal Network(RPN) 生成感兴趣区域:
该网络首先输入图像到卷积网络中,生成该图像的特征映射。在特征映射上应用Region Proposal Network,返回object proposals和相应分数。应用Rol池化层,将所有proposals修正到同样尺寸。最后,将proposals传递到完全连接层,生成目标物体的边界框。

不足:
时至今日,依然是目标检测领域的主流算法之一。
虽然Faster RCNN的精度更高,速度更快,也非常接近于实时性能,但它在后续的检测阶段中仍存在一些计算冗余;除此之外,如果IOU阈值设置的低,会引起噪声检测的问题,如果IOU设置的高,则会引起过拟合。

在R-CNN系列算法中,包括原始的R-CNN以及其后续改进版本Fast R-CNN和Faster R-CNN,卷积神经网络(CNN)通常用作特征提取器(backbone)。这些算法的核心思想是使用深度学习来提取图像特征,然后在此基础上进行目标检测任务。
在这些算法中,CNN backbone可以是不同的架构,如VGG-16、ResNet-50、ResNet-101等等。VGG-16是R-CNN原始论文中使用的backbone。

FPN(理解为Faster R-CNN中的一个关键组件或改进模块)

简介:
Faster R-CNN是利用单个高层特征图(下采样四倍的卷积层–Conv4)进行物体的分类和bounding box的回归。这样做对小物体的检测不利,因为小物体本身具有的像素信息较少,在下采样的过程中,这些信息很容易丢失,从而降低了算法的性能。

为了处理这种物体大小差异十分明显的检测问题,FPN提出了特征金字塔网络结构,它引入了多尺度特征,在只增加少量计算量的情况下,提升小物体的检测性能。

具体来说,Faster RCNN将最后一层特征输入到了RPN中,最后一层的特征经过3x3卷积,得到256个channel的卷积层,再分别经过两个1x1卷积得到类别得分和边框回归结果。

而FPN将P2、P3、P4、P5、P6这五个特征层的特征都输入到了RPN中。每个特征层的下采样倍数不同,这意味着它们具有不同的尺度信息分离,因此作者将322、642、1282、2562、5122这五种尺度的anchor,分别对应到P2、P3、P4、P5、P6这五个特征层上,这样一来,每个特征层只需要专门处理单一的尺度信息即可。

此外,作者通过实验发现,如果将这5个特征层后面的RPN参数共享,所得到的结果与不共享几乎没有差别。这说明不同下采样倍数之间的特征有相似语义信息。

性能:
将FPN技术应用于Faster RCNN网络之后,网络的检测精度得到了巨大提高,再次成为当前的SOTA检测算法。此后FPN成为了各大网络(分类,检测与分割)提高精度最重要的技术之一。

在Faster R-CNN中,FPN通常被集成到基础的卷积神经网络中,用来改进区域建议网络(RPN)和后续的检测性能。FPN的引入显著提高了Faster R-CNN对小目标的检测能力,因为它能够更有效地捕捉到多尺度的目标信息。

One-stage目标检测算法

相较于双阶段目标检测算法,单阶段目标验测算法直接对图像进行计算生成检测结果,检测低速度快,但检测精度低。

这类算法的开山之作是YOLO,随后SSD、Retinanet依次对其进行了改进,提出YOLO的团队将这些有助于提升性能的 trick融入到YOLO算法中,后续又提出了4个改进版本YOLOv2~YOLOv5。

尽管预测准确率不如双阶段目标检测算法,由于较快的运行速度,YOLO成为了工业界的主流。

YOLO

简介:
双阶段目标检测需要预先设置大量先验框,并且需要专门的神经网络RPN对先验框进行位置修正。这种设定使得双阶段目标检测算法复杂且计算慢。

YOLO是单阶段目标检测的开山之作,它只需要用神经网络处理一次图片,就可以同时预测得到位置和类别,从而将目标检测任务定义为端到端的回归问题,提升了计算速度。YOLO的工作流程如下:

对于一张输入图片,首先将图片缩放成统一的尺寸,并在图片上划分出若干表格。随后使用卷积神经网络提取图片特征,并使用全连接层在每个网格上进行回归预测,每个网格预测K个box,每个box预测五个回归值。其中的四个回归值代表box的位置,第五个回归值代表box中含有物体的概率和位置的准确程度。

随后对于含有物体的box,使用全连接层,回归预测物体的在各个类别的条件概率。因而,卷积网络共输出的预测值个数为N×(K×5+C),其中N为网格数,K为每个网格生成box个数,C为类别数。

不足:
尽管单阶段模型显著提高了计算速度,YOLO划分网格的方式较为粗糙,在小目标检测任务上表现不佳,总体性能弱于Faster RCNN。

SSD

简介:
针对YOLO的不足,SSD借鉴了双阶段目标检测算法的一些trick,在YOLO的基础上进行了一系列改进:

YOLO利用单个高层特征进行目标检测,SSD则是将特征提取网络中不同层的多个特征输入到目标检测模块,以希望提升小物体检测的精度。

YOLO在每个网格上预测多个边界框,但这些预测都相对这个正方形网格本身,与真实目标多变的形状差异较大,这使得YOLO需要在训练过程中自适应目标的形状。SSD借鉴了Faster R-CNN中先验框理念,为每个网格设置不同尺度、长宽比的先验框,这在一定程度上减少训练难度。

SSD还使用卷积层络替代全连接层,针对不同特征图进行回归预测,这样一来,对于形状为mxnxp的特征图,只需要采用3x3xp这样比较小的卷积核得到检测值,进一步减少了模型的参数量,提高了计算速度。

总而言之,SSD算法的主要创新点是提出了Multi-reference和Multi-resolution的检测技术。SSD算法和先前的一些检测算法的区别在于:先前的一些检测算法只是在网络最深层的分支进行检测,而SSD有多个不同的检测分支,不同的检测分支可以检测多个尺度的目标,所以SSD在多尺度目标检测的精度上有了很大的提高,对小目标检测效果要好很多。

性能:
SSD的改进,使得单阶段目标检测算法的性能基本与当时的Faster-RCNN持平,不过后续又被Faster-RCNN类算法超越。

Anchor-Free方法

基于Anchor的物体检测问题通常被建模成对一些候选区域进行分类和回归的问题,在一阶段检测器中,这些候选区域就是通过滑窗方式产生Anchor box,而在二阶段检测器中,候选区域是RPN生成的Proposal,但是RPN本身仍然是对滑窗方式产生的Anchor进行分类和回归。基于Anchor的检测算法由于Anchor太多导致计算复杂,及其所带来的大量超参数都会影响模型性能。近年的Anchor free技术则摒弃Anchor,通过确定关键点的方式来完成检测,大大减少了网络超参数的数量。

CornerNet
CenterNet
FSAF
FCOS
SAPD

基于transformer的方法

对于目标检测任务而言,理论上讲,各个目标之间的关系是有助于提升目标检测效果的。尽管传统目标检测方法使用到了目标之间的关系,直到Transformer模型面世,无论是单阶段还是双阶段目标检测,都没有很好地利用到注意力机制。

一个可能的原因是目标与目标之间的关系难以建模,因为目标的位置、尺度、类别、数量都会因图像的不同而不同。而现代基于CNN的方法大多只有一个简单、规则的网络结构,对于上述复杂现象有些无能为力。

针对这种情况,Relation Net和DETR利用Transformer将注意力机制引入到目标检测领域。Relation Net利用Transformer对不同目标之间的关系建模,在特征之中融入了关系信息,实现了特征增强。DETR则是基于Transformer提出了全新的目标检测架构,开启了目标检测的新时代。

DETR

简介:
DETR是首个用transformer完成目标检测任务的代表性工作。

首先,DETR使用CNN提取图片的特征,再加上NLP领域常用的位置编码,最终生成了一批序列化数据。

在encoder阶段,将序列化数据其送入encoder中,利用注意力机制提取数据中的特征。在decoder阶段,输入N个随机初始化向量,每个object query关注图片的不同位置。经过decoder的解码,最终会生成N个向量,每个向量对应一个检测到的目标。最后将这N个向量输入到神经网络中,得到每个目标的类别和位置。

相较于其它目标检测算法,DETR生成的检测框数量大幅减少,与真实的检测框数量基本一致。DETR使用匈牙利算法,将预测框与真实框进行了匹配,随后就可以计算出loss,完成对模型的训练。

性能:
DETR取得了好于Faster RCNN的检测效果,并且它不需要预先指定候选区域,不需要使用NMS去除重复的目标框,算法流程十分简洁。

常用数据集

目标检测使用最多的四大公共数据集:

Pascal VOC

ILSVRC

MS-COCO

OID

Reference

https://zhuanlan.zhihu.com/p/393997909

https://zhuanlan.zhihu.com/p/485657298

https://zhuanlan.zhihu.com/p/94924987

https://blog.csdn.net/zhuquan945/article/details/79862522

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

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

相关文章

vue嵌套路由

一、嵌套 children配置 1.父类路由 mymusic 2.子类路由 musicson 1.创建MusicSon组件 <template><div><p>从前和后来</p><p>唯一</p><p>运气来的似有若无</p></div> </template><script>export defaul…

linux du 排除 某一个目录 proc

Linux的du用法排除某个目录_du -sh 排除目录-CSDN博客 du -sh /* --exclude"*proc*"

通俗易懂的策略模式讲解

什么是策略模式&#xff1f; 策略模式是一种设计模式&#xff0c;它允许你定义一系列的算法&#xff08;策略&#xff09;&#xff0c;并将每个算法封装成一个对象。这样&#xff0c;你可以轻松地切换不同的算法&#xff0c;而不需要改变原始代码。 一个简单的例子 假设你是…

韵搜坊 -- 前后端联调实现搜索图片

文章目录 后端新建图片类型Picture创建图片接口类PictureController新建PictureQueryRequest创建Service类创建实现类PictureServiceImpl 前端添加接口获取后端数据修改picture页面内容添加文章&#xff0c;图片的搜索功能修改查询参数的获取&#xff0c;实现查询用户功能 存在…

这10款安卓APP,简直好用到爆!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频http://AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频 1.追书——追书神器 追书神器是小说追新大神&#xff0c;全网实…

基于RequestResponseBodyMethodProcessor的Trim功能装饰者模式实现

文章目录 前言一、实现1.1 Trim1.2 TrimRequestResponseBodyMethodProcessorDecorator1.3 Configuration 二、测试2.1 测试用例2.2 测试结果2.2.1 Test no.12.2.2 Test no.22.2.3 Test no.32.2.4 Test no.4 前言 公司内部系统老是有人填表单复制粘贴老是整出前后空格来. 前端…

摸鱼大数据——大数据导论

大数据导论 1、概念 大数据时代: 万物皆数据 ​ 数据概念: 人类的行为及产生的事件的一种记录称之为数据 ​ 数据价值: 对数据的内容进行深入分析&#xff0c;可以更好的帮助了解事和物在现实世界的运行规律 2、大数据诞生 大数据的诞生: 跟随着互联网的发展的,当全球互联…

K8S认证 | CKA题库 + 答案 | 查看Pod CPU资源使用量

2、查看集群中运行Pod CPU资源使用量 您必须在以下Cluster/Node上完成此考题&#xff1a; Cluster Master node Worker node k8s …

【信息系统项目管理师知识点速记】采购管理:实施采购

实施采购过程是项目管理中一个关键环节,旨在通过一系列步骤确保项目所需的货物、服务或成果能够从合适的供应商处获得,并以合同形式确立双方的权利与义务。这一过程不仅关乎选择最合适的卖方,还包括了风险管理、成本控制、沟通规划等多个方面的考量。 输入概述 项目管理计划…

从零开始精通RTSP之加密

概述 原始的RTSP通信默认使用的是明文传输&#xff0c;这也就意味着&#xff0c;在网络上的任何节点都能轻易地查看或修改传输的内容。这在涉及隐私或版权保护的场景下&#xff0c;是完全不可接受的。因此&#xff0c;加密显得尤为重要。加密的目的主要有三点&#xff1a;一是进…

拧紧设备或工具的选型原则、常见类型和选型关键因素有哪些?

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 在工业生产领域&#xff0c;拧紧控制是一项至关重要的工艺环节。它涉及螺栓、螺母等紧固件的装配过程&#xff0c;直接关系到产品的质量和性能。因此&#xff0c;选择合适的拧紧设备或工具对于确保拧紧过程的准确性和稳…

[牛客网]——C语言刷题day4

答案&#xff1a;B 解析&#xff1a; a是数组首元素的地址,a1的步长是int&#xff0c;所以是2 &a是数组的首地址&#xff0c;&a1步长是int[5] ptr是int类型的指针&#xff0c;指向a数组的尾后位置&#xff0c;ptr-1的步长是int,所以是a数组的最后一个元素5 答案&am…

如何使用ffmpeg 实现10种特效

相关特效的名字 特效id 特效名 1 向上移动 2 向左移动 3 向下移动 4 颤抖 5 摇摆 6 雨刷 7 弹入 8 弹簧 9 轻微跳动 10 跳动 特效展示(同时汇总相关命令) pad背景显示 pad背景透明 相关命令(一会再讲这些命令&#xff0c;先往下看) # 合成特效语音 ffmpeg -y -loglevel erro…

Element Plus/vue3 无限级导航实现

在使用element plus 时&#xff0c;最初要使用的就是导航组件了&#xff0c;官网上看到的也就是写死的一级/二级导航&#xff0c;那么如何设计一个无限级且动态的导航呢&#xff1f;毋庸置疑&#xff0c;递归。废话不多说&#xff0c;直接看代码和效果&#xff1a; 代码&#x…

Jmeter:录制脚本(操作文档)

新建线程组 打开jmeter&#xff0c;右键测试计划–>添加–>Threads(Users)–>点击"线程组" 添加录制控制器 右键线程组–>添加–>逻辑控制器–>点击"录制控制器" 添加HTTP代理服务器 右键工作台–>添加–>非测试元件–>…

YOLOv5改进 | Neck | 添加双向特征金字塔BiFPN【小白轻松上手 | 论文必备】

&#x1f680;&#x1f680;&#x1f680;本专栏所有的改进均可成功执行&#x1f680;&#x1f680;&#x1f680; 尽管Ultralytics 推出了最新版本的 YOLOv8 模型。但YOLOv5作为一个anchor base的目标检测的算法&#xff0c;YOLOv5可能比YOLOv8的效果更好。但是针对不同的数据…

CDN都有哪些优势?

内容分发网络是一个经策略性部署的整体系统&#xff0c;其中包含了分布式存储、负载均衡、网络请求的重定向和内容管理四个要求&#xff0c;CDN的主要核心则是内容管理和全局的网络流量管理&#xff0c;CDN可以确保内容会以一种非常高效的方式为用户的请求提供服务。 接下来就让…

Linux 第三十五章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

Kubernetes安装calico网络插件失败

今天啥也没干成&#xff0c;不想排版了。 接着昨天搭建k8s集群&#xff0c;安装calico插件&#xff0c;虚拟机一直卡。 # 在 master 节点上执行 # 下载 calico 配置文件&#xff0c;可能会网络超时 curl https://docs.tigera.io/archive/v3.25/manifests/calico.yaml -O # 修…

[svelte] 怎么引入fortawesome的icon样式

首先在项目的终端下执行以下命令 npm install fortawesome/fontawesome-free # 或者 yarn add fortawesome/fontawesome-free这样子可以把fontawsome的图标给下载到项目的对应文件中 一般都是在node_modules中 在fontawsome/fontawesome-free中就可以看到很多文件夹了 …