目标检测(任务概述、机器学习时代的方法、深度学习时代的目标检测模型)

文章目录

    • 目标检测任务概述
    • 机器学习时代的目标检测方法
    • 深度学习时代的目标检测模型
      • 基于提议的目标检测模型
        • R-CNN 模型
        • Fast RCNN 模型
        • Faster RCNN 模型
        • SSD 模型
        • YOLO 模型
      • 基于分割的目标检测模型
        • FCN 模型
        • U-Net 模型

目标检测任务概述

  • 目标检测任务的概念:尝试从一张输入图像中找出感兴趣的物体所在的区域。
  • 感兴趣物体所在的区域:一般通过RoI(Region of Interest)进行表示,往往是一个包含有感兴趣的物体的水平的矩形,有时候也会是倾斜的矩形或一个表示物体轮廓线的任意几何形状。
  • 目标检测和OCR的关系:目标检测是一种常见的图像处理任务,是OCR任务的基础。
  • 目标检测技术的发展:在21世纪初,研究者们提出了很多基于机器学习的目标检测算法;十多年后,深度学习将目标检测引领向了一个新时代。
  • 目标检测方法的分类:根据发现感兴趣区域的方式和区域框的几何形状,可以分为两大类:
    • 基于提议的方法:该类方法会首先提出很多的可能包含有感兴趣物体的矩形框,并最终从这些矩形框中选择置信度高的那些作为输出结果。
    • 基于分割的方法:该类方法首先从一张输入图像中将各个物体分割开,然后从这些物体中选择属于感兴趣的类别的物体。

机器学习时代的目标检测方法

  • 主要时间:在2012年深度学习开始繁荣之前,目标检测领域由机器学习方法统治着。

  • 核心思想:根据输入图像提出多个候选区域,从这些候选区域中根据特征匹配找出被认为能够很好地容纳感兴趣的物体的那些。

  • 主要阶段:可以划分为五个阶段。

    • 提议阶段(Proposal):为后续的阶段生成多个候选区域。在机器学习时代,往往是通过不同尺寸的滑动窗口的方式生成数以万计的候选区域。
    • 特征抽取阶段(Feature-extraction):从每一个候选区域中抽取出图像的关键特征。在机器学习时代,往往使用人工设计的图像特征,比较知名的包括SIFT算法和HOG算法。
    • 判定阶段(Judgement):基于每一个候选区域的图像特征向量判定该区域中是否包含一个感兴趣的物体。大多数的机器学习方法会对于每一个感兴趣的类别训练一个SVM分类器,训练过程中使用的损失函数是Hinge损失函数(一个著名的算法是DPM,该算法赢得了2007年到2009年的PASCAL VOC目标检测挑战赛冠军)。另外,在该阶段还会给每一个候选框根据其对感兴趣物体的容纳情况生成置信度,这些置信度在后续的抑制阶段会被使用。
    • 调整阶段(Adjustment):调整候选区域的位置和尺寸。该阶段也是在DPM算法中首次提出的,使用边界框回归(BBR)来调整候选区域的位置和尺寸,帮助候选区域能够更好地容纳我们感兴趣的物体。BBR算法中,通过候选区域与和它最近的真实的边界框的交并比来量化候选区域的质量,
    • 抑制阶段(Suppression):移除高度重合的候选区域。使用的算法是非极大值抑制算法(NMS)。该方法首先设置一个交并比阈值,然后找出所有交并比超过该阈值的候选区域对,从中删除置信度较低的候选区域。该算法持续执行到无法继续移除候选区域为止,最终保留下来的候选区域就是最终的输出结果。
  • 存在的主要限制

    • 候选区域过多:传统的机器学习方法往往会在提议阶段生成非常多的候选区域,这些候选区域之间存在严重的重叠,在概念上和计算上都为下游的分析带来了很大的困难。
    • 图像特征提取不充分:基于人工设计的图像特征不能很好地捕捉输入图像中的关键信息。

深度学习时代的目标检测模型

基于提议的目标检测模型

R-CNN 模型

