目标检测算法回顾之传统算法

article/2025/8/24 17:49:44

传统的目标检测算法

  • 总体回顾
    • 基于特征
    • 基于分割
  • 一般流程
  • 经典算法
    • Harr+Adaboost
    • 流程
      • Harr特征
      • Adaboost算法
    • HOG + SVM
      • 概述
      • 方法
      • HOG特征的优缺点
    • DPM
      • DPM特征
      • DPM流程
    • DPM vs HOG
  • 总结

说明:本文仅供学习

在这里插入图片描述
虽然传统的目标检测方法现在比较少用,但我们认为有必要了解其手工设计的特征,因为现在在工业和医学领域这些手工特征与深度学习方法的融合也带来了不错的效果。当然,我们的汇报仍然是以基于深度学习的方法为主。

总体回顾

基于传统的目标检测算法主要可以分为基于特征和基于分割两个方向。

基于特征

其中,基于特征的目标检测算法主要是通过找到对象的某种属性(可以是手工设计的特征也可以是算法提取的抽象特征)来实现检测与识别。
在这里插入图片描述
在传统的算法中,主要的特征如下图所示,有Harr特征、HOG特征、灰度特征、SIFT特征、SURF特征等。在这里插入图片描述

基于分割

而基于分割的目标检测算法则主要通过区域、颜色及边缘的特性来实现检测与识别。【对应的相关算法我PPT里面都有放,这里就不一一罗列啦🤨】
在这里插入图片描述

一般流程

在这里插入图片描述
📌 传统算法的一般处理流程包括以下六个步骤,其主要的思路就是:

  • 首先,利用滑动窗口或者选择性搜索等方法方法对一幅图像进行处理获取候选框;
  • 其次,对每个框提取特征(Harr、HOG…), 判断是不是目标,若判定为目标则同时记录其位置坐标(x,y,w,h)–定位;
  • 然后, 利用分类器(Adaboost、决策树)对目标进行分类–识别。
  • 最后,对分类识别的结果进行一系列的后处理操作,比如说NMS(非极大值抑制)来去除掉多余的候选框,得到最佳的物体检测位置。
    在这里插入图片描述

经典算法

在这里插入图片描述
📌 经典的传统检测算法主要有Viola Jones检测器,HOG检测器,基于部件的可变形模型(DPM)这三种。

  • Harr+Adaboost推荐资源:

    AdaBoost1 AdaBoost2 AdaBoost3 集成学习

  • HOG+SVM推荐资源:

    HOGSVM1

  • DPM推荐资源:

    DPM1 DMP2 DMP3 传统1

Harr+Adaboost

流程

Viola Jones检测器由三个核心步骤组成,即Haar-like特征和积分图、Adaboost分类器以及级联分类器。
在这里插入图片描述

Harr特征

Harr特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征,实际上就是一种梯度算工资,主要可以分为线性特征、边缘特征、点特征(中心特征)和对角线特征这四种特征。

在这里插入图片描述

Adaboost算法

AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年提出。其中,Bossting算法的本质就是集成学习。集成算法一般分为三种:Bagging,Boosting,Stacking(我们可以把它简单地看成并行,串行和树型)。

AdaBoost方法的自适应在于:前一个分类器分错的样本会被用来训练下一个分类器。AdaBoost方法是一种迭代算法,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率。每一个训练样本都被赋予一个权重,表明它被某个分类器选入训练集的概率。如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。通过这样的方式,AdaBoost方法能“聚焦于”那些较难分(更富信息)的样本上。虽然AdaBoost方法对于噪声数据和异常数据很敏感。但相对于大多数其它学习算法而言,却又不会很容易出现过拟合现象。
在这里插入图片描述

Bagging是把各个基模型的结果组织起来,取一个折中的结果;Boosting是根据旧模型中的错误来训练新模型,层层改进;Stacking是把基模型组织起来,注意不是组织结果,而是组织基模型本身,该方法看起来更灵活,也更复杂。因此,Adaboost算法基本原理就是将多个弱分类器(弱分类器一般选用单层决策树)进行合理的结合,使其成为一个强分类器。

HOG + SVM

概述

梯度直方图HOG(Histogram of Oriented Gradients)是法国人Dalal在2005年CVPR会议上提出的特征提取算法,并将其与 SVM 配合,用于行人检测。在这里插入图片描述

方法

