“目标检测”任务基础认识

“目标检测”任务基础认识

1.目标检测初识

目标检测任务关注的是图片中特定目标物体位置

目标检测最终目的:检测在一个窗口中是否有物体

eg:以猫脸检测举例,当给出一张图片时,我们需要框出猫脸的位置并给出猫脸的大小,如下图所示。

2.一个检测任务包含两个子任务

  • 一个是分类任务:输出这一目标的类别信息(分类标签);
  • 另一个是定位任务:输出目标的具体位置信息(用矩形框表示,包含矩形框左上角或中间位置的x、y坐标和矩形框的宽度与高度)。

3.算法发展历程

与计算机视觉领域里大部分的算法一样,目标检测也经历了从传统的人工设计特征加浅层分类器的方案,到基于深度学习的端到端学习方案的演变。而在深度学习中,很多任务都是采用**端到端(end-to-end)**的方案,即输入一张图,输出最终想要的结果算法细节和学习过程全部交给神经网络,这一点在目标检测领域体现得非常明显。

4.目标检测步骤

不管是用清晰的分步骤处理还是用深度学习的end-to-end方法完成一个目标检测任务,一个系统一定会遵循3个步骤
在这里插入图片描述
如图5.1所示。

  1. 第一步选择检测窗口
  2. 第二步提取图像特征
  3. 第三步设计分类器

4.1检测窗口选择

  • 方法:当在不同的距离下检测不同大小的目标时,最简单也最直观的方法就是用图像金字塔+各种尺度比例的框进行暴力搜索:从左到右,从上到下滑动窗口,然后利用分类方法对目标框进行识别。
  • 问题:如图5.3所示,在一个像素点处选择了长宽比例不同的框。这种利用窗口滑动来确定候选框的方法可以实现我们的预期目标,但是不难想到,这种方法在使用过程中会产生大量的无效窗口,浪费了很多计算资源,而且无法得到精确的位置。目标检测想要得到发展,必须优化这个步骤

4.2特征提取

有了候选窗口后,需要提取图像的特征进行表达,传统的有监督方法和以CNN为代表的无监督特征学习方法都可以派上用场。

仍然以人脸检测算法为例,在传统的人脸检测算法中,有几类特征是经常被使用的。

Haar特征LBP特征HOG特征
定位是经典的V-J框架使用的基本特征是传统人脸检测算法中广泛使用的纹理特征在物体检测领域应用非常广泛
表达表征的是局部的明暗对比关系可以表达物体丰富的纹理信息
特点由于Haar 特征提取速度快,能够表达物体多个方向的边缘变化信息,并且可以利用积分图进行快速计算,因此得到了广泛应用采用中心像素和边缘像素的灰度对比,可以表达物体丰富的纹理信息,同时因为使用的是相对灰度值,因此对均匀变化的光照有很好的适应性通过对物体边缘进行直方图统计来实现编码,相对于Haar 和LBP 两个特征,HOG 的特征表达能力更强、更加通用,被广泛用于物体检测、跟踪和识别等领域
  • 除了以上常用的特征外,还有其他非常优秀的传统特征描述,包括SIFT 和SURF等,这些都是研究人员通过长时间的学术研究和实际项目验证得来的,虽然在比较简单的任务中可以取得很好的结果,但是设计成本很高
  • 传统的检测算法通过对不同的特征进行组合调优,从而增加表达能力
    • 其中以ACF为代表的行人检测方法,组合了20多种不同的传统图像特征。

4.3分类器

分类器是目标检测的最后一步,经常使用的分类器有Adaboost、SVM 和Decision Tree等。接下来对这些分类器进行简要介绍。

1. Adaboost分类器
  • Adaboost是一种迭代的分类方法,在OpenCV开源库中使用的人脸检测框架的分类器正是Adaboost 分类器
  • 核心思想:在很多情况下,一个弱分类器的精度并不高,Adaboost算法的核心思想就是在很多分类器中,自适应地挑选其中分类精度更高的弱分类器,并将其进行组合,从而实现一个更强的分类器

Eg:

目标:当我们要检测一个纯红色的物体时,它的颜色为(255,0,0),但是现在只有3个灰度级别的分类器,各自对应RGB的3种颜色。我们知道,所要检测的物体必须满足3个条件,R 通道灰度值为255,G、B的通道灰度值为0。

