02目标检测-传统检测方法

目录

一、目标学习的检测方法变迁及对比

二、 基于传统手工特征的检测算法的定义

三、传统主要手工特征与算法

Haar特征与 人脸检测算法 - Viola-Jones(了解)

HOG特征与 SVM 算法(了解)(行人检测、opencv实现)

SIFT特征与SIFT算法(了解)

DPM(物体检测)(了解)

四、传统目标检测算法基本流程

五、 基于传统手工特征的检测算法的问题

六、基于手工特征的传统算法的优缺点

优点:

缺点:


一、目标学习的检测方法变迁及对比

       “目标检测“是当前计算机视觉和机器学习领域的研究热点。从Viola-Jones Detector、DPM等冷兵器时代的智慧到当今RCNN、YOLO等深度学习土壤孕育下的GPU暴力美学,整个目标检测的发展可谓是计算机视觉领域的一部浓缩史。整个目标检测的发展历程已经总结在了下图中:

        可以看出,在2012年之前,在目标检测领域还是以传统手工特征的检测算法为主,但是随着卷积神经网络(CNN)在2012年的兴起,目标检测开始了在深度学习下的暴力美学。在深度学习下,目标检测的效果比传统手工特征效果好太多。直至今日,基于深度学习的检测算法依然是目标检测的主流。

    虽然深度学习算法在目标检测中比传统手工特征优秀太多,但是我依然不能忘记传统算法给我们带来的帮助,本文记录了我学习目标检测算法的开始,深入讲述一下传统算法在目标检测的原理和效果。

前置知识:

  • 特征提取过程常采用计算机视觉、模式识别中基于颜色、基于纹理、基于形状、基于语义等关于图像特征表示的方法。
  • 计算机视觉中常见的特征提取方法有底层特征、中层特征、高层特征三大类,常用前两类。

         底层特征(如颜色、纹理、形状等中层特征基本特征,一般是手工设计出来的特征)
         中层特征(基于底层特征进行特征高层特征学习和挖掘后的特征)
         高层特征(基于底层或者中层进行进行特征学习和挖掘后的特征,如人是否戴帽子)

  • 对于提取出的特征使用分类器进行分类判定

        (二分类)判定当前窗口中是否背景还是要检测的目标,
        (多分类)判断是否为背景,如果不是背景判断是哪一类。

二、 基于传统手工特征的检测算法的定义

       在目标检测算法的发展过程中基于手工特征的传统算法曾经是主流。这些传统算法通过设计和提取手工设计的特征来识别目标物体,包括 Haar 特征、HOG 特征、SIFT特征等。本文将深入探讨目标检测算法中基于手工特征的传统算法介绍其原理、优缺点以及在计算机视觉中的应用。


       基于手工特征的传统目标检测算法是一类早期的目标检测算法,它通过人工设计和提取特征来识别目标物体。这些特征通常是基于图像的局部信息,如边缘、纹理、颜色等。在特征提取的基础上,传统算法通常使用分类器或检测器来判断图像中是否存在目标物体,并给出目标的位置和大小

三、传统主要手工特征与算法

Haar特征与 人脸检测算法 - Viola-Jones(了解)

  • Harr特征提取
  • 训练人脸分类器(Adaboost算法等)
  • 滑动窗口 (问题:互动窗口的步长好大小)

       Haar 特征是一种基于图像矩阵的特征,最早应用于人脸检测领域。Viola-Jones 算法是一种基于 Haar 特征的快速人脸检测算法,它采用Adaboost 分类器来进行特征选择和级联分类。该算法在人脸检测任务中取得了显著的性能和效率。

       2004年Paul Viola和MichaelJones在CVPR上发表了一篇跨时代意义的文章《Robust Real-Time Face Detection》,后人将文章中的人脸检测算法称之为Viola-Jones(VJ)检测器。VJ检测器在17年前极为有限的计算资源下第一次实现了人脸的实时检测,速度是同期检测算法的几十甚至上百倍,极大程度地推动了人脸检测应用商业化的进程。VJ检测器的思想深刻地影响了目标检测领域至少10年的发展。

       VJ检测器采用了最传统也是最保守的目标检测手段——滑动窗口检测即在图像中的每一个尺度和每一个像素位置进行遍历,逐一判断当前窗口是否为人脸目标。这种思路看似简单,实则计算开销巨大。VJ人脸检测之所以器能够在有限的计算资源下实现实时检测,其中有三个关键要素:多尺度Haar特征的快速计算,有效的特征选择算法以及高效的多阶段处理策略

       在多尺度Harr特征快速计算方面,VJ检测器使用积分图对特征提取进行加速。积分图可以使特征计算量与窗口的尺寸无关,同时也避免了处理多尺度问题时建图像金字塔这一耗时的过程。

       在特征选择算法方面,与传统意义上的手工特征不同的是,VJ检测器中使用的Harr特征并非是人为事先设计好的。VJ检测器使用了过完备的随机Haar特征,并通过Adaboost算法从一个巨大的特征池(约180k维)中进行特征选择,选取出对于人脸检测最有用的极少数几种特征从而降低不必要的计算开销。

       在多阶段处理方面,作者提出了级联决策结构,并将其形象地称之为“瀑布”(Cascades)。整个检测器由多级Adaboost决策器组成,每一级决策器又由若干个弱分类决策桩(Decision Stump)组成。瀑布的核心思想是将较少的计算资源分配在背景窗口,而将较多的计算资源分配在目标窗口:如果某一级决策器将当前窗口判定为背景,则无需后续决策就可继续开始下一个窗口的判断。

