当前位置: 首页 > news >正文

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目标检测-传统方法与深度学习算法对比

相关文章:

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

目录 一、目标学习的检测方法变迁及对比 二、 基于传统手工特征的检测算法的定义 三、传统主要手工特征与算法 Haar特征与 人脸检测算法 - Viola-Jones(了解) HOG特征与 SVM 算法(了解)(行人检测、opencv实现) SIFT特征与SIFT算法(了解) DPM&#…...

RP-母版 流程图 发布和预览 团队项目

母版 创建一个模版,可根据形态不同引用不同母版。若不想母版受页面变化影响,也可以在引用时脱离母版 创建母版: 1) 转换为母版 2)在母版页面中添加 母版拖放行为 拖放行为,在母版名称上右键, 、 任意…...

【第200篇原创文章】解决低于1%概率出现的芯片VPSS模块跑飞的问题

在发布SDK内测的时候,我们发现在切换视频分辨率的时候有低概率出现VPSS模块跑飞的情况,概率低于1%,试个两三百次,能出1~2次。切换视频分辨率这个功能在安防产品上也确实存在需求,网络带宽不大好的地方分辨率可以适当下…...

微信小程序——生命周期详解(代码解读)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

多分类中混淆矩阵的TP,TN,FN,FP计算

关于混淆矩阵,各位可以在这里了解:混淆矩阵细致理解_夏天是冰红茶的博客-CSDN博客 上一篇中我们了解了混淆矩阵,并且进行了类定义,那么在这一节中我们将要对其进行扩展,在多分类中,如何去计算TP&#xff0…...

Linux系统:OpenSSH7.4p升级到9.0p(服务器漏洞)

清华大学开源软件镜像站下载地址: https://mirrors.tuna.tsinghua.edu.cn/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz 一、升级 0、安装Telnet (1)为防止安装失败,无法用ssh做远程连接,因此先安装telnet yum…...

【面试刷题】——C++的特点简单说明

C是一种通用的编程语言,具有许多强大的特点,以下是其中一些主要特点的简单说明: 面向对象编程(OOP): C支持面向对象编程,允许将数据和操作封装在类中,提高了代码的可维护性和重用性…...

C2基础设施威胁情报对抗策略

威胁情报是指在信息安全和安全防御领域,收集、分析和解释与潜在威胁相关的信息,以便预先发现并评估可能对组织资产造成损害的潜在威胁,是一种多维度、综合性的方法,其通过信息的收集、分析和研判,帮助组织了解可能对其…...

差异备份详细说明(InsCode AI 创作助手)

差异备份详细说明 差异备份(Differential Backup)是一种备份策略,它与增量备份类似,但有一些关键区别。差异备份备份的是自上一次完整备份以来的所有更改数据,而不是自上一次备份以来的所有更改。这意味着差异备份文件…...

flask要点与坑

简介 Flask是一个用Python编写的Web应用程序框架,该框架简单易用、模块化、灵活性高。 该笔记主要记录Flask的关键要点和容易踩坑的地方 Flask 日志配置 Flask 中的自带logger模块(也是python自带的模块),通过简单配置可以实现…...

EasyUI combobox 实现搜索(模糊匹配)功能

很简单的一个下拉框搜索模糊匹配功能&#xff0c;在此记录&#xff1a; 1&#xff1a;页面实现&#xff1a; <select class"easyui-combobox" name"combobox" id"combobox" style"width:135px;height:25px;" headerValue"请选…...

Postman的高级用法一:重新认识postman核心模块

本请求示例来自于免费天气API&#xff1a; 实况天气接口API开发指南 未来一天天气预报api - 天气API 关于Postman的核心模块 全局变量请求接口请求体预处理脚本 类似beforeTest&#xff0c;在发起请求前的预执行逻辑&#xff0c;通常是生成一些动态变量值 测试用例模块 测试者…...

git命令的操作

git命令操作及命令大全 1.创建一个新的本地仓库&#xff1a;2.添加文件到仓库&#xff1a;3.远程仓库操作&#xff1a;4.分支操作&#xff1a;5.git命令大全 1.创建一个新的本地仓库&#xff1a; 使用命令git init在本地目录中创建一个新的git仓库。 2.添加文件到仓库&#x…...

超级详细 SQL 优化大全

1、MySQL的基本架构 1&#xff09;MySQL的基础架构图 左边的client可以看成是客户端&#xff0c;客户端有很多&#xff0c;像我们经常你使用的CMD黑窗口&#xff0c;像我们经常用于学习的WorkBench&#xff0c;像企业经常使用的Navicat工具&#xff0c;它们都是一个客户端。右…...

数据治理-数据存储和操作-数据库组织模型

数据库存储系统提供了一种将数据放入磁盘并管理和处理这些数据所需指令的封装方法&#xff0c;因此开发人员可以简单地使用指令来操作数据。数据库通常以3种形式进行组织&#xff1a;层次性、关系型和非关系型&#xff1b;这种归类并不是完全互斥的。一些数据库系统可以同时读写…...

IDEA最新激 20活23码

人狠话不多 大家好&#xff0c;最近Intelli Idea官方的校验规则进行了更新&#xff0c;之前已经成功激20活23的Idea可能突然无法使用了。 特地从网上整理了最新、最稳定的激20活23码分享给大家&#xff0c;希望可以帮助那些苦苦为寻找Idea激20活23码而劳累的朋友们。 本激23…...

flutter产物以aar形式嵌入android原生工程

以前做的项目中&#xff0c;flutter都是作为module嵌入原生工程中&#xff0c;新公司项目却是以aar形式嵌入android工程&#xff0c;这种优点是原生工程不必配置flutter环境也能跑了&#xff0c;这里记录一下简单步骤。 创建一个flutter module 通过android studio创建一个fl…...

C++语法

1、基本语法和特性 1、基本语法 对象 - 对象具有状态和行为。例如&#xff1a;一只狗的状态 - 颜色、名称、品种&#xff0c;行为 - 摇动、叫唤、吃。对象是类的实例。类 - 类可以定义为描述对象行为/状态的模板/蓝图。方法 - 从基本上说&#xff0c;一个方法表示一种行为。一…...

antd react 文件上传只允许上传一个文件且上传后隐藏上传按钮

antd react 文件上传只允许上传一个文件且上传后隐藏上传按钮 效果图代码解析 效果图 代码解析 import { Form, Upload, message } from antd; import { PlusOutlined } from ant-design/icons; import { useState, useEffect } from react; import { BASE_URL } from /utils/…...

C语言指针进阶(2)

大家好&#xff0c;我们今天继续来分享指针进阶的内容。 目录 5.函数指针 6.函数指针数组 7. 指向函数指针数组的指针 8. 回调函数 5.函数指针 顾名思义函数指针里面存的就是函数的地址了。 那我们通过一段代码来理解函数指针&#xff1a; #include<stdio.h> int Add…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...