Viola-Jones人脸检测详解

在人脸检测中,Viola-Jones算法是一种非常经典的算法,该算法在2001年的CVPR上提出,因其高效快速的检测而被广泛使用。

这个算法用来检测正面的人脸图像,对于侧脸图像的检测不是很稳健。

算法可以被分为以下几个部分:

  • 利用Haar特征描述人脸特征
  • 建立积分图像,利用该图像快速获取几种不同的矩形特征
  • 利用Adaboost算法进行训练
  • 建立层级分类器
  • 非极大值抑制

1 利用Haar特征描述人脸特征

人脸有一些特征,一张正脸图像中,人眼睛区域会比脸颊区域暗,嘴唇区域也会比四周的区域暗,但鼻子区域会比两边脸颊要亮。

基于这些特征,VJ使用了四种矩形特征,如下图所示

这里写图片描述

其中A,B为边界特征,C为细线特征,D为对角线特征

那么,Haar特征是如何作用于正脸图像的呢?

这里写图片描述

如上图所示,Haar特征分别对白色区域和黑色区域的像素求和,然后求这两种和的差;

这可以通过图像卷积实现。

 

2 积分图像

对于积分图像中的任何一点,该点的积分图像值等于位于该点左上角所有像素之和

表达式如下:

s(x,y)=\sum_{x'\leq x}\sum_{y'\leq y}f(x',y')

积分图像满足如下公式:

s(x,y)=f(x,y)+s(x-1,y)+s(x,y-1)-s(x-1,y-1)

积分图像同时还满足:

上图为一张原始图像,其标示了四个区域:A, B , C ,D

1 处像素点对应的在积分图像中的值为:sum(A);

2 处像素点对应的在积分图像中的值为:sum(A+B);

3 处像素点对应的在积分图像中的值为:sum(A+C);

4 处像素点对应的在积分图像中的值为:sum(A+B+C+D);

则:

区域D所有的像素点灰度值之和为:

sum(A+B+C+D) - sum(A+C) - sum(A+B) + sum(A)
 

3 获取图像特征

VJ在论文中提到,24*24大小的图像可以产生约160000个矩形特征,那么160000是怎么得到的呢?

VJ使用的矩形特征可以归为三类:

二邻接矩形,横竖两种情况,如矩形特征A,B,最少需要2个像素点表示

三邻接矩形,如矩形特征C,最少需要3个像素点表示,也有横竖两种情况

四邻接矩形,如矩形特征D,最少需要4个像素点表示,只有一种情况

对于24*24大小的图像,每种邻接矩形可能的大小为:

二邻接矩形(最小1*2):长度每次加2,宽度加1

1*2,1*4,1*6,...1*24

2*2,2*4,2*6,...,2*24

...

24*24

三邻接矩形(最小1*3):长度加3,宽度加1

1*3,1*6,1*9,...1*24

2*3,2*6,2*9,...,2*24

...

24*24

四邻接矩形(最小2*2):长度加2,宽度加2

2*2,2*4,2*6,...1*24

4*2,4*4,4*6,...4*24

...

24*24

根据图像卷积,一个W*H的图像与m*n的filter卷积,得到的图像大小为:(W-m+1)*(H-n+1)(默认stride为1)

新图像的每一个像素点的值就是原图一个m*n的local patch 与m*n的filter的乘积和。

新图像有多少个像素点,原图就有多少个m*n的矩形。

这么多矩形,可以通过编程算出,借用未雨绸缪的代码。

这段代码中,横竖矩形窗口的数量是一样的,代码里只计算一种,然后乘以2就行了。

import numpy as npa = np.zeros((3, 2), dtype=int) 
Count = np.zeros(3, dtype=int) 
a[0, :] = [1, 2]
a[1, :] = [1, 3]
a[2, :] = [2, 2]
Img_size = 24for ii in range(3):rec_h = a[ii, 0]rec_w = a[ii, 1]for xx in range(rec_h, Img_size+1, rec_h):for yy in range(rec_w, Img_size+1, rec_w):Count[ii] = Count[ii]+(Img_size-xx+1)*(Img_size-yy+1)print Count[ii]Total = Count[0]*2+Count[1]*2+Count[2]
print ("Total: ", Total)

最后可以得到:

二邻接矩形:43200

三邻接矩形:27600

四邻接矩形:20736

最终总的矩形特征为:43200×2+27600×2+20736=162336

所以一个24*24的图像最终可以产生162336个矩形特征。

并不是所有特征都是有用的,那么如何提取出有用的特征呢?

AdaBoost特征分类器具有特征选择的能力。

 

4 利用AdaBoost算法进行训练

4.1 AdaBoost分类器

AdaBoost 将一系列的弱分类器通过线性组合,构成一个强分类器,如下所示:

h(x)是一个强分类器,h_j(x)是一个弱分类器,其为一个简单的阈值函数:

\theta _j为阈值,s_j\in \left\{-1,1 \right\}\alpha _j为系数。

4.2 训练弱分类器

计算所有训练样本的特征值,并将其从小到大排序,随机选取一个特征值作为阈值,

把所有元素分为两部分,小于阈值的一部分分类为人脸,大于阈值的一部分分类为非人脸。

如下图所示,红色表示人脸,蓝色表示非人脸。

假如有5个样本,前两个为人脸,后三个为非人脸,用11000表示。

如果阈值在第一个之前,通过弱分类器判定为:00000,有两个误差,

如果阈值在第一个和第二个之间,通过弱分类器判定为:10000,有1个误差,

如果阈值在第二个和第三个之间,通过弱分类器判定为:11000,有0个误差,

依次类推,这样共有6个误差,然后从中找到一个误差最小的当成阈值,

这样就训练好了一个最优的弱分类器。

4.3 训练强分类器

假设有N个训练样本(x^i,y^i),其中有m个正样本,l个负样本,如果x^i是人脸图像,

y^i=1, 否则y^i=-1

其步骤如下:

每一级分类器使用的训练集中的负样本,都是上一级被错分的,即false positive,误检率或假阳性。

这使得下一级分类器更加关注那些更难的(容易被错分的)样本。

 

5 级联分类器(cascade of classifiers)

在正常的图像中,人脸区域只是占了很小的一部分,如果使用所有的特征进行训练的话,运算量非常大。

级为了简化任务,把若干个adaboost 分类器级联起来,一开始使用少量的特征将大部分的非人脸区域剔除掉,后面再利用更复杂的特征将更复杂的非人脸区域剔除掉。

这里写图片描述

如果级联分类器的识别率(true positive rate)为D,误识率(false positive rate)为F, 

第 i 层的分类器的识别率为d_i, 误识率为f_i,

则:

D=\prod_{i=1}^{K}d_i

F=\prod_{i=1}^{K}f_i

其中: K 为分类器的个数

假如每一级的分类器,都具有非常高的检测率(99.9%),

同时误检率也保持相当高(50%)。

那么,如果级联20个这样的小adaboost分类器,

人脸的识别率有:

但是误检率有:

5.1 级联分类器的训练

论文中给出了一种很有效的方法

  • 设定每一层最大的可接受误检率 f, 和每一层最小的检测率 d.
  • 设定级联分类器的总体误检率F_{target}
  • 初始化总体误检率为F_{target}=1,识别率D=1,循环计数器 i=0
  • 循环,如果当前 F 大于 F_{target} 时,继续增加一层adaboost分类器
  • 在训练每一层分类器时,如果目前该层的特征没有达到该层的 f_i 标准,继续添加新的特征。添加新特征时,持续降低该特征的阈值(一般而言,高阈值的分类器的检测率和误检率都会比较低),直到该层分类器的检测率d_i>d,然后更新D_i=d_i*D_{i-1}

在论文中,VJ分类器一共有38层,含有6060个特征,前7层的特征数为:2->10->25->25->50->50->50

 

6 非极大值抑制(NMS)

在人脸识别中,一张脸会出现非常多的窗口,如下图所示:

假设有N个窗口,根据分类器的分类概率从小到大排序,概率最大的框记为Z

非极大值抑制的工作步骤如下:

  • 从最大概率矩形框Z开始,分别判断其它框与X框的重叠度是否大于设定的阈值
  • 假设其中的B,C框超过了阈值,就扔掉B,C,并保留Z框
  • 从剩下的矩形框中,选择概率最大的(假设为Y),然后判断其它框与X框的重叠度是否大于设定的阈值,大于扔掉,并保留框Y
  • 一直重复这个过程,直到最后一个框