该模型于2014年提出。

  • 模型特色

    • 选择性搜索算法
      • 改进措施:R-CNN在生成候选区域的阶段,取消了原始的滑动窗口策略,而是采用一种新的选择性搜索算法。
      • 基本原理:选择性搜索算法通过在不同尺度和颜色空间中寻找相似的区域,并将它们合并成更大的区域(如果合并结果不是矩形则进行填充),以此来生成可能包含物体的候选区域。
      • 算法效果:最终,选择性搜索算法可以得到2000个左右的候选区域,相较于滑动窗口算法生成的候选区域少得多,方便后续的各种分析处理。
    • 预训练的卷积神经网络
      • 改进措施:在图像特征抽取阶段,R-CNN使用一个在ImageNet上预训练好的卷积神经网络(AlexNet)来对每一个候选区域进行图像特征抽取,而取消了人工设计的图像特征。
  • 算法结果

    • 精确度提升:相较于之前的基于机器学习的精确度最高的方法,该方法的精确度提高了超过30%。
    • 计算消耗降低:相较于之前的基于机器学习的方法,由于生成的候选区域更少,因此该算法的计算消耗也大大降低。
  • 存在的问题

    • 图像特征向量计算非并行:对于上一个步骤生成的大约2000个候选区域,R-CNN采用分开计算的方法,对于每一个候选区域计算其图像特征向量。
    • 各个阶段之间没有关联性:R-CNN中需要训练的三部分模型(也就是用于提取图像特征的卷积神经网络、用于进行判定的SVM和用于进行候选区域调整的模型BBR)是分开独立进行的,而没有作为一个整体进行统一训练。
    • SVM分类器存在的问题:对于不同的感兴趣物体类别需要独立训练多个SVM并分开使用,因此需要大量的训练开销。
    • 损失函数不够合理:在分类阶段,SVM只会输出每个候选框的二分类结果,而损失了该分类的详细信息,这些信息本可以通过设计合适的损失函数来进行利用。
Fast RCNN 模型

该模型于2015年提出。

  • 模型特色
    • 空间金字塔池化网络
      • 改进措施: Fast RCNN中使用何恺明提出的空间金字塔池化网络(SSPN)来代替R-CNN中的AlexNet。
      • 空间金字塔池化网络原理:即在原始的CNN网络中添加RoI池化层。通过该网络,可以同时计算提议阶段生成多个候选区域的图像特征向量,而不是像R-CNN中需要单独地对每一个候选区域计算图像特征向量,大大提高了计算速度。
    • 用神经网络取代SVM
      • 改进措施: 使用一个带有几层全连接层的神经网络进行分类,而取代了R-CNN中的多个并行SVM分类器。
      • 改进优点:神经网络避免了需要同时平行地训练多个SVM分类器,提升了训练的统一性,降低了训练难度;另外,神经网络的输出结果是分类概率而不是二分类的结果,因此能够更好地利用训练过程中的信息。
    • 设计联合的损失函数
      • 改进措施:将判断候选区域属于哪个类别的分类损失(交叉熵损失函数)和调整候选区域的位置和大小的边界框回归损失(平滑L1损失函数)合并为一个多任务损失函数。这种方式提高了训练的效率。
  • 算法效果
    • 显著的训练加速:相较于原始的R-CNN方法,该方法的训练加速了接近150倍。
    • 略微提高的精确度:相较于R-CNN,该方法进行目标检测的精确度略有提高。
  • 存在的限制
    • 提出候选区域的算法仍然不够高效:Fast RCNN仍然采用选择搜索算法来找出候选区域,但是这种方法仍然有进一步改进从而提升效率的空间。
Faster RCNN 模型

该模型由何恺明在2015年提出。

  • 模型特色
    • 区域提议网络(RPN):在该模型中,使用区域提议网络来取代选择性搜索算法。它是一个深度学习网络,可以在特征图上滑动一个小的卷积核(通常称为“锚点”或“anchor”),并为每个锚点预测一个边界框和这个边界框包含物体的概率。RPN会根据这些预测生成候选区域,这些候选区域是网络通过学习得到的,能够更加准确地定位到可能的物体位置。
  • 模型效果:相较于Fast RCNN,该模型通过区域提议网络,可以快超过10倍。
SSD 模型

该模型于2016年提出。

  • 模型特色
    • 统一中间步骤:SSD模型将目标检测任务中图像特征抽取、分类和调整三个步骤合并,直接对于生成的候选区域,使用端到端的卷积神经网络,生成预测类别向量和调整后的位置。
    • 损失函数:SSD模型中采用L2损失函数多类logistic损失函数的叠加作为模型的损失函数。
    • 优化后的区域提议网络:该模型对RPN进行了优化,在多个尺度的特征图上进行高效的目标检测,从而提升目标检测的精确度。
  • 模型效果:由于更多的阶段合并,使得SSD相较于Faster RCNN训练起来更加简单,比Faster RCNN还要快3到5倍,并且由于改进后的RPN算法,模型在精确度上也得到了提升。
YOLO 模型

该模型于2016年提出。

  • 模型特色
    • 直接生成候选区域:YOLO将输入图像直接通过7×7的网格划分为49个候选区域。
    • 使用CNN进行并行计算:使用一个卷积神经网络同时处理49个候选区域,输出这些候选区域的边界框坐标和分类概率。
  • 模型效果:相较于Faster RCNN,该模型可以加速三倍,但是目标检测精确率略有下降。

