当前位置: 首页 > 编程日记 > 正文

深度学习在人脸检测中的应用 | CSDN 博文精选

640?wx_fmt=jpeg


作者 | 梁志成、刘鹏、陈方杰

责编 | 唐小引

转载自CSDN(ID:csdnnews)

在目标检测领域,可以划分为人脸检测与通用目标检测,往往人脸这方面会有专门的算法(包括人脸检测、人脸识别、人脸其他属性的识别等),并且和通用目标检测(识别)会有一定的差别。这主要来源于人脸的特殊性(譬如有时候目标比较小、人脸之间特征不明显、遮挡问题等),本文将主要从人脸检测方面来讲解目标检测。


目前主要的人脸检测方法分类


当前,人脸检测方法主要包含两个区域:传统人脸检测算法和基于深度学习的人脸检测算法。传统人脸检测算法主要可以分为 4 类:

  • 基于知识的人脸检测方法;

  • 基于模型的人脸检测方法;

  • 基于特征的人脸检测方法;

  • 基于外观的人脸检测方法。

2006 年,Hinton 首次提出深度学习(Deep Learning)的概念,它是通过组合低层的特征形成更高层的抽象特征。随后研究者将深度学习应用在人脸检测领域,主要集中在基于卷积神经网络(CNN)的人脸检测研究,如基于级联卷积神经网络的人脸检测(Cascade CNN)、基于多任务卷积神经网络的人脸检测(MTCNN)、Facebox 等,很大程度上提高了人脸检测的鲁棒性。

当然,像 Faster RCNN、YOLO、SSD 等通用目标检测算法也有用在人脸检测领域,也可以实现比较不错的结果,但是和专门人脸检测算法比还是有差别。


如何检测图片中不同大小的人脸?


传统人脸检测算法中针对不同大小人脸主要有两个策略:

  • 缩放图片的大小(图像金字塔如图 1 所示);

640?wx_fmt=png

图 1 图像金字塔

  • 缩放滑动窗的大小(如图 2 所示)。

640?wx_fmt=png

图 2 缩放滑动窗口

基于深度学习的人脸检测算法中,针对不同大小人脸主要也有两个策略,但和传统人脸检测算法有点区别,主要包括:

  • 缩放图片大小:不过也可以通过缩放滑动窗的方式,基于深度学习的滑动窗人脸检测方式效率会很慢存在多次重复卷积,所以要采用全卷积神经网络(FCN),用 FCN 将不能用滑动窗的方法。

  • 通过 anchor box 的方法:如图 3 所示,不要和图 2 混淆,这里是通过特征图预测原图的 anchorbox 区域,具体在 Facebox 中有描述。

640?wx_fmt=png

图 3 anchor box


如何设定算法检测最小人脸尺寸?


主要是看滑动窗的最小窗口和 anchorbox 的最小窗口。

  • 滑动窗的方法

假设通过 12×12 的滑动窗,不对原图做缩放的话,就可以检测原图中 12×12 的最小人脸。

但是往往通常给定最小人脸 a=40、或者 a=80,以这么大的输入训练 CNN 进行人脸检测不太现实,速度会很慢,并且下一次需求最小人脸 a=30*30 又要去重新训练,通常还会是 12×12 的输入,为满足最小人脸框 a,只需要在检测的时候对原图进行缩放即可:w=w×12/a。

  • anchorbox 的方法

原理类似,这里主要看 anchorbox 的最小 box,通过可以通过缩放输入图片实现最小人脸的设定。


如何定位人脸的位置


  • 滑动窗的方式:

滑动窗的方式是基于分类器识别为人脸的框的位置确定最终的人脸。

640?wx_fmt=png

图 4 滑动窗

  • FCN 的方式:

通过特征图映射到原图的方式确定最终识别为人脸的位置,特征图映射到原图人脸框是要看特征图相比较于原图有多少次缩放(缩放主要查看卷积的步长和池化层)。

假设特征图上(2,3)的点,可粗略计算缩放比例为 8 倍,原图中的点应该是(16,24);如果训练的 FCN 为 12*12 的输入,对于原图框位置应该是(16,24,12,12)。