论文中有些地方不够详细,可能比较符合微软研究院的风格吧。

相关链接

论文传送门:Viola-Jones人脸检测

AdaBoost算法:集成算法-AdaBoost

 

本文参考了论文原文和网上的资料,是笔者自己对Viola-Jones算法的理解,可能会有些偏差,请读者指正。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国的高铁世界第一,为何汽车却和德国、日本差距很大?

来源:中国经济大讲堂摘要:靠引进技术发展,可以换来制造技术,建成一定规模、一定水平的体系。但我们在抓住机遇、引进技术发展的同时,或者发展的后期,等我们有了市场,有了钱之后,应该…

硬核干货|揭示波士顿动力机器人背后的专利技术(上)

来源:超凡知识产权,机器人大讲堂整理发布摘要:如果说在腿足机器人领域里,有一个让人闻之色变的变态企业,那就非波士顿动力莫属了。深耕几十年的技术积累加上“不谙世事”的科研态度,使得BD一直保持在腿足机…

(Python+Tensorflow)编程踩坑集锦

(PythonTensorflow)编程踩坑集锦 1 开发环境安装 推荐视频:https://www.icourse163.org/learn/PKU-1002536002?tid1452937471#/learn/content?typedetail&id1229556595&cid1246770451&replaytrue 1.1 Tensorflow2安装过程(Win10平台&am…

复盘亚马逊从优秀到卓越的24年

来源:方证证券4月18日,据报道,亚马逊公司计划在今年7月中旬关闭其在中国的本土电商业务,将业务重点转移至更有盈利空间的海外购和云服务上。对此,亚马逊方面4月18日回应澎湃新闻记者称,“明确的是&#xff…

深度!移动机器人(AGV)产业链全分析

来源:广证恒生、乐晴智库精选产业链:下游需要求旺盛带动下游产业链发展 移动机器人(AGV)是工业机器人的一种。它由计算机控制,具有移动、自动导航、多传感器控制、网络交互等功能,在实际生产中最主要的用途是搬运,可以…

英国前首相:为什么欧洲没有诞生互联网巨头?

David William Donald Cameron(戴维威廉唐纳德卡梅伦)见面会现场来源:世界科技创新论坛英国当地时间2019年4月12日,世界科技创新论坛伦敦峰会成功举行,本次峰会特别邀请了出身牛津大学、英国近两百年历史上最年轻的首相…

IIS解决 上传文件大小限制

目的&#xff1a;通过配置文件和IIS来解决服务器对上传文件大小的限制 1&#xff1a;修改配置文件&#xff08;默认为4M 值的大小根据自己情况进行修改&#xff09; <httpRuntime maxRequestLength"2048000" /> 2&#xff1a;修改IIS配置 打开C:\Windows\Syst…

脑内世界模型:脑科学基础上的意识问题哲学解说

来源&#xff1a;《华侨大学学报》哲学社会科学版2018年第5期作者&#xff1a;方圆&#xff08;中国科学院大学人文学院博士后研究人员&#xff09;本文旨在以当今时代脑科学研究结论为基础&#xff0c;在哲学层面回答“意识是什么”这一问题&#xff0c;并试图给出一种在科学与…

直击5G的机遇与挑战,全新商业模式、规模化经济效益、最新技术进展…全解读...

来源&#xff1a;TechRepublic、物联网智库编译摘要&#xff1a;报告指出&#xff0c;5G将改善用户体验&#xff0c;带来新的应用以及新的商业模式&#xff0c;产生显著的经济效益&#xff0c;但同时&#xff0c;5G的发展也面临着许多不可避免的挑战。毫无疑问&#xff0c;5G是…

simulink仿真学习(实现半波整流、方波输出) day1

** simulink仿真学习常用模块及具体案例实现&#xff08;第一天&#xff09; ** simulink简介 Simulink是美国Mathworks公司推出的MATLAB中的一种可视化仿真工具。Simulink是一个模块图环境&#xff0c;用于多域仿真以及基于模型的设计。它支持系统设计、仿真、自动代码生成…

深度报告解密华为汽车业务!布局三大领域,对标世界级Tier1