后续的目标检测模型还有 YOLO V2YOLO V3RetinaNetDSSDCascade RetinaNet等。上述的这些模型都是基于提议的目标检测模型的经典代表,下面将介绍基于分割的目标检测模型。

基于分割的目标检测模型

  • 使用场景:主要用于检测方向非水平以及边界不规则的物体,作为基于提议的目标检测方法的补充。
  • 基本原理:将输入图像分割为多个子部分,每一个子部分要么是一个物体,要么是背景,然后再判断每一个子部分哪一个才是需要检测的物体。该类方法实际上把目标检测问题变为了一个图像分割问题。
  • 机器学习时代的图像分割模型:可以分为基于聚类的模型、基于阈值的模型和基于边缘检测的模型等。
    • 基于聚类的模型:将输入图像中的像素进行聚类,聚类的同一个簇中的像素可能在颜色、纹理等特征上类似,因此一个簇被视为一个分割结果。
    • 基于阈值的模型:为每一个像素的多个特征设置阈值,相当于对一个特征空间进行了划分,将每一个像素的特征值投入该特征空间中,根据其所处的特征子空间来确定其类型。
    • 基于边缘检测的模型:通过检测位于表示物体边缘的像素来分割不同的区域。
FCN 模型
  • 提出时间:该模型于2015年提出。
  • 核心思想:将图像分割问题视为一个对图像中每一个像素的分类的问题。
  • 基本架构:编码器解码器架构。通过一个卷积神经网络编码器对输入图像进行编码,将得到的特征图通过反卷积神经网络解码器进行解码(实际上就是一个上采样过程)。最后输出一个特征图,特征图中对于每一个像素,都有一个概率向量,表示该像素属于各个类别的概率。该模型使用Softmax损失函数进行训练。
U-Net 模型
  • 提出时间:该模型于2015年提出,本身是用来分割生物医疗图像的。
  • 模型架构:该模型和FCN类似,但是其增加了一个U形的结构,其中包含多个编码器路径和解码器路径。另外,U-Net在上采样的过程中还使用了跳跃连接,将编码器路径中的高分辨率特征图直接与解码器路径中的相应特征图拼接起来,从而保留更多的信息。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

移动零 ----双指针

题目链接 题目: 分析: 上述题目, 是将数组分块, 分为前半非零, 后半零, 这种数组分块题我们首先想到双指针 思路: 定义两个指针, 一个cur 一个dest, cur用来遍历数组, dest 指向分界处的第一个零位置, 将数组分块首先让cur 0; dest 0;cur 遍历数组, 如果cur 0, 那么cur…

windows环境下安装Apache

首先apache官网下载地址:http://www.apachelounge.com/download/按照自己的电脑操作系统来安装 这里我安装的是win64 主版本是2.4的apache。 然后解压压缩包到一个全英文的路径下!!!一定一定不要有中文 中文符号也不要有&#xff…

Vue入门到关门之Vue介绍与使用

一、vue框架介绍 1、什么是Vue? Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与…

OpenHarmony语言基础类库【@ohos.util.PlainArray (非线性容器PlainArray)】

PlainArray可用于存储具有关联关系的key-value键值对集合,存储元素中key值唯一,key值类型为number类型,每个key对应一个value。 PlainArray依据泛型定义,采用轻量级结构,集合中key值的查找依赖于二分查找算法&#xf…

65、二分-在排序数组中查找元素的第一个和最后一个位置

思路: 寻找数组中的目标值第一个和最后一个,如果不存在哪儿就是返回-1。 第一种方式直接线性遍历,找到目标值记录当前下标。继续寻找下一个不等于目标值,说明下一个目标值的下标就是结尾。直接返回。 第二种方式通过使用二分法…

《HCIP-openEuler实验指导手册》1.7 Apache虚拟主机配置

知识点 配置步骤 需求 域名访问目录test1.com/home/source/test1test2.com/home/source/test2test3.com/home/source/test3 创建配置文件 touch /etc/httpd/conf.d/vhost.conf vim /etc/httpd/conf.d/vhost.conf文件内容如下 <VirtualHost *.81> ServerName test1.c…

基于Python+Selenium的web自动化测试框架详解

简介 随着Web应用程序的广泛应用和不断发展&#xff0c;Web自动化测试已经成为软件质量保证中的一个重要环节。而PythonSelenium作为一组强大的工具和框架&#xff0c;已经成为Web自动化测试领域中的热门技术之一。PythonSelenium可以帮助我们快速、准确地模拟用户行为和操作&…

电脑教程1

一、介绍几个桌面上面的软件 1、火绒&#xff1a;主要用于电脑的安全防护和广告拦截 1.1 广告拦截 1.打开火绒软件点击安全工具 点击弹窗拦截 点击截图拦截 拦截具体的小广告 2、向日葵远程控制&#xff1a;可以通过这个软件进行远程协助 可以自己去了解下 这个软件不要…