当然这只是估计位置,具体的在构建网络时要加入回归框的预测,主要是相对于原图框的一个平移与缩放。

  • 通过 anchor box 的方式:

通过特征图映射到图的窗口,通过特征图映射到原图到多个框的方式确定最终识别为人脸的位置。


如何通过一个人脸的多个框确定最终人脸框位置?


640?wx_fmt=png

图 5 通过 NMS 得到最终的人脸位置

NMS 改进版本有很多,最原始的 NMS 就是判断两个框的交集。如果交集大于设定的阈值,将删除其中一个框。

那么两个框应该怎么选择删除哪一个呢? 因为模型输出有概率值,一般会优选选择概率小的框删除。


基于级联卷积神经网络的人脸检测(Cascade CNN)


  • Cascade CNN 的框架结构是什么?

640?wx_fmt=png


级联结构中有 6 个 CNN,3 个 CNN 用于人脸非人脸二分类,另外 3 个 CNN 用于人脸区域的边框校正。

给定一幅图像,12-net 密集扫描整幅图片,拒绝 90% 以上的窗口。剩余的窗口输入到 12-calibration-net 中调整大小和位置,以接近真实目标。接着输入到 NMS 中,消除高度重叠窗口。下面网络与上面类似。

  • Cascade CNN 人脸校验模块原理是什么?

该网络用于窗口校正,使用三个偏移变量:

Xn:水平平移量,Yn:垂直平移量,Sn:宽高比缩放。

候选框口(x,y,w,h)中,(x,y)表示左上点坐标,(w,h)表示宽和高。

我们要将窗口的控制坐标调整为:

640?wx_fmt=png

这项工作中,我们有种模式。偏移向量三个参数包括以下值:

640?wx_fmt=png

同时对偏移向量三个参数进行校正。

640?wx_fmt=png

  • 训练样本应该如何准备?

人脸样本;

非人脸样本。

  • 级联的好处

最初阶段的网络可以比较简单,判别阈值可以设得宽松一点,这样就可以在保持较高召回率的同时排除掉大量的非人脸窗口;

最后阶段网络为了保证足够的性能,因此一般设计的比较复杂,但由于只需要处理前面剩下的窗口,因此可以保证足够的效率;

级联的思想可以帮助我们去组合利用性能较差的分类器,同时又可以获得一定的效率保证。


基于多任务卷积神经网络的人脸检测(MTCNN)


640?wx_fmt=png


MTCNN 模型有三个子网络,分别是 P-Net,R-Net,O-Net。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

为了检测不同大小的人脸,开始需要构建图像金字塔,先经过 PNet 模型,输出人脸类别和边界框(边界框的预测为了对特征图映射到原图的框平移和缩放得到更准确的框),将识别为人脸的框映射到原图框位置可以获取 patch,之后每一个 patch 通过 resize 的方式输入到 RNet,识别为人脸的框并且预测更准确的人脸框,最后 RNet 识别为人脸的的每一个 patch 通过 resize 的方式输入到 ONet,跟 RNet 类似,关键点是为了在训练集有限情况下使模型更鲁棒。

还要注意一点:构建图像金字塔的的缩放比例要保留,为了将边界框映射到最开始原图上。


Facebox


640?wx_fmt=png

(1)Rapidly Digested Convolutional Layers(RDCL)

在网络前期,使用 RDCL 快速的缩小 feature map 的大小。 主要设计原则如下:

  • Conv1, Pool1, Conv2 和 Pool2 的 stride 分别是 4, 2, 2 和 2。这样整个 RDCL 的 stride 就是 32,可以很快把 feature map 的尺寸变小。

  • 卷积(或 pooling)核太大速度就慢,太小覆盖信息又不足。权衡之后,将 Conv1, Pool1, Conv2 和 Pool2 的核大小分别设为 7x7,3x3,5x5,3x3。

  • 使用 CReLU 来保证输出维度不变的情况下,减少卷积核数量。

(2)Multiple Scale Convolutional Layers(MSCL)

在网络后期,使用 MSCL 更好地检测不同尺度的人脸。 主要设计原则有:

  • 类似于 SSD,在网络的不同层进行检测;

  • 采用 Inception 模块。由于 Inception 包含多个不同的卷积分支,因此可以进一步使得感受野多样化。

