人脸识别入门学习(二):VJ人脸检测器的基本组成

2023-10-14 22:40

本文主要是介绍人脸识别入门学习(二):VJ人脸检测器的基本组成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        入门学习第一篇(人脸识别的基本概念)介绍了人脸识别的各个基本环节和基本概念,但同时又指出了,只用这些简单的概念是无法精准却高效地进行人脸识别。VJ人脸检测器的出现对人脸识别具有重大意义,极大地加快了人脸识别的速度,后人对人脸识别的研究大都基于VJ人脸检测器,对VJ中的基本环节做改进。

VJ人脸检测器的关键?

  1. 采用Harr特征来描述窗口,并具备高效率的特征计算方法:积分图
  2. 高效的分类器学习方法:AdaBoost
  3. 高效的分类策略设计:级联结构的设计

 

Harr特征是什么?

        Harr特征是在窗口中选取一个矩形区域,将其分为黑白两块,并分别对这两块中所有像素点的灰度求和,再将两个灰度和相减,得到一个Harr特征的值。

        Harr反映了图像上某块区域的相对明暗变化,能为区分人脸和非人脸提供有效信息。例如眼睛就比周围的皮肤更暗一些,通过Harr特征就可以很有效的表现出来。但是由于Harr特征需要多次计算矩阵区域内的像素灰度和,因此其速度其实并不快。所以引入了积分图来加快Harr特征的计算。

 

积分图如何加快Harr特征计算?

        积分图是一张和输入图像大小一样的图,但积分图上每个像素点所保存的信息不再是原图像上像素点的灰度,而是从左上角到这个点所选定的矩形区域内所有像素点的灰度之和。例如:

 

        采用积分图有两个好处:一是计算某区域所有像素点的灰度之和时,不再需要考虑区域大小,只需要进行有限次加减运算即可;二是由于相邻窗口之间有着极大的重叠部分,积分图可以比较大量的重复计算,只在最开始时计算一次即可。

 

AdaBoost如何加快分类速度?

        人脸检测的速度也与分类的速度有关。分类的速度取决于分类器的复杂度,也就是将特征向量转化为该窗口的类别标签的计算过程复杂度。复杂的分类器判断准确率高,但是时间代价也更大;简单的分类器时间代价小,但准确率会有所下降。AdaBoost兼顾了速度和准确度,既然要速度,那就是用简单的分类器,又同时要准确度,那就将多个简单的分类器组合起来,聚弱为强,将多个弱分类器组合成一个强分类器。即保证了准确度又提高了效率。这就是使用AdaBoost方法来训练分类器的核心理念。

 

级联结构是什么?

        造成人脸识别速度慢的根本原因在于输入规模过大,一张图片动辄需要检测几十上百万个窗口,而且其中大部分窗口是不含人脸的。如果我们能通过一种方法来粗略的剔除掉一些显而易见不包含人脸的窗口,那么我们需要仔细检测的窗口数就会减少很多,效率提高很多。基于这样的想法,VJ采用了一种级联的结构来达到逐步减少输入规模的目的。

 

        VJ人脸检测器将多个分类器级联起来,从前往后分类器的复杂程度逐渐增大。每个窗口都先在前面简单的分类器中进行判断,若判定为不是人脸窗口,则直接丢弃,不发给后面的分类器,每一级分类器都可能会剔除掉一些窗口,使得系统只需要花费较小的代价就能排除大部分的非人脸窗口,以此来达到逐步降低输入规模的目的。这样的方式比所有窗口都使用一种分类器要更加灵活高效。

 

        后人基于VJ人脸检测器做了大量的改进,包括对Harr特征的改进、对分类器及学习方法AdaBoost的改进、级联结构的改进等。还研究出一系列的判断人脸监测系统性能的指标。

这篇关于人脸识别入门学习(二):VJ人脸检测器的基本组成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/213627

相关文章

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2