“目标检测”任务基础认识
“目标检测”任务基础认识
1.目标检测初识
目标检测任务关注的是图片中特定目标物体的位置。
目标检测最终目的:检测在一个窗口中是否有物体。
eg:以猫脸检测举例,当给出一张图片时,我们需要框出猫脸的位置并给出猫脸的大小,如下图所示。
![]()
2.一个检测任务包含两个子任务
- 一个是分类任务:输出这一目标的类别信息(分类标签);
- 另一个是定位任务:输出目标的具体位置信息(用矩形框表示,包含矩形框左上角或中间位置的x、y坐标和矩形框的宽度与高度)。
3.算法发展历程
与计算机视觉领域里大部分的算法一样,目标检测也经历了从传统的人工设计特征加浅层分类器的方案,到基于深度学习的端到端学习方案的演变。而在深度学习中,很多任务都是采用**端到端(end-to-end)**的方案,即输入一张图,输出最终想要的结果,算法细节和学习过程全部交给神经网络,这一点在目标检测领域体现得非常明显。
4.目标检测步骤
不管是用清晰的分步骤处理还是用深度学习的end-to-end方法完成一个目标检测任务,一个系统一定会遵循3个步骤。

如图5.1所示。
- 第一步选择检测窗口
- 第二步提取图像特征
- 第三步设计分类器
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
相关文章:
“目标检测”任务基础认识
“目标检测”任务基础认识 1.目标检测初识 目标检测任务关注的是图片中特定目标物体的位置。 目标检测最终目的:检测在一个窗口中是否有物体。 eg:以猫脸检测举例,当给出一张图片时,我们需要框出猫脸的位置并给出猫脸的大小,如…...
springboot+vue的宠物咖啡馆平台(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 主要内容:毕业设计(Javaweb项目|小程序|Pyt…...
LaWGPT—基于中文法律知识的大模型
文章目录 LaWGPT:基于中文法律知识的大语言模型数据构建模型及训练步骤两个阶段二次训练流程指令精调步骤计算资源 项目结构模型部署及推理 LawGPT_zh:中文法律大模型(獬豸)数据构建知识问答模型推理训练步骤 LaWGPT:基…...
一文弄明白KeyedProcessFunction函数
引言 KeyedProcessFunction是Flink用于处理KeyedStream的数据集合,它比ProcessFunction拥有更多特性,例如状态处理和定时器功能等。接下来就一起来了解下这个函数吧 正文 了解一个函数怎么用最权威的地方就是 官方文档 以及注解,KeyedProc…...
alibabacloud学习笔记06(小滴课堂)
讲Sentinel流量控制详细操作 基于并发线程进行限流配置实操 在浏览器打开快速刷新会报错 基于并发线程进行限流配置实操 讲解 微服务高可用利器Sentinel熔断降级规则 讲解服务调用常见的熔断状态和恢复 讲解服务调用熔断例子 我们写一个带异常的接口:...
Code Composer Studio (CCS) - Licensing Information
Code Composer Studio [CCS] - Licensing Information 1. Help -> Code Composer Studio Licensing Information2. Upgrade3. Specify a license fileReferences 1. Help -> Code Composer Studio Licensing Information 2. Upgrade 3. Specify a license file …...
uniapp引入微信小程序直播组件
方法1.小程序跳转视频号直播 微信小程序跳转到视频号 1.1微信开放平台注册 https://open.weixin.qq.com/ 2.2 方法2.使用小程序提供的直播组件 参考 微信小程序跳转视频号直播 小程序直播官方文档 https://developers.weixin.qq.com/miniprogram/dev/component/live-play…...
五个简单的C#编程案例
案例一:Hello, World! csharp using System; class Program { static void Main() { Console.WriteLine("Hello, World!"); } } 这个案例是最基础的C#程序,它打印出“Hello, World!”到控制台。每个C#程…...
Zlibrary低调官宣2024年最新网址,国内可直接访问,免费下载海量电子书籍
最近过节,文章也没怎么写,明天要上班了,今天写篇文章做个预热。 春节期间,“知识大航海”群里,有位群友分享了一个Zlibrary的最新地址,感谢这位群友妹妹的热心分享,这个地址国内可以直接访问。 …...
Android 开机启动
一、添加权限 <uses-permission android:name"android.permission.RECEIVE_BOOT_COMPLETED"/> 二、写一个广播接收器 public class BootReceiver extends BroadcastReceiver {Overridepublic void onReceive(Context context, Intent intent) {if(Intent.ACT…...
二叉树相关算法需了解汇总-基础算法操作
文章目录 144.二叉树的前序遍历145.二叉树的后序遍历94.二叉树的中序遍历102.二叉树的层序遍历107.二叉树的层次遍历倒序199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个右侧节点指针104.二叉树的最大深度111.二叉…...
万字干货-京东零售数据资产能力升级与实践
开篇 京东自营和商家自运营模式,以及伴随的多种运营视角、多种组合计算、多种销售属性等数据维度,相较于行业同等量级,数据处理的难度与复杂度都显著增加。如何从海量的数据模型与数据指标中提升检索数据的效率,降低数据存算的成…...
探索前端框架的世界:一场前端之旅
在网络世界中,网页开发领域的一颗明星是前端框架。这些框架为开发者提供了丰富的工具和技术,帮助他们构建出漂亮、高效的网页应用。现在,让我们随着小明的故事一起来探索一下吧。 小明的梦想 小明是一位年轻有为的前端开发者,他…...
class complex
class complex from C_OOP_base1_houjie complex.h #ifndef __COMPLEX__ // 防卫式声明 guard; 名称自定义 #define __COMPLEX__// 0. forward declarations class complex;complex& __doapl (complex* ths, const complex& r);// 1. class declarations class compl…...
数据库系统概论整理与总结
数据库系统概论 第一章:绪论 四个基本概念 四个概念 数据:Data 数据库:DataBase 数据库管理系统:DBMS 数据库系统:DBS 打个比喻,比如说菜鸟物流: Data:快递 DB:物流厂库 DBMS:对…...
打通新势力NAS权限壁垒,绿联私有云安装Portainer,实现更强大的Docker功能
打通新势力NAS权限壁垒,绿联私有云安装Portainer,实现更强大的Docker功能 对于国产新势力NAS来说,因为安全问题并没有完全开放SSH权限,所以还不能和传统NAS那样直接通过Docker run命令来部署容器,同时,对于…...
前端基础自学整理|DOM树
DOM,文档对象模型(Document Object Model),简单的说,DOM是一种理念,一种思想,一个与系统平台和编程语言无关的接口,一种方法, 使 Web开发人员可以访问HTML元素!不是具体方…...
RedisDesktopManager无法远程连接到Linux虚拟机中Redis的docker容器的一种解决方案
1.问题描述 除了RedisDesktopManager以外,使用java代码也无法连接到centos7虚拟机中的docker容器中的Redis ,按照网上其他博主的解决方案,在排除Linux防火墙问题,端口映射问题,redis.conf配置文件问题以后,…...
HarmonyOS 权限 介绍
权限说明 权限等级 根据权限对于不同等级应用有不同的开放范围,权限类型对应分为以下三种,等级依次提高。 normal权限 normal 权限允许应用访问超出默认规则外的普通系统资源。 这些系统资源的开放(包括数据和功能)对用户隐私以及…...
算法训练营day33(补),复习二叉树1
// 889. 根据前序和后序遍历构造二叉树 // 前序中左右 后序遍历左右中 func constructFromPrePost(preorder []int, postorder []int) *TreeNode { if len(preorder) 0 { return nil } root : &TreeNode{} root.Val preorder[0] //前序数组去掉root节点 preorder pre…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