HOG检测器是沿用了最原始的多尺度金字塔+滑窗的思路进行检测。为了检测不同大小的目标,通常会固定检测器窗口的大小,并逐次对图像进行缩放构建多尺度图像金字塔。为了兼顾速度和性能,HOG检测器采用的分类器通常为线性分类器或级联决策分类器等。
在这里插入图片描述
在图像的特征提取过程中,最重要的两个概念是不变性(包括平移不变性、旋转不变性、尺度不变性以及光照不变性等)和区分性(特征的表达能力)。为了兼顾二者的特点,HOG特征采用了如下的策略:将图像所在区域划分为很多小的连通区域,即细胞单元Cell,然后对Cell的梯度幅值和方向进行投票统计,形成基于梯度特性的直方图。除此之外,为了进一步增强其光照不变性以及非线性表达能力,HOG特征还首次引入了区块(Block)的概念,将相邻的Cell归并为一个Block,并在Block内对Cell特征进行局部归一化。归一化的块描述符叫做HOG描述子(feature descriptor)。将检测窗口中的所有块的HOG描述子组合成最终的特征向量。然后使用SVM分类器进行目标和非目标的二分类(检测)。

HOG特征的优缺点

  • 优点:核心思想是所检测的局部物体外形能够被梯度或边缘方向的分布所描述,HOG能较好地捕捉局部形状信息,对几何和光学变化都有很好的不变性;HOG是在密集采样的图像块中求取的,在计算得到的HOG特征向量中隐含了该块与检测窗口之间的空间位置关系。

  • 缺点:特征描述子获取过程复杂,维数较高,导致实时性差;很难处理遮挡问题,人体姿势动作幅度过大或物体方向改变也不易检测(这个问题后来在DPM中采用可变形部件模型的方法得到了改善);由于梯度的性质,HOG对噪点相当敏感,在实际应用中,在block和Cell划分之后,对于得到各个区域,有时候还会做一次高斯平滑去除噪点。

DPM

DPM特征

DPM是基于经典手工特征的检测算法发展的顶峰,连续获得VOC(Visual Object Class)07,08,09年的检测冠军。其中,DPM特征的设计可以看作HOG特征的改进版,其取消了原HOG中的块(Block),只保留了单元(Cell),如左图所示,假设一个8*8的Cell,将该细胞单元与其对角线临域的4个细胞单元做归一化操作,所以效果和原HOG特征非常类似。计算梯度方向时可以计算有符号(0-360°)或无符号(0-180°)的梯度方向,有些目标适合使用有符号的梯度方向,而有些目标适合使用无符号的梯度,作为一种通用的目标检测方法,DPM与原HOG不同,采用了有符号梯度和无符号梯度相结合的策略。
在这里插入图片描述

具体来说:首先,只提取无符号的HOG梯度,将会产生4*9=36维特征,将其看成一个49的矩阵,分别将行和列分别相加,最终将生成4+9=13个特征向量,得到13维特征,基本上能达到HOG特征36维的检测效果。为了提高那些适合使用有符号梯度目标的检测精度,作者再对18个有符号梯度方向求和得到18维向量,也加进来,这样,一共产生13+18=31维梯度特征。实现了很好的目标检测。

DPM流程

DPM算法针对目标的多视角问题,采用了多组件(Component)的策略,针对目标本身的形变问题,采用了基于图结构(Pictorial Structure)的部件模型策略。此外,将样本的所属的模型类别,部件模型的位置等作为潜变量(Latent Variable),采用多示例学习(Multiple-instance Learning)来自动确定。具体的流程如下图所示:
在这里插入图片描述

对于任意一张输入图像,提取其DPM特征图,然后将原始图像进行高斯金字塔上采样放大原图像,然后提取其DPM特征图(2倍分辨率)。将原始图像的DPM特征图和训练好的Root filter做卷积操作,从而得到Root filter的响应图。对于2倍图像的DPM特征图,和训练好的Part filter做卷积操作,从而得到Part filter的响应图。然后对其精细高斯金字塔的下采样操作。这样Root filter的响应图和Part filter的响应图就具有相同的分辨率了。然后将其进行加权平均,得到最终的响应图。亮度越大表示响应值越大。