Haar特征:主要是差分,有四种基本特征:

value=白 - 黑

  • 第一种表示相邻像两个素点,4个方向进行差值,0度,180度,45度,135度,
  • 第二种线性特征,宽的区域表示两个像素点。
  • 第三种中心特征,相邻区域同中心点进行差分。像LDP特征。
  • 第四种多个像素点彼此的关系。

    最终选取所抽取的直方图,差分运算本身就是在梯度求解。因此Haar特征属于文理特征。

Adaboost算法:属于机器学习中的集成学习方法。

  • 初始化样本权重w,样本权重之和为1
  • 训练弱分类器
  • 更新样本权重(分类错误的样本加大权重)
  • 循环第二步
  • 结合各个分类器结果,进行投票

滑动窗口方法:

       首先对输入图像进行不同窗口大小的滑窗进行从左往右、从上到下的滑动。每次滑动时候对当前窗口执行分类器(分类器是事先训练好的)。如果当前窗口得到较高的分类概率,则认为检测到了物体。对每个不同窗口大小的滑窗都进行检测后,会得到不同窗口检测到的物体标记,这些窗口大小会存在重复较高的部分,最后采用非极大值抑制(Non-Maximum Suppression, NMS)的方法进行筛选。
 

HOG特征与 SVM 算法(了解)(行人检测、opencv实现)

  • 提取HOG特征
  • 训练SVM分类器
  • 利用滑动窗口提取目标区域,进行分类判断
  • NMS
  • 输出检测结果

       HOG( Histogram of Oriented Gradients) 特征是一种描述图像局部梯度方向的特征,广泛应用于行人检测和物体识别。结合 SVM(支持向量机)分类器,HOG 特征能够在复杂场景下实现目标检测任


SIFT特征与SIFT算法(了解)

  • 灰度化 + Gamma 变换 (对值进行根号求解)
  • 计算梯度map (计算每一个点在x、y方向的梯度值,利用梯度值到梯度夹角,即得到tan = x/y,求方向角)
  • 图像划分成小的cell,统计每个cell梯度直方图
  • 多个cell组成一个block,特征归一化 (拼接)
  • 多个block串联,并归一化
  • 与量化角度和cell大小有关系(cell越小,梯度维度越大),通常维度会很大。

       SIFT( Scale-Invariant Feature Transform)特征是一种基于局部极值点和尺度空间的特征,主要用于图像匹配和目标识别。SIFT 算法通过提取关键点和特征描述子,实现对图像中目标的定位和识别。

DPM(物体检测)(了解)

DPM特征提取

  • 有符号梯度
  • 无符号梯度

      有符号:整个角度空间表示为18维向量,0 ~ 360度
      无符号:0 ~ 180度,每个cell得到27维直方图
      HOG中多维情况是采用PCA对HOG进行降维。
      DPM是采用一种逼近PCA的方法进行近似处理,就是对每一个cell所提取的27维直方图进行求和表示,水平方式累加求和4个值,垂直求和27个值,在进行拼接得到最终31维的特征向量。累加方式速度有所提升。


DPM(物体检测)

  • 计算DPM特征图
  • 计算相应图(roof filter和part filter) (就是当前区域可能为目标区域的一个值,理解为能量分布)
  • Latent SVM分类器训练
  • 检测识别

四、传统目标检测算法基本流程

流程一:

       给定一张待检测图片,将这张图片作为检测算法的输入,然后对图片采用滑动窗口方式进行进行候选框的提取,然后对每个候选框中的图像进行特征提取(特征的提取主要基于前面的前置知识中介绍方式提取),并用分类器进行特征分类的判定,得到一系列的当前检测目标的候选框,这些候选框可能存在重叠的状况,此时使用非极大值抑制算法NMS对候选框进行合并或过滤,得到的最后的候选框就是最终的检测目标即输出结果。