来源&#xff1a;智东西摘要&#xff1a;华为进军汽车电子领域&#xff0c;定位世界级Tier1供应商。汽车电子产业链 Tier1 系统集成厂商目前处于国际寡头垄断的市场格局&#xff0c;全球前十大汽车电子供应商拥有 70%市场占有率。即使国内市场也被博世、大陆、电装等国际 Tier1…

simulink仿真学习(关系运算及逻辑模块、离散时间积分模块)day2

1.关系运算模块&#xff08;应用实例&#xff09; 关系运算分为单目运算和双目运算&#xff0c;单目运算左侧输入为一个变量&#xff0c;双目运算左侧输入为两个变量。输出可能逻辑真或逻辑假。其中&#xff0c;逻辑真为1&#xff0c;逻辑假为0。 下图为双目关系运算的逻辑关…

保研之旅(中科院空天院、武汉大学、华南理工大学、 北京理工大学、中科院国家空间科学中心)

保研之旅&#xff08;总结过往&#xff0c;启程未来&#xff09;目录个人背景5月 中科院空天信息创新研究院信息方向7月 武汉大学测绘遥感信息工程国家重点实验室7月 北京理工大学雷抗所7月 华南理工大学电子信息学院7月中科院国家空间科学中心往年去向最后结语目录 个人背景 …

这5家纳米技术公司正在推动医疗检测的变革

来源&#xff1a;资本实验室纳米技术自发明已来&#xff0c;已经在多个领域得到应用。特别是在医疗领域&#xff0c;纳米医学已经成为现代医疗的一个重要发展方向。目前&#xff0c;纳米技术已经成功地用于各种疾病的检测与治疗&#xff0c;美国FDA也已经批准了超过60种含有纳米…

simulink学习仿真(微分模块、传递函数模块使用、波特图频率特性)day3

1. 微分模块使用及举例建模 大多数物理系统可以用微分方程来描述&#xff0c;因此可以用连续系统模拟。最简单的模型为“线性模型”和**“定常模型”**。 在Simulink中&#xff0c;用来模拟连续系统的模块有四种&#xff1a;增益模块、求和模块、微分模块、积分模块。另外&am…

斯坦福大学的产学研之路

来源&#xff1a;老钱文集摘要&#xff1a;新技术和新的商业模式随时都会产生&#xff0c;但是&#xff0c;只有当它们成为产品后&#xff0c;才能改变人们的生活并以此获利。一个新生产业需要有斯坦福这样的孵化器。发明创造遍布世界&#xff0c;但硅谷仅此一家。那是因为&…

2021年中国IT服务人才供给报告(需求与挑战并存)

过去五年&#xff0c;移动互联网蓬勃发展&#xff0c;但自从去年的疫情黑天鹅事件爆发之后&#xff0c;传统行业受到前所未有的冲击&#xff0c;而互联网行业依旧在迅猛发展&#xff0c;尤其在电子商务、游戏等远程服务&#xff0c;更是日进斗金。未来IT行业又会如何变化呢&…

经济学人: 低调应用, 高调回报, 亚马逊才是AI技术最大受益企业

来源&#xff1a;经济学人编译&#xff1a;机器之能 张玺亚马逊六页会议备忘录举世闻名。公司高管必须每年写一篇商业发展规划。鲜为人知的是&#xff0c;这些备忘录上有一道必答题──机器学习的应用路径&#xff1f;据亚马逊的经理们透露&#xff0c;像「应用不多」这样的反馈…

C++学习之路(一)

第一章&#xff1a;C语言概述 前言&#xff1a;这里学习C教材是选用的清华大学出版社的《C语言基础教程》第二版&#xff0c;该版本语言较为通俗易懂&#xff0c;概念清晰&#xff0c;便于理解。因为之前学习过C语言&#xff0c;因此在学习本书之际&#xff0c;也是抱着一遍复…

你社交网站上的照片,也许已经被用来训练人工智能了

来源&#xff1a;网易智能斯特于2013年拍摄的这张照片被收录在IBM的人像数据集&#xff08;Diversity in Faces&#xff09;中毫无疑问&#xff0c;这张家庭照片是非常可爱的:照片中的爸爸留着短须&#xff0c;戴着无框眼镜&#xff0c;棕色头发的妈妈咧着嘴笑着。他们正和两个…