目标检测 - 主流算法介绍 - 从RCNN到DETR

2023-11-08

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

在深度学习介入该领域之前,传统的目标检测思路包括区域选择、手动特征提取、分类器分类。由于手动提取特征的方法往往很难满足目标的多样化特征,传统方法始终没能很好的解决目标检测问题。

深度学习兴起之后,神经网络可以从大量数据中自动学出强大的特征提取和拟合能力,因而涌现出很多性能优良的目标检测算法。

基于深度学习的目标检测方法大致可分为三类——双阶段目标检测、单阶段目标检测、基于transformer的目标检测,本文将分别介绍这三类方法。

常用数据集

VOC数据集

VOC数据集[1]是目标检测领域的常用数据集,共有约10,000张带有边界框的图片用于训练和验证,每张图片有像素级别的分割标注、边界框标注以及目标类别标注,其中包含车辆、家具、动物、人4个大类,20个小类。

该数据集被广泛用作目标检测、语义分割、分类任务的基准数据集。

COCO数据集

COCO[2]的全称是Microsoft Common Objects in Context,它是微软于2014年出资标注的数据集,与ImageNet竞赛一样,COCO目标检测竞赛也被视为是计算机视觉领域最受关注和最权威的比赛之一。

相比于规模较小的VOC数据集,COCO是一个大型、丰富的物体检测、分割数据集。这个数据集以scene understanding为目标,主要从复杂的日常场景中截取,并通过精确的segmentation进行目标位置的标定。

图像包括91类目标,328,000影像和2,500,000个label。提供的类别有80 类,有超过33 万张图片,其中20 万张有标注,整个数据集中个体的数目超过150 万个。

双阶段目标检测算法

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

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

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

RCNN

RCNN是首个将深度学习应用到目标检测领域的工作,它的算法的思想较为简单:

对于每张图片,RCNN首先采用选择性搜索算法[1]生成大约2000个候选区域。随后将每个候选区域的尺寸转换为固定大小,并用CNN提取候选区域的特征。随后使用SVM分类器判断候选区域的类别,使用线性回归模型,为每个物体生成更精确的边界框。

尽管RCNN取得了很大进展,它仍然有很多缺点:

首先,整个目标检测阶段涉及到三个模型,用于特征提取的CNN、用于分辨目标物体类别的SVM分类器、用于调整边界框的线性回归模型。RCNN无法做到端到端训练,只能分别训练这三个模型,这增大了训练难度与训练时间。

其次,每张图片要提取2000个训练区域,随后又要用CNN分别提取每个区域的特征,特征的数量将非常大,这降低了模型的推理速度。通常每张图片需要45秒进行预测,基本无法处理大型数据集。

图1:RCNN算法流程

Fast RCNN

在RCNN中,每个候选区域都需要用CNN单独提取特征。为了减少算法的计算时间,Fast-RCNN希望在每张图片上只使用一次CNN,就能提取到所有关注区域的特征。为此,RCNN设计了如下步骤的目标检测算法:

首先对图片使用启发式算法,得到大量候选区域。随后将图片输入到卷积神经网络中,得到图片的特征,与候选区域的相对位置结合,就可以得到候选区域的特征。随后使用ROI池化层将候选区域调整至相同尺寸,并将调整后的结构输入到全连接神经网络中。最后在全连接神经网络后面添加softmax层,预测目标的列别;并以相同的方式添加线性回归层。

与RCNN相比,Fast RCNN计算一张图片只需要2秒,速度有大幅提升,每张

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目标检测 - 主流算法介绍 - 从RCNN到DETR 的相关文章