流程二:
       给定一张图片作为输入,采用特征提取+目标框回归的方法来进行目标区域的提取,最后同样利用NMS进行候选框的合并,最终得到目标输出结果。

注意:

  • 流程一:适用于传统的目标检测方法基于深度学习的目标检测方法
  • 流程二:适用于基于深度学习的目标检测方法

五、 基于传统手工特征的检测算法的问题

  • 1.通过传统方法设置特征,一方面很难设计,另一方面设计出来的特征往往存在各种问题,比如对于某一个特定条件不适应,即不鲁棒,效率低
  • 2.通过滑动窗口的方式来提取目标框,并对目标框进行分类判定的这种策略,在提取滑动窗口时的流程是非常繁琐耗时

六、基于手工特征的传统算法的优缺点

优点:

  • a.相对简单:基于手工特征的传统算法通常较为简单和易于实现不需要大量的训练样本
  • b.较低的计算复杂性:由于特征提取过程通常较为简单,传统算法在计算上较为高效。
  • c.可解释性强:手工特征是由人工设计的,具有较好的可解释性有助于分析算法的性能和结果

缺点:

  • a.依赖于特征设计:基于手工特征的传统算法的性能很大程度上依赖于特征设计的质量和选择。不同的任务需要不同的特征,因此需要耗费大量的人力和时间来进行特征设计和调优。
  • b.不适应复杂场景:传统算法通常对于复杂场景的处理能力较弱特别是在目标尺度、形状变化较大或存在遮挡的情况下
  • c.无法处理大规模数据:随着数据规模的增大,基于手工特征的传统算法的计算复杂性和识别性能将受到限制。

上一篇:01目标检测-问题引入

下一篇:03目标检测-传统方法与深度学习算法对比

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

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

相关文章

redis--windows配置--redis基础

写在前面: 文章目录 win安装配置密码配置服务服务已经存在 可视化工具运行类型基础类型 帮助文档命令通用命令string命令hashlistsetsortedset win安装 下载地址 然后一路next就可以了。 记得添加到环境变量 配置密码 在目录打开配置文件 搜索requirepass …

Fluent实现大量气泡的随机分布案例

1、问题介绍 气液两相管流在石油、化工、能源、制冷等工业领域中大量存在。气泡在生存发展过程中往往会导致噪声和引起管道振动,自来水管路中如有空气时往往会产生啸叫声和管道剧烈振动。掌握流动过程中气泡的生成、发展及其破裂等动力规律是控制气液两相流气动噪声…

C++qt day8

1.用代码实现简单的图形化界面&#xff08;并将工程文件注释&#xff09; 头文件 #ifndef MYWIDGET_H #define MYWIDGET_H //防止头文件冲突#include <QWidget> //父类的头文件class MyWidget : public QWidget //自定义自己的界面类&#xff0c;公共继承…

【pygame】01 pygame制作游戏的最小系统

这次使用sublimepython进行pygame的游戏开发&#xff0c;目的是学习使用python的基本操作和常用模块 添加一个文件夹到工程 最小系统 1.导入使用的模块 2.初始化&#xff1a;pygame.init函数包含了各个子模块的初始化&#xff0c;可以重复调用 3.pygame.display.set_mode返…

<OpenCV> Mat属性

OpenCV的图像数据类型可参考之前的博客&#xff1a;https://blog.csdn.net/thisiszdy/article/details/120238017 OpenCV-Mat类型的部分属性如下&#xff1a; size&#xff1a;矩阵的大小&#xff0c; s i z e ( c o l s , r o w s ) size(cols,rows) size(cols,rows)&#xf…

Java手写选择排序和算法案例拓展

Java手写选择排序和算法案例拓展 1. Mermanid代码表示思维导图解释实现思路原理 #mermaid-svg-uD2bB5QreLEC3dsv {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-uD2bB5QreLEC3dsv .error-icon{fill:#552222;}#merm…

浅谈机器视觉目前的发展现状

#【中秋征文】程序人生&#xff0c;中秋共享# 机器视觉是一个快速发展的行业&#xff0c;被广泛应用于许多领域&#xff0c;包括制造业、农业、医药行业、包装印刷业等。在制造业中&#xff0c;机器视觉技术被广泛应用于自动化生产线上&#xff0c;用于检测、识别、测量和定位…

数据治理在数字化转型中的重要性

在当今数字化时代&#xff0c;企业的成功与否往往取决于它们对数据的处理和管理能力。数据治理作为数字化转型的关键组成部分&#xff0c;对于帮助企业有效管理和利用数据&#xff0c;实现业务增长和创新至关重要。本文将探讨为什么数字化转型必须进行数据治理&#xff0c;并介…

新能源汽车驱动电机的基本知识