BP算法-即误差反向传播法简介

BP算法-即误差反向传播法简介 1986年 反向传播算法&#xff08;back propagation&#xff0c;简称BP模型&#xff09;是1986年由Rumelhart、Hinton和Williams为首的科学家提出的概念&#xff0c;是用于多层神经网络训练的著名算法&#xff0c;有理论依据坚实、推导过程严谨、概…

java spring 07 createBean()(加载class文件,重写方法,实例化前)和doCreateBean()

01.createBean方法 protected Object createBean(String beanName, RootBeanDefinition mbd, Nullable Object[] args)throws BeanCreationException {if (logger.isTraceEnabled()) {logger.trace("Creating instance of bean " beanName "");}RootBea…

面试算法题精讲:最长公共子序列

面试算法题精讲&#xff1a;最长公共子序列 题面 题目来源&#xff1a;1143. 最长公共子序列 题目描述&#xff1a; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列&#xff08;LCS&#xff09;的长度。如果不存在公共子序列 &#xff0c;返回…

C++ ─── 匿名对象+变量的创建顺序

目录 1. 匿名对象&#xff08;临时对象&#xff09; 2. 编译器的优化 3.变量的创建与销毁 1. 匿名对象&#xff08;临时对象&#xff09; 我们先来看有名对象的创建 Date d1; Date d2(2024,4,27);匿名对象的创建 Date(2024,56,1); 生成了一个匿名对象&#xff0c;执行完Da…

MySQL之binlog归档日志

binlog&#xff08;二进制归档日志&#xff09; binlog 二进制日志记录保存所有执行过的修改操作语句&#xff0c;不保存查询操作。如果 MySQL 服务意外停止&#xff0c;可通过二进制日志文件排查&#xff0c;用户操作或表结构操作&#xff0c;从而来恢复数据库数据。启动 bin…

Vue的安装及使用教程【超详细图文教程】

一、安装Node.js 安装步骤详细见Node.js下载安装及环境配置 》https://blog.csdn.net/WHF__/article/details/129362462 二、安装vue ①安装 vue.js&#xff1a; npm install vue -g // -g为全局安装 注意&#xff1a;要以管理员身份运行cmd命令窗口&#xff01;&#xf…

深入浅出MySQL-02-【MySQL支持的数据类型】

文章目录 前言1.数值类型2.日期时间类型3.字符串类型3.1.CHAR和VARCHAR类型3.2.ENUM类型3.3.SET类型 4.JSON类型 前言 环境&#xff1a; Windows11MySQL-8.0.35 1.数值类型 MySQL中的数值类型&#xff0c;如下&#xff1a; 整数类型字节最小值最大值TINYINT1有符号 -128无…

从 Apache Doris 到 SelectDB Cloud:云原生架构下的弹性能力揭秘

随着云时代的到来&#xff0c;越来越多企业开始在公有云、私有云乃至 K8s 容器平台构建实时数据平台。云计算基础设施的革新&#xff0c;促使着数据仓库朝着云原生的方向发展。而用户日益复杂的业务负载和降本增效的需求&#xff0c;对于系统资源的精细化管理和成本效益等方面提…

64、二分-搜索二维矩阵

思路&#xff1a; 通过使用二分方式&#xff0c;对于每行进行二分&#xff0c;因为每行的最后一个数小于下一行的第一个数&#xff0c;我们就可以依次二分。首先取出行数N&#xff0c;然后从0-N进行二分&#xff0c;如果mid最后一个数小于目标值说明0-mid中没有&#xff0c;舍弃…

36 线程概念

本章重点 1.了解线程概念&#xff0c;理解线程与进程的区别与联系 2.学会现充控制&#xff0c;线程创建&#xff0c;线程终止&#xff0c;线程等待 3.了解现场分离与线程安全 4.学会线程同步 5.学会使用互斥量&#xff0c;条件变量&#xff0c;posix信号量&#xff0c;以及读写…

cnpm安装

npm install -g cnpm --registryhttps://registry.npmmirror.com # 注册模块镜像 npm set registry https://registry.npmmirror.com // node-gyp 编译依赖的 node 源码镜像 npm set disturl https://npmmirror.com/dist // 清空缓存 npm cache clean --force // 安装c…

Linux中的yum和gcc/g++

一、快速认识yum&#xff08;简单介绍&#xff09; 在Linux中&#xff0c;我们也要进行工具/指令/程序、安装、检查、卸载等等&#xff0c;需要使用到yum 在Linux中安装软件的方式&#xff1a; 源代码安装——交叉编译的工作rpm包直接安装yum/apt-get yum:yum是我们Linux预…