(3)Anchor densification strategy

为了 anchor 密度均衡,可以对密度不足的 anchor 以中心进行偏移加倍,如下图所示:

640?wx_fmt=png


作者简介:

梁志成,全球 AI 挑战赛百强选手,《深度学习 500 问》作译者,CSDN 博客专家及签约讲师。

刘鹏,稿定科技计算机视觉工程师,《深度学习 500 问》作译者。

陈方杰,上海大学硕士,《深度学习 500 问》作译者。

CSDN 博客原文:

https://blog.csdn.net/lzc4869/article/details/94666784

欢迎所有开发者朋友入驻 CSDN 博客,技术之路,共同进步。


(*本文为 AI科技大本营转载文章,转载请联系原作者)


精彩推荐


“只讲技术,拒绝空谈2019 AI开发者大会将于9月6日-7日在北京举行,这一届AI开发者大会有哪些亮点?一线公司的大牛们都在关注什么?AI行业的风向是什么?2019 AI开发者大会,倾听大牛分享,聚焦技术实践,和万千开发者共成长。


目前,大会盲订票限量发售中~扫码购票,领先一步!

    640?wx_fmt=png

推荐阅读

  • 大战三回合:XGBoost、LightGBM和Catboost一决高低 | 程序员硬核算法评测

  • Hinton等人最新研究:大幅提升模型准确率,标签平滑技术到底怎么用?

  • 智能文本信息抽取算法的进阶

  • 入门必备 | 一文读懂神经架构搜索

  • 印度人才出口:一半美国科技企业CEO是印度裔 | 数据分析中印青年

  • 为什么说“大公司的技术顽疾根本挽救不了”

  • 25 年 IT 老兵零基础写小说,作品堪比《三体》| 人物志

  • 中小企业搭建混合云,服务器如何选?

  • 从0到1 | 文本挖掘的传统与深度学习算法

  • 一览微软在机器阅读理解、推荐系统、人机对话等最新研究进展 | ACL 2019

  • 1.2w星!火爆GitHub的Python学习100天刷爆朋友圈!

640?wx_fmt=png你点的每个“在看”,我都认真当成了喜欢

相关文章:

vs2008中,在OCX控件中应用doc/view基本步骤