学习目标:了解电机的基本知识。能力目标:培养学生搜集和整理相关资料的能力。素质目标:培养学生良好的职业素养。额定电店.在夫见定条件下电池工作的*于佳 电压知识准备术语和定义。 (1)驱动电机系统 通过有效的控制策略将动力蓄电池提供的直流电转化为交流实现电机的正转以及反…

【Shiro】入门概述

1.是什么 Apache Shiro 是一个功能强大且易于使用的 Java 安全(权限)框架。Shiro 可以完 成&#xff1a;认证、授权、加密、会话管理、与 Web 集成、缓存 等。借助 Shiro 您可以快速轻松 地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。 官网&…

LeetCode 每日一题 2023/9/11-2023/9/17

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 9/11 630. 课程表 III9/12 1462. 课程表 IV9/13 2596. 检查骑士巡视方案9/14 1222. 可以攻击国王的皇后9/15 LCP 50. 宝石补给9/16 198. 打家劫舍9/17 9/11 630. 课程表 II…

去耦电路设计应用指南(一)MCU去耦设计介绍

&#xff08;一&#xff09;MCU去耦设计介绍 1. 概述2. MCU需要去耦的原因2.1 去耦电路简介2.2 电源噪声产生的原因2.3 插入损耗2.4 去耦电路简介 参考资料来自网上&#xff1a; 1. 概述 我们经常看到单片机或者IC电路管脚常常会放置一个或者多个陶瓷电容&#xff0c;他们主要…

9.3.5网络原理(应用层HTTP/HTTPS)

一.HTTP: 1. HTTP是超文本传输协议,除了传输字符串,还可以传输图片,字体,视频,音频. 2. 3.HTTP协议报文格式:a.首行,b.请求头(header),c.空行(相当于一个分隔符,分隔了header和body),d.正文(body). 4. 5.URL:唯一资源描述符(长度不限制). a. b.注意:查询字符串(query stri…

【Selenium】webdriver.ChromeOptions()官方文档参数

Google官方Chrome文档&#xff0c;在此记录一下 Chrome Flags for Tooling Many tools maintain a list of runtime flags for Chrome to configure the environment. This file is an attempt to document all chrome flags that are relevant to tools, automation, benchm…

Windows10设置开启自启动任务

Windows10设置开机自启动任务 在日常的工作中经常会遇到需要给系统设置一个开机自启动的任务&#xff0c;例如开机自启动浏览器&#xff0c;开机自启动代理程序等等&#xff0c;这个时候就需要给系统设置一个开机自启动任务&#xff0c;本文主要介绍一下设置开机自启动任务的几…

使用 Messenger 跨进程通信

什么是Messenger Messenger 也是IPC的方案之一&#xff0c;是基于消息的跨进程通信。基于消息是什么意思&#xff1f;Handler是我们最常用的消息机制&#xff0c;所以 Messenger 对于使用者来说就像是使用 Handler。实际上 Messenger 就是 AIDL 的上层封装而已&#xff0c;它们…

微服务全栈:深入核心组件与开发技巧

文章目录 1.服务注册与发现1.1. 客户端注册 (ZooKeeper)1.2. 第三方注册 (独立的服务Registrar)1.3. 客户端发现1.4. 服务端发现1.5. Consul1.6. Eureka1.7. SmartStack1.8. Etcd 2. API 网关2.1. 请求转发2.2. 响应合并2.3. 协议转换2.4. 数据转换2.5. 安全认证 3. 配置中心3.…

什么是交换分区以及如何创建交换分区

介绍 交换分区是Linux中的一项功能,可提供虚拟内存空间和多种好处。它允许操作系统有效地处理内存需求。因此,交换分区提高了系统稳定性、响应能力和繁重工作负载处理。 本指南将探讨交换分区及其优缺点,并概述在 Linux 系统上创建和管理交换分区的步骤。 先决条件 运行 …

PHP自己的框架2.0结合容器技术(重构篇二)

目录 1、使用容器实现框架加载类运行 2、 创建框架容器类core/fm/Di.php 3、框架使用容器类来执行public/index.php 4、运行效果还是一样 1、使用容器实现框架加载类运行 2、 创建框架容器类core/fm/Di.php 什么是容器&#xff1f;容器就相当于盒子&#xff0c;把很多类放里…

NTIRE2023-RTSR-Track2 冠军方案详解

编辑 | Happy 首发 | AIWalker 链接 | https://mp.weixin.qq.com/s/JQ5g9yn_OdjR8hi_tWc4jA arXiv:2305.02126 , cvpr2023 , code , video 本文了一个实时&轻量图像超分方案Bicubic&#xff0c;它通过下采样模块降低图像分辨率以减少计算量&#xff0c;在网络尾部采用…