DPM采用了传统的滑动窗口检测方式,通过构建尺度金字塔在各个尺度搜索。DPM的主要思想可简单理解为将传统目标检测算法中对目标整体的检测问题拆分并转化为对模型各个部件的检测问题,然后将各个部件的检测结果进行聚合得到最终的检测结果,即“从整体到部分,再从部分到整体”的一个过程。下图为某一尺度下的行人检测流程,即行人模型的匹配过程。某一位置与根模型/部件模型的响应得分,为该模型与以该位置为锚点(即左上角坐标)的子窗口区域内的特征的内积。也可以将模型看作一个滤波算子,响应得分为特征与待匹配模型的相似程度,越相似则得分越高。左侧为根模型的检测流程,跟模型响应的图中,越亮的区域代表响应得分越高。右侧为各部件模型的检测过程。首先,将特征图像与模型进行匹配得到部件模型响应图。然后,进行响应变换:以锚点为参考位置,综合考虑部件模型与特征的匹配程度和部件模型相对理想位置的偏离损失,得到的最优的部件模型位置和响应得分。

DPM vs HOG

在这里插入图片描述
DPM算法优点
方法直观简单;运算速度块;适应动物变形;

DPM算法缺点
1、性能一般,无法适应大幅度的旋转,稳定性很差;

2、激励特征人为设计,工作量大;
这种方法不具有普适性,因为用来检测人的激励模板不能拿去检测小猫或者小狗,所以在每做一种物件的探测的时候,都需要人工来设计激励模板,为了获得比较好的探测效果,需要花大量时间去做一些设计,工作量很大。

3、无法适应大幅度的旋转,稳定性很差。

总结

在这里插入图片描述
传统特征虽然在某些方面可以帮助深度学习模型精度的提高,但对于传统检测算法来说,特征的设计与选择极大程度上依赖于人工,其准确度、客观性、鲁棒性与泛化性都受到了一定的制约。同时,传统的算法大多采用滑动窗口算法,其计算时间效率低下,为多流程的步骤处理,处理复杂且准确度低。因此,随着算力及数据的发展,传统的检测算法明显无法满足人们的需求。


http://chatgpt.dhexx.cn/article/xa67ik9D.shtml

相关文章

目标检测算法发展综述