1、利用向导创建一个MFC ActiveX Control控件CMyOCX; 2、在工程中加入ActivDoc头文件和执行文件; class CActiveXDocTemplate : public CSingleDocTemplate { enum { IDR_NOTUSED 0x7FFF }; CWnd* m_pParentWnd; CFrameWnd* m_pFrameWnd; C…

常见存储过程分页PK赛——简单测试分析常见存储过程分页速度

数据的分页是我们再熟悉不过的功能了,各种各样的分页方式层出不穷。今天我把一些常见的存储过程分页列出来,再简单地测一下性能,算是对知识的总结,也是对您好想法的抛钻引玉。废话不多说,开始吧~~ 1.首先建立一张测试表…

YOLOv3模型剪枝,瘦身80%,提速100%,精度基本不变

作者 | CV君转载自我爱计算机视觉(ID: aicvml)如果要在实际应用中部署目标检测,你会想到哪项算法?在52CV目标检测交流群里,被提及最多的,恐怕就是YOLOv3了。虽然新出的一些算法号称“完胜”“吊打”某某某算…

Ubuntu开发用新机安装流程

1.SSH安装 Ubuntu缺省已安装客户端,此处安装服务端 sudo apt-get install openssh-server 确认sshserver是否启动 netstat -tlp | grep ssh 或 ps -e | grep ssh 未启动,选择启动 sudo /etc/init.d/ssh start 2.问题解决:ACPI Error:Method p…

人工智能六十年技术简史

出品 | AI科技大本营(ID:rgznai100)作者:李理,环信人工智能研发中心vp,十多年自然语言处理和人工智能研发经验。主持研发过多款智能硬件的问答和对话系统,负责环信中文语义分析开放平台和环信智能机器人的设…

【Android游戏开发二十五】在Android上的使用《贝赛尔曲线》!

首先对于《赛贝尔曲线》不是很了解的童鞋,请自觉白度百科、google等等... 为了方便偷懒的童鞋,这里给个《贝赛尔曲线》百科地址,以及一段话简述《贝赛尔曲线》: 《贝赛尔曲线》白度百科快速地址:http://baike.baidu.co…

Spring Boot 工程集成全局唯一ID生成器 Vesta

2019独角兽企业重金招聘Python工程师标准>>> 本文内容脑图如下: 文章共 760字,阅读大约需要 2分钟 ! 概 述 在前一篇文章 《Spring Boot工程集成全局唯一ID生成器 UidGenerator》 中给大家推荐了一款由百度开发的基于 Snowflake算…

vs2008中,创建基于对话框的mfc动态库步骤

1、利用MFC Dll向导初始生成一个mfc dll(默认设置); 2、添加一个对话框资源; 3、向工程中添加一个.h、.cpp文件,作为外部的接口; 4、.h头文件的格式仿照于基于控制台的dll的头文件格式; 5、.h头文件中包括资源文件头文…

poj3468 A Simple Problem with Integers

http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id14607 题意:题目给你n个数,m个操作,接下来一行给你这n个数,接下的几行给出m个操作,Q a b 表示查询区间[a,b]里的数和和。U a b c 表示把区间[a,b]里的数都加上c…

【Luogu】P1613 跑路

【Luogu】P1613 跑路 一、题目 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零。可是小A偏偏又有赖床的坏毛病。于是为了保住自己的工资,小A买了一个十分牛B的空间…

matlab图形用户界面设计简介

1、File->New->GUI->Create New GUI->Blank GUI->OK即可打开图形用户界面开发环境。 在里面可以拖放需要的控件,包括pushbutton、slider、radiobutton、togglebutton、checkbox、listbox、popupmenu、edit text、static text、table、axes、panel、…

旷视发布《人工智能应用准则》,倡导AI技术健康可持续发展

2019年7月8日,旷视宣布推出基于企业自身管理标准的《人工智能应用准则》(以下简称《准则》),旨在从人工智能企业自身的角度,规范、引导人工智能技术正确运用和健康发展,并确保其安全可控可靠,促…

Java知识积累——String引用的判断问题

看如下程序 1 public static void main(String[] args) {2 String a new String("abc");3 String b new String("abc");4 System.out.println(a b); 5 6 String c "abc";7 String d "abc";8 …

windows7下vs2008常见错误解决方法汇总

1、fatal error LNK1000:Internal error during IncrBuildImage 解决方法:选中对应工程-->点击右键,选择Properties-->Configuration Properties-->Linker-->General-->选中Enable Incremental Linking:改为No(/INCREMENTAL:NO),原始选项…

5G对AIoT的作用并无夸大,最大价值在于融合

采访嘉宾 | 崔宝秋、高恩重整理 | 夕颜出品 | AI科技大本营(ID:rgznai100)近年来,AIoT 的概念非常火爆,有不少企业将 AIoT 提升到公司的战略发展高度,然而实际上,走进普通人日常生活并真正实用的 AIoT 产品…

[USACO07JAN]平衡的阵容Balanced Lineup BZOJ 1699

题目背景 题目描述&#xff1a; 每天,农夫 John 的N(1 < N < 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连续的牛来进行比赛. 但是为了避免水平悬殊,牛的身高不应该相差太大. John 准备了Q (1 < Q < 18…

深度学习目标检测法进化史,看这一篇就够了

作者 | 黄浴&#xff0c;奇点汽车美研中心首席科学家兼总裁来源 | 转载自知乎专栏自动驾驶的挑战和发展本文将介绍自动驾驶中的深度学习目标检测的基本概念和方法&#xff0c;并对几个主要 Anchor free 方法进行了比较&#xff0c;希望对读者有所帮助&#xff0c;以下为正文&am…

Bridge Pattern

2019独角兽企业重金招聘Python工程师标准>>> http://www.cnblogs.com/hegezhou_hot/archive/2010/12/10/1902185.html 桥接模式的主要目的是将一个对象的变化因素抽象出来&#xff0c;不是通过类继承的方式来满足这个因素的变化&#xff0c;而是通过对象组合的方式来…

matlab神经网络工具箱函数汇总

转自&#xff1a;http://hi.baidu.com/lingyin55/blog/item/7a968ead11fe180c4b36d61e.html 1. 网络创建函数 newp 创建感知器网络 newlind 设计一线性层 newlin 创建一线性层 newff 创建一前馈BP网络 newcf 创建一多层前馈BP网络 newfftd 创建一前馈输入延迟BP网…

[每日短篇] 17 - 正确使用随机数 Random

2019独角兽企业重金招聘Python工程师标准>>> 随机数在系统开发中几乎是不可避免的一个需求&#xff0c;在大多数面试宝典一定会告诉你所谓的随机数其实是“伪”随机数&#xff0c;除此之外也就没有什么别的了。实际上这条知识本身已经是非常落后了&#xff0c;更不用…

LoadRunner的参数化功能分享

LoadRunner的参数化功能分享http://automationqa.com/forum.php?modviewthread&tid1598&fromuid2

MFC菜单的使用

1、 创建弹出菜单&#xff1a; (1)、利用向导&#xff0c;创建一个基于单文档的应用程序&#xff1b; (2)、在资源视图中选中”menu”&#xff0c;鼠标右键插入一新菜单IDR_POPMENU&#xff1b; (3)、在IDR_POPMENU菜单中添加”弹出菜单”选项&#xff0c;在”弹出菜单”下…

超阿里、大华,澎思科技行人再识别(ReID)技术刷新三大数据集记录

整理 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】不久前&#xff0c;江苏省某市公安通过 AI 技术分析监控摄像头中的信息&#xff0c;抓获了一个偷盗电动车的嫌疑人员。监控摄像头在现场拍到的是嫌疑人背对摄像头的情况&#xff0c;未有…

[转] vuewebpack多页面配置

前言 最近由于项目需求&#xff0c;选择使用vue框架&#xff0c;webpack打包直接使用的vue-cli&#xff0c;因为需要多页面而vue-cli只有单页面&#xff0c;所以就决定修改vue-cli的配置文件来满足开发需求。 html-webpack-plugin 实现需求需要用到这个插件&#xff0c; 具体信…

微信扫描二维码登入实现,网页端

2019独角兽企业重金招聘Python工程师标准>>> 服务器端要做得事很多&#xff0c;虽然逻辑不是很复杂&#xff0c;但是我们必须要分析清楚我们要做哪些事&#xff0c;请看下图&#xff1a; 通过这张图&#xff0c;我们看出&#xff0c;服务器端的接口一共有6个&#…

微软洪小文:AI将成为人类未来最好的左脑

演讲嘉宾 | 洪小文整理 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;2019 年 6 月 14 日&#xff0c;由清华大学五道口金融学院、清华大学国家金融研究院、清华大学研究生会联合主办的“未来已来—全球领袖论天下”系列讲座再次开讲。应清华…

计算机视觉相关网站

转自&#xff1a;http://blog.sciencenet.cn/home.php?modspace&uid454498&doblog&id377338 1、OpenCV中文网站 http://www.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5 2、Advanced Digital Imaging Solutions Laboratory (ADISL) Image Apprentice is a C/C ba…

预告 · Flutter Live 2018 全球同步直播

Flutter Live 2018 是 Google 在伦敦线下举办&#xff0c;并面向全球线上直播的一次 Flutter 庆祝活动。在 2018 年已经过去的这段时间里&#xff0c;Flutter 有着非常大的进展&#xff1a; 2 月底在世界移动大会 (MWC) 上宣布了第一个 Beta 版发布;5 月的 Google I/O 大会上发…

context-param与init-param的区别与作用

<context-param>与<init-param>的区别与作用 spring2009-11-04 16:49阅读39 评论0字号&#xff1a;大 中 小<context-param>的作用:web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个…

C#中object的使用

转自&#xff1a;http://www.hackvip.com/article/sort0129/sort0143/Hackvip_233655.html C#中system.object的函数方法功能介绍 在C#中&#xff0c;Object类型是所有类型的根&#xff0c;大家平常开发中都要跟它打交道&#xff0c;但不见得对它里面的每个方法都知根知底&am…