问题:此时,使用任何一个灰度级别的分类器都无法完成这个任务,同时会出现很多的误检。例如红色分类器,在最理想的情况下就是学习到了R 的通道必须为255,但是G、B通道学习不到,因此它会检测到1×256×256种颜色,其中,256×256-1种为误检,检测精度为1/(256×256),等于0.0000152。
解决:当我们组合3种分类器,并使其各自达到最好的学习状态时,就可以完全学习到R=255、G=0、B=0这样的特征。我们在实际使用这3个分类器的时候,可以使用串联的方法让图片依次经过3个分类器进行分类过滤,如图5.4所示。

结果:这样虽然每一个弱分类器的检测精度不到万分之一,但最终的检测精度可以是100%,这就是Adaboost算法的核心思想。
总结:Adaboost通过弱弱联合实现了强分类器,在使用的时候通常采用顺序级连的方案。

  • 在级联分类器的前端:是速度较快、性能较弱的分类器,它们可以实现将大部分负样本进行过滤
  • 在级联的后端:是速度较慢、性能较强的分类器,它们可以实现更大计算量,精度也更高的检测

在这里插入图片描述

2. SVM分类器(简略介绍)

支持向量机(Support Vector Machine,SVM)是贝尔实验室的Vapnik 等研究人员在对统计学习理论进行了三十多年研究的基础上提出来的机器学习算法,它让统计学习理论第一次对实际应用产生了重大影响,具有非常重要的意义。

SVM 是基于统计学习VC理论与结构风险极小化原理的算法,它将基于最大化间隔获得的分类超平面思想与基于核技术的方法结合在一起,通过部分数据构建模型,对新的数据进行预测并作出分类决策,表现出了很好的泛化能力

SVM还可以通过引入核函数将低维映射到高维,从而将很多线性不可分的问题转化为线性可分问题,这在图像分类领域中的应用非常广泛。以SVM 为分类器和HOG 为特征的行人检测系列算法是其中非常经典的算法

3.Decision Tree决策树

决策树是一种树形结构,每个内部节点都表示一个属性测试,每个分支都会输出测试结果,每个叶子节点代表一种类别。

Eg:以图5.6所示的二叉树为例,从树根开始分叉,区分是人脸或者非人脸,左边是人脸,右边是非人脸。当进入第一个二叉树分类器节点判断为非人脸时,则直接输出结果,结束任务;如果是人脸,则进入下一层再进行判断。二叉树通过学习每个节点的分类器来构造决策树,最终形成一个强分类器总体的思路与级联分类器非常相似

改进:为了提升决策树的能力,我们可以对决策树进行集成,也就是将其组合成随机森林。假设刚刚提到的决策树是一棵树,对于人脸检测这样的任务,分别学习10棵树,每棵树采用不同的输入或者特征,最终以10棵树的分类结果进行投票,获取多数表决的结果将作为最终的结果,这是一种非常简单但行之有效的方法。

在使用深度学习来完成各项任务尤其是参加各类比赛的时候,一定会使用不同的模型和不同的输入进行集成。例如,常见的是使用不同裁剪子区域进行预测,或者使用不同的基准模型进行预测,最后取平均概率的方法,测试结果相比之前可以得到很大的提升。

参考文献:

《深度学习之图像识别 核心算法与实战案例 (全彩版)》 言有三 著

出版社:清华大学出版社

出版时间:2023年7月第一版(第一次印刷)

ISBN:978-7-302-63527-7

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Meta 发布 MMCSG (多模态智能眼镜对话数据集)

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

FFmpeg的HEVC解码器源代码学习笔记-1

一直想写一个HEVC的码流解析工具,看了雷神264码流解析工具,本来想尝试模仿写一个相似的265码流分析工具,但是发现265的解码过程和结构体和264的不太一样,很多结构体并没有完全暴露出来,没有想到很好的方法获得量化参数…

HAL STM32 HW I2C DMA + SSD1306/SH1106驱动示例

HAL STM32 HW I2C DMA SSD1306/SH1106驱动示例 📍硬件I2C DMA驱动参考:https://blog.csdn.net/weixin_45065888/article/details/118225993 🔖本工程基于STM32F103VCT6,驱动程序独立,可以移植到任意STM32型号上使用。…

VSCODE中使用Django处理后端data和data models

链接: Python and Django tutorial in Visual Studio Code MVC的理解 在实际的程序中采用MVC的方式进行任务拆分。 Model(模型)负责封装应用程序的数据和业务逻辑部分。Model包含数据结构,数据处理逻辑以及相关的操作方法&#…

如何在debian上实现一键恢复操作系统?

在Debian或任何其他Linux发行版上实现一键恢复操作系统,需要创建一个系统镜像或快照,并设置一个简单的方法来从该镜像恢复。以下是创建和恢复系统的基本步骤: 1. 创建系统镜像: 使用像dd,rsync或专门的备份工具&#…