目标检测算法 一、目标检测算法二、目标检测算法存在的问题三、目标检测算法的基本流程四、传统的目标检测算法 1.Viola-Jones(VJ人脸检测算法)2.HOG SVM(行人检测,使用Opencv实现)3.DPM(物体检测&#xf…

目标检测算法研究

1、目标检测基本介绍 1.1、项目结构 1.2、目标检测的算法分类 1.2.1两步走的目标检测:先进行区域推荐、而后进行目标分类 代表算法 :R-CNN、 SPP-net、Fast-R-CNN、Faster R-CNN 1.2.2、端到端的目标检测:采用一种网络一步到位 代表&#x…

目标检测算法分类

目标检测算法分类: 1、两步走的目标检测:先找出候选的一些区域,再对区域进行调整分类 代表:R-CNN、SPP-net、Fast R-CNN、Faster R-CNN 2、端到端的目标检测:采用一个网络一步到位,输入图片,输…

目标检测算法

目标检测算法 一、目标检测算法二、目标检测算法存在的问题三、目标检测算法的基本流程四、传统的目标检测算法1.Viola-Jones(VJ人脸检测算法)2.HOG SVM(行人检测,使用Opencv实现)3.DPM(物体检测&#xff…

目标检测总结:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

目标检测总结:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD 转自:七月在线实验室 一、目标检测常见算法 object detection,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。所以,object detection要解…

目标检测算法总结

一、基于候选区域的目标检测器 滑动窗口检测器 根据滑动窗口从图像中剪切图像块,把图像块处理成固定大小。随后输入CNN分类器中,提取特征。最后使用SVM分类器识别种类,并且用线性回归器得到边框。 选择性搜索selective search 首先将每个…

万字长文详解目标检测算法,超大超全(2022最新)

摘要 1 概述 2 目标检测回顾 2.1 two-stage 2.2 one-stage 3 目标检测配方 3.1 基础概念 3.1.1 损失函数 3.1.2 Anchor-based 和 Keypoint-based 3.1.3 NMS 3.2 目标检测中的挑战 4 目标检测中的Head 4.1 ThunderNet 4.2 You Only Look Once(YOLO) 4.3 Single Sh…

常见经典目标检测算法

1、目标检测基本概念 1.1 什么是目标检测 目标检测(Object Dectection)的任务是找出图像中所有感兴趣的目标(物体),确定他们的类别和位置。 1.2 目标检测要解决的核心问题 除图像分类外,目标检测要解决的核心问题是&#xff1a…

目标检测的各种算法总结

这里是引用腾讯云博客文章:一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD 文章目录 一、目标检测常见算法二、传统的目标检测算法2.1 从图像识别的任务说起2.2 物体检测(Object Detection) 三、候选区域/窗 深度…

【NLP】预训练模型——GPT1

背景 废话不多说,先把三篇论文链接放出来:GPT1:Improving Language Understanding by Generative Pre-Training、GPT2:Language Models are Unsupervised Multitask Learners、GPT3:Language Models are Few-Shot Learners。李沐老师也在B站上放了介绍G…

ResNet50修改网络适应灰度图片并加载预训练模型

此博文是修改https://blog.csdn.net/jiacong_wang/article/details/105631229 这位大大的博文而成的,自己根据自己的情况稍微加了点东西 要修改的地方有4处 1.修改网络第一层,把3通道改为1 法一:直接在定义网络的地方修改 self.conv1 nn.…

TD-LTE R8 预编码学习笔记

预编码: MIMO系统中,当发射端通过某种方式获得一定的CSI(瞬时值,短期或中长期统计信息),就能通过一定的预处理方式对各个数据流加载的功率,速率乃至发射方向进行优化,并通过预处理在…

Task2-基于MobileaNet的预训练模型优化

##项目背景 mobilenet_v2_0.75_224 预训练模型是基于224224的训练集图片训练而来,需要通过imagenet 100M数据集把模型训练成适用于448448的预训练模型 ##思考的问题 1、预训练模型怎么使用和导入 2、如何在服务器上训练 3、如何把训练集弄出来 4、如何评价训练效果…

波束形成 基于对角加载的稳健自适应波束形成

前言 本人刚刚入门阵列信号处理的波束形成方向,因此仿真过程中可能会出现错误,如果诸位大佬发现仿真过程中有错误,请不吝指出谢谢。 对角加载(Diagonal Loading, DL)是一种比较常用的提高Capon波束形成器鲁棒性的方法,通过在样本协…

Unity大场景数据加载及优化方案

前段时间,有几个虚拟仿真公司跟我请教关于大地形的加载优化问题,它们使用的引擎都是自己研发的,引擎对于开发者来说,大同小异,它们的基本构造是一样的,关键是在于解决问题的方法,正是基于这个前…

预训练模型

目录 一、BERT1、贡献1.1 MLM任务1.2 NSP任务 2、实验细节 二、ALBERT1、贡献1.1 词向量分解1.2 层参数共享1.3 SOP任务 三、 ERNIE1、贡献2、实验细节2.1 语料2.2 MLM任务2.3 DLM任务 四、DistilBERT1、贡献2、实验细节 五、RoBERTa1、贡献2、实验细节2.1 动态mask2.2 去掉NSP…

改动模型后,加载部分预训练权重文件

加载部分预训练权重文件 最近在做姿态估计相关内容,需要将Hrnet模型修改,Hrnet是基于coco数据集训练的,coco数据集是17个关节点,而我需要的是15个关节点,在将数据集标好训练之后,发现由于数据量比较小&…

Pointer 0x0, not in getPreloadedDrawables android 系统资源预加载

Android系统在启动的时候,会对一些系统资源进行预加载。这样不仅使得应用程序在需要时可以快速地访问这些资源,还使得这些资源能够在不同应用程序之间进行共享。在硬件加速渲染环境中,这些预加载资源还有进一步优化的空间。Android系统提供了…

OpenCV | 基本矩阵操作

起因 在2013年1月份发行的OpenCV 2.4.4中,对Java的支持也正式发布。同时也有支持Python。 环境配置 这里的环境配置十分简单,在这里,操作系统64位,所以选这个,将里面的opencv_java342.dll负责到你本地下载的JDK的bin目录下,和JDK下的JRE目录下的bin目录下。 我使用的…

Android应用程序UI硬件加速渲染的预加载资源地图集服务(Asset Atlas Service)分析

我们知道,Android系统在启动的时候,会对一些系统资源进行预加载。这样不仅使得应用程序在需要时可以快速地访问这些资源,还使得这些资源能够在不同应用程序之间进行共享。在硬件加速渲染环境中,这些预加载资源还有进一步优化的空间…