随机推荐

  • 快速排序C++(极简)

    原理建议去B站看视频 注意 注意 注意 刚开始移动的顺序真的很重要 可以试试顺序换一下 整个代码就出问题了 我试过的 第11和12行 代码如下 从小到大 为例 include
  • 操作系统-内存管理

    内存的基础知识 内存可存放数据 程序执行前需要先放到内存中才能被CPU处理 缓和CPU与硬盘之间的速度矛盾 如何区分各个程序的数据是放在什么地方 给内存的存储单元编地址 内存地址从0开始 每个地址对应一个存储单元 装入的三种方式 绝对装入
  • 海康威视测试实习生面试经历

    时间 2018 4 25 地点 海康威视二期 面试岗位 测试实习生 面试结果 通过 背景 大三 通信工程 自学了JAVA 还没学到框架 还是前一天看了一点测试的基础知识就去面试了 面试时间好久 技术面半小时 HR面半小时 技术面 面试官一男
  • 2PC(两阶段提交)方案

    XA方案 2PC的传统方案是在数据库层面实现的 如Oracle MySQL都支持2PC协议 为了统一标准减少行业内不必要的对接成本 需要制定标准化的处理模型及接口标准 国际开放标准组织Open Group定义了分布式事务处理模型DTP Di
  • 微信小程序(初学篇)——仿美团外卖

    初识小程序 为它的小巧玲珑所吸引 不由得心血来潮 这不正是用户所需要的吗 既方便快捷 又不占手机内存 所以我下定决心一定要做出一个自己的小程序 然后赚钱 赚钱 赚钱 当然现在只是学习阶段 所以先仿一个高端产品来挑战自我吧 说到高端 自然然而
  • android定位webview元素,appium— Android定位webView里面的UI元素

    Android SDK中的UIAutomator中本身是不支持网页中的UI元素定位 下面介绍几种常用的定位app内部的网页的UI元素的方法 一 使用chrome浏览器调试移动端网页 这是使用最多的一种方法 首页确保自己的手机已经跟电脑连接且
  • list 的forEach 方法 使用lambda 和“”::”关键字

    你是否会疑惑 list 遍历的时候 就这么一行是怎么做到的如此神奇 List
  • 4、Navicat 安装和使用

    一 Navicat 基本介绍 Navicat 是一款图形化 MySQL 管理软件 Navicat 的功能足以满足专业开发人员的所有需求 但是对数据库服务器初学者来说又简单易操作 Navicat 的用户界面 GUI 设计良好 让你以安全且简单
  • Idea 打开 RunDashboard (完整)

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net sheinenggaosuwo article details 86624759 Ho
  • (详细图解)通过VMware安装centOS系统并进行开机配置(小白版)

    一 VMware的版本及选择 VMware ESX Server ESX本身为一操作系统 不需要宿主操作系统 它本身就是一个操作系统 用来管理硬件资源 所有的系统都安装在它的上面 带有远程web管理和客户端管理功能 VMware GSX S
  • 最近用了一个免费的服务器

    最近看到一个免费的服务器阿贝云 声称是永久免费使用的 有免费虚拟主机 也有免费的云服务器 带宽也不错 下载基本峰值能达到10M s
  • Android学习之完整的注册登录Demo(APP端+服务器端)

    因比赛或者项目需要 写了几个小打小闹的APP 有的处于 单机 状态 有的处于 半联网 状态 觉得学习有点操之过急 所以先缓一缓 梳理一下之前所学的知识 将之前做的一些小玩意儿 整理出来写成博客 第一篇便是大部分APP都具有的注册登录系统 代
  • 15款最好用的思维导图(心智图 )工具

    原文地址 http www linuxidc com Linux 2015 01 111807 htm 思维导图也叫心智图 是一项流行的全脑式学习方法 用来表示词 思路 任务或其他与围绕着一个中央关键词或想法项目的示意图 通过径向 图形和非
  • 【控制】基于PID实现水箱控制系统matlab代码

    1 内容介绍 计算机控制技术 课程是电气信息类专业的主干课程之一 实验教学是该课程教学的重要组成部分 本实验项目以水箱液位为控制参量 设计了包括系统硬件 基于Matlab的控制界面 PID控制程序等内容的 计算机控制技术 实验方案 通过教学
  • 二叉树:总结篇(需要掌握的二叉树技能都在这里了)

    二叉树 总结篇 需要掌握的二叉树技能都在这里了 二叉树的理论基础 二叉树的遍历方式 1 深度优先遍历 2 广度优先遍历 求二叉树的属性 1 是否对称 2 求最大深度 3 求最小深度 4 求有多少个节点 5 是否平衡 6 找所有路径 7 递归
  • 剑指offer_第20题_包含min函数的栈_Python

    题目描述 定义栈的数据结构 并在该类型中实现一个能够得到栈中所含最小元素的min函数 时间复杂度应为O 1 理解 什么是栈 算法复杂度 解题思路 思路1 class Solution def init self self stack sel
  • ant.design的input框同时绑定onBlur和onPressEnter事件且方法为同一个方法后的结果

    ant design的input框同时绑定onBlur和onPressEnter事件且方法为同一个方法后的结果 前几天在做项目时碰到了这么一件事 就是在input上面同时绑定onBlur事件和onPressEnter 而且这两个事件还同时使
  • Python爬虫实战案例——第二例

    某某美剧剧集下载 从搜索片名开始 本篇文章主要是为大家提供某些电影网站的较常规的下载电影的分析思路与代码思路 通过爬虫下载电影 我们会从搜索某部影片的关键字开始直到成功下载某一部电影 地址 aHR0cHM6Ly93d3cuOTltZWlqd
  • esp32 SPIFFS的使用

    读取方法 include FS h include SPIFFS h include AutoFile h void File Init SPIFFS begin true 挂载 时间较长 void contentWrite String
  • 目标检测 - 主流算法介绍 - 从RCNN到DETR

    目标检测是计算机视觉的一个非常重要的核心方向 它的主要任务目标定位和目标分类 在深度学习介入该领域之前 传统的目标检测思路包括区域选择 手动特征提取 分类器分类 由于手动提取特征的方法往往很难满足目标的多样化特征 传统方法始终没能很好的解决