Kubernetes 卷存储 NFS | nfs搭建配置 原理介绍 nfs作为存储卷使用

1、NFS介绍 NFS(Network File System)是一种分布式文件系统协议,允许客户端远程访问服务器上的文件,实现数据共享。它整合多个存储设备为统一文件系统,方便数据存储和管理,支持负载均衡和故障转移&#xf…

【专利】专利缴费清单与汇款金额不一致的处理方法

缴纳专利年费时,很容易算错滞纳金。比如有个专利年费滞纳金应交690,结果我算成了660,报给财务转账660。第二天补录缴费信息时,汇款金额660,然后缴费清单填写总是690无法修改,导致无法进行下一步&#xff01…

【AI大模型】ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的高级应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮,可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

【MySQL】学习连接查询和案例演示

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-KOxr1rwR9cQTlydJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

win32 汇编读文件

做了2个小程序,没有读成功;文件打开了; .386.model flat, stdcalloption casemap :noneinclude windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib include Comdlg32.inc includelib …

探索海洋世界,基于YOLOv7【tiny/l/x】不同系列参数模型开发构建海洋场景下海洋生物检测识别分析系统

前面的博文中,开发实践过海底相关生物检测识别的项目,对于海洋场景下的海洋生物检测则很少有所涉及,这里本文的主要目的就是想要开发构建基于YOLOv7不同系列参数模型的海洋场景下的海洋生物检测识别系统。 前文已有相关实践,感兴…

C#知识点-16(计算器插件开发、事件、递归、XML)

计算器插件开发 1、Calculator.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Calculator_DLL {//用来明确所有插件开发人员的开发规范public abstract class Calculator{public int N…

部署安装有道QanyThing

前提条件: 1、win10系统更新到最新的版本,系统版本最好为专业版本 winver 查看系统版本,内部版本要大于19045 2、CPU开启虚拟化 3、开启虚拟化功能,1、2、3每步完成后均需要重启电脑; 注:windows 虚拟…

(done) 如何判断一个矩阵是否可逆?

参考视频:https://www.bilibili.com/video/BV15H4y1y737/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 这个视频里还暗含了一些引理 1.若 AX XB 且 X 和 A,B 同阶可逆,那么 A 和 B 相似。原因&#xff1…

Redis 工具类 与 Redis 布隆过滤器

Redis 工具类 1. 核心依赖 <!--redis--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency><groupId>com.google.guava…

如何修改docker容器的端口映射

要修改 Docker 容器的端口映射&#xff0c;你需要停止并删除现有的容器&#xff0c;然后使用新的端口映射重新运行容器。以下是详细步骤&#xff1a; 停止容器&#xff1a; 使用 docker stop 命令停止正在运行的容器。替换 <container_id> 为你要停止的容器的 ID 或者容器…

Python3零基础教程之Python解释器与开发环境搭建

大家好&#xff0c;我是千与编程&#xff0c;硕士毕业于北京大学&#xff0c;曾先后就职于字节跳动&#xff0c;京东等互联网大厂&#xff0c;目前在编程导航知识星球担任星球嘉宾&#xff0c;著有《AI算法毕设智囊袋》&#xff0c;《保姆级带你通关秋招教程》两大专栏。 今天开…

AndroidStudio 2024-2-21 Win10/11最新安装配置(Ktlion快速构建配置,gradle镜像源)

AndroidStudio 2024 Win10/11最新安装配置 教程目的&#xff1a; (从安装到卸载) &#xff0c;针对Kotlin开发配置&#xff0c;gradle-8.2-src/bin下载慢&#xff0c;以及Kotlin构建慢的解决 好久没玩AS了,下载发现装个AS很麻烦,就觉得有必要出个教程了(就是记录一下:嘻嘻) 因…

Java Web演化史:从Servlet到SpringBoot的技术进程及未来趋势

引言 在快速演进的IT世界里&#xff0c;Java Web开发始终屹立不倒&#xff0c;它不仅承担着历史的厚重&#xff0c;也始终面向未来。 自诞生之日起&#xff0c;Java Web技术就在不断地进化&#xff0c;以适应不同时代的需求。 本文将回顾Java Web开发的重要里程碑&#xff0c;…

Linux环境安装Git(详细图文)

说明 此文档Linux环境为&#xff1a;Ubuntu 22.04&#xff0c;本文档介绍两种安装方式&#xff0c;一种是服务器能联网的情况通过yum或apt命令下载&#xff0c;第二种采用源码方式安装。 一、yum/apt方式安装 1.yum方式安装Git 如果你的服务器环境是centos/redhot&#xff…