AI学习笔记(十三)CNN之人脸检测
AI学习笔记之CNN之人脸检测
- 人脸检测
- 人脸检测概念
- 人脸检测的难点
- 人脸检测的主要用途
- mtcnn
- 主要步骤
- 构建图像金字塔
- P-Net(Proposal Network)
- R-Net(Refine Network)
- O-Net(Outout Network)
- 总结
人脸检测
人脸检测概念
人脸检测/人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头擦剂含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。
人脸检测的难点
人脸识别被认为是生物特征识别领域甚至人工智能邻域最困难的研究课题之一。人脸识别的困难主要是人脸作为生物特征的特点所带来的:
1、相似性:不同个体之间的区别不大,所有人脸的结构都相似,甚至人脸器官的结构外形都很相似。这样的特点对于利用人脸进行定位是有利的,但是对于利用人脸区分人类个体是不利的;
2、易变性:人脸的外形很不稳定,人可以通过脸部的变化产生很多表情,而在不同观察角度,人脸的视觉推向也相差很大,另外,人脸识别还受光照条件(例如白天和夜晚,室内和室外等)、人脸的很多遮盖物(例如口罩、墨镜、头发、胡须等)、年龄等多方面因素的影响。
在人脸识别中,第一类的变化是应该放大而作为区分个体的标准的,而第二类的变化应该消除,因为他们可以代表同一个个体。通常称第一类变化为类间变化(inter-class difference),而称第二类变化为类内变化(intra-class difference)。对于人脸,类内变化往往大于类间变化,从而使在受类内变化干扰的情况下利用类间变化区分个体变得异常困难。
人脸检测的主要用途
人脸识别主要用于身份识别,由于视频监控正在快速普及,众多的视频监控应用迫切需要一种远距离、用户非配合状态下的快速身份识别技术,以求远距离快速确认人员身份,实现智能预警。人脸识别技术无疑是最佳的选择,采用快速人脸检测技术可以从监控视频中实时查找人脸,并与人脸数据库进行实时比对,从而实现快速身份识别。
人脸识别产品已广泛应用于金融、司法、军队、公安、边检、政府、航天、店里、工厂、教育、医疗及众多事业单位等领域。随着技术的进一步成熟和社会认同度的提高,人脸识别技术将应用在更多的领域。
1、企业、住宅安全和管理。如人脸识别门禁考勤系统,人脸识别防盗门等;
2、电子护照及身份证、公安、司法、刑侦等;
3、自助服务、信息安全等。
mtcnn
MTCNN(Multi-task convolutional neural network)即多任务卷积神经网络,该网络将人脸区域检测与人脸关键点检测放在了一起。
从工程实践上,MTCNN是一种检测速度和准确率都很不错的算法,算法的推断流程有一定的启发性。
其总体可分为P-Net、R-Net和O-Net三层网络结构。
1、由原始图片和P-Net生成预测的bounding boxes。
2、输入原始图片和P-Net生成的bounding box,通过R-Net,生成矫正后的bounding box。
3、输入原始图片和R-Net生成的bounding box,通过O-Net,生成矫正后的bounding box和人脸面部轮廓关键点。
MTCNN主要包括三层网络:
1、第一层P-Net将经过卷积,池化操作后输出分类(对应像素点是否存在人脸)和回归(回归box)结果。
2、第二层网络将第一层输出的结果使用非极大值抑制(NMS)来去除高度重合的候选框,并将这些候选框放入R-Net中进行精细的操作,拒绝大量错误框,再对回归矿做校正,并使用NMS去除重合框,输出分支同样两个分类和回归;
3、最后将R-Net输出认为是人脸的候选框输入到O-Net中再一次进行精细操作,拒绝掉错误的框,此时输出分支包含三个分类:a)是否有人脸,2个输出;b)回归:回归得到的框的起始点的xy坐标和框的长宽,4个输出;c)人脸特征点定位:5个人脸特征点的xy坐标,10个输出。
注:三段网络都有NMS,但是设置的阈值不同。
主要步骤
构建图像金字塔
首先对图片进行Resize操作,将原始图像所方程不同的尺度,生成图像金字塔。然后将不同尺度的图像诉讼入到这三个字网络中进行训练,目的是为了可以检测到不同大小的人脸,从而实现多尺度目标检测。构建方法是通过不同的缩放洗漱factor分别对图片的h和w进行缩放,每次缩小为原来的factor带下。
注意:缩小后的长宽最小不可以小于12。
对图片做“金字塔”变换的原因在于,图片中的人脸尺度有大有小,让识别算法不被目标尺度影响一直是个挑战。
MTCNN使用了图像金字塔来解决目标多尺度问题,即把原图按照一定的比例(如0.707),多次等比缩放得到多尺度的图片,很像个金字塔。
P-Net的模型是用单尺度12×1212\times 1212×12的图片训练出来的。推理的时候,缩小后的长宽最小不可以小于12.
对多个尺度的输入图像做训练,训练是非常耗时的。因此通常只在推理阶段使用图像金字塔,提高算法的精度。
设置合适的最小脸尺寸和缩放因子可以优化计算效率:
1、factor是指每次对边缩放的倍数;
2、第一阶段会多次缩放原图得到图片金字塔,目的是为了让缩放后图片中的人脸与P-Net训练时候的图片尺度12px×12px)12px\times 12px)12px×12px)接近;
3、引申优化项:先把图像缩放到一定大小,在通过factor对这个大小进行缩放,可以减少计算量。
- minsize是指图片中需要识别人脸的最小尺寸(单位:px)
- 注:底阿妈中使用的是“引申优化项”的策略。
图例:如果待测图片1200px×1200px1200px \times 1200px1200px×1200px,想要让缩放后的尺寸接近模型训练图片的尺度12px×12px)12px\times 12px)12px×12px)。
缩放因子为何选择0.709 - 图片金字塔缩放时,如果默认把宽、高都变为原来的1/21/21/2,缩放后面积变为原来的1/41/41/4;
- 如果认为1/41/41/4的缩放幅度太大,就会考虑将面积缩放为原来的1/21/21/2,则其高、宽都缩放为原来的22\frac{\sqrt2}222
- 从实际意义上看,factor应该设置为小于1的数
图像金字塔的缺点:慢
1、生成图片金字塔慢;
2、每种尺度的图片都需要输入进模型,相当于多次执行了模型的推理流程。
P-Net(Proposal Network)
最基本的构造四一个全卷积网络。对于上一步构建完成的图像金字塔,通过一个FCN(全卷积网络)进行初步特征提取与标定边框。
MTCNN算法能够接受任意尺寸的图片的原因在于:
- 第一阶段的P-Net是一个全卷积网络(Fully Convolutional Network);
- 卷积、池化、非线性激活都是一些可以接受任意尺寸矩阵的运算,但全连接运算是需要规定输入。如果网络中有全连接层,则输入的图片尺寸一般是固定的;
- 在推理的时候,测试图像中人脸区域的尺度位置。但是因为P网络结构是固定的,当输入为12×1212\times 1212×12时,输出恰好是1×11\times 11×1的5通道特征图,所以可以把p网络整体看做一个12×1212\times 1212×12的卷积核在图片上从左上仿开始,取步长stride=2,依次做划窗操作。所以,当刚开始图很大的时候,12×1212\times 1212×12的框可能只是框住了一张大脸上的某个局部如眼睛、耳朵、鼻子。当该图不断缩至很小的时候(图像金字塔),12×1212\times 1212×12的框能对其框柱的也越来越全,甚至完全框柱整张脸。
- 3次卷积核1次池化后,原来12×12×312\times 12 \times 312×12×3的矩阵变为1×1×321\times 1 \times 321×1×32
- 利用这个1×1×321\times 1 \times 321×1×32的向量,在通过一个1×1×21\times 1 \times 21×1×2的卷积,得到了是否是人脸的分类结果
- 令输入图片矩阵为A,卷积核在原图矩阵A上滑动,把每个12×12×312\times 12 \times 312×12×3区域的矩阵都计算成该区域有无人脸的得分,最后可以得到一个二维军阵为S,S每个元素的值[0,1][0,1][0,1]的数,代表有人脸的概率。即A通过一系列矩阵运算,变化到S。
P-Net的输出:
1、网络的第一部分输出是用来判断该图像是否存在人脸,输出向量大小为1×1×21\times 1 \times 21×1×2,也就是两个值;
2、网络的第二部分给出框的精准位置,即边框回归;P-Net输入的$12\times 12 $的图像块可能并不是完美的人脸框的位置,如有的时候人脸并不是正好为方形,有可能$12\times 12 $的图像偏左或偏右,因此需要输出当前框位置相对王美人脸框位置的偏移。这个偏移大小为
1×1×41\times 1 \times 41×1×4,即表示框左上角的横坐标的相对偏移,框左上角的中坐标的相对偏移、框的宽度误差、框的高度误差;
3、网络的第三部分输出人脸的5个关键点位置。5个关键点分贝对应着左眼的位置、右眼的位置、鼻子的位置、左嘴角的位置、右嘴角的位置。每个关键点需要两维来表示,因此输出的向量大小是1×1×101\times 1 \times 101×1×10。
举例:
一张70×7070\times 7070×70的图,经过P网络全卷积后,输出为(70−2)/2−2−2=30\left(70-2\right)/2-2-2=30(70−2)/2−2−2=30,即每个通道的30×3030\times 3030×30的特征图。这就意味着该图经过p的一次划窗操作,得到30×30=90030\times 30=90030×30=900个建议框,而每个建议框对应一个置信度cond与4个偏移量offset。再经NMS(非极大值抑制:通过IOU,把不是极大值的值全部杀掉)把cond大于设定的阈值0.6对应的建议框保留下来,将其对应的offset经边框回归操作,得到在原图中的坐标信息,记得到复合P-net这些建议框了,再传给R-Net。
R-Net(Refine Network)
从网络图可以看到,只是由于该网络结构和P-Net网络结构有差异,多了一个全连接层,所以会取得更好的抑制false-positive的作用。在输入R-Net之前,都需要缩放到24×24×324\times 24 \times 324×24×3,网络的输出与P-Net是相同的,R-Net的目的是为了去除大量的非人脸框。
O-Net(Outout Network)
该层比R-Net多了一层卷积层,所以处理结果会更加精细。输入的图像大小为48×48×348\times 48 \times 348×48×3,输出包括N个边界框的坐标信息,score以及关键点位置。
总结
从P-Net到R-Net,再到最后的O-Net,网络输入的图像越来越大,卷积层的通道数越来越多,网络的深度(层数)也越来越深,因此识别人脸的准确率应该也是越来越高的。
MTCNN人脸检测的训练数据下载地址:http://shuoyang1213.me/WIDERFACE/。该数据集有32203张图片,共有93703张脸被标记。
AI学习笔记(十三)CNN之人脸检测相关推荐
- K210学习笔记(八)——人脸检测和人脸识别
前言 人脸检测是人脸识别算法的第一步,人脸识别过程主要分为人脸图像获取.人脸检测.人脸配准.人脸表征以及人脸图像匹配与识别.人脸检测的目标是找出图像中所有的人脸对应的位置,算法的输出是人脸外接矩形(椭 ...
- 学习笔记—android实现opencv人脸检测
1.导入opencv库 在Android studio导入OpenCV配置使用中有详细说明 2.添加文件 Manifest 的设置权限,主要是对摄像头添加权限 <?xml version=&qu ...
- AI学习笔记(十一)CNN之图像识别(上)
AI学习笔记之CNN之图像识别(上) 图像识别 图像识别简介 模式识别 图像识别的过程 图像识别的应用 分类与检测 VGG Resnet 迁移学习&inception 卷积神经网络迁移学习fi ...
- AI学习笔记(十四)CNN之图像分割
AI学习笔记之CNN之图像分割 图像分割 问题引入 实现技术手段及分类 语义分割-FCN(Fully Convolutional Networks) FCN--deconv 反卷积的具体步骤 Unpo ...
- AI学习笔记(十一)CNN之图像识别(下)
AI学习笔记之CNN之图像识别(下) 图像识别 图像识别简介 模式识别 图像识别的过程 图像识别的应用 分类与检测 VGG Resnet 迁移学习&inception 卷积神经网络迁移学习fi ...
- AI学习笔记(十二)物体检测(上)
AI学习笔记之物体检测(上) 物体检测简介 常见检测网络 IOU TP.TN.FP.FN precision(精确度)和recall(召回率) 边框回归 边框回归具体方法 Selective Sear ...
- AI学习笔记(六)三维计算机视觉与点云模型
AI学习笔记之三维计算机视觉与点云模型 立体视觉 立体视觉的概念 立体视觉的原理 单目系统 双目系统和视差 对极几何约束 SIFT sift特征的特点 sift算法总体介绍 sift特征提取和匹配具体 ...
- AI学习笔记(三)特征选择与提取、边缘提取
AI学习笔记之特征选择与提取.边缘提取 1.特征选择 (1)特征的概念 (2)为什么要做特征选择 (3)什么是特征选择 (4)怎么做特征选择 (5)特征选择算法 (6)搜索方法 2.特征提取 (1)特 ...
- AI入门级的开发技巧:人脸检测的4种常见方法以及优缺点对比
这是一篇纯干货文章,旨在与AI初学者分享关于人脸检测的4种常见方法,以及它们的各自优缺点的对比.同时我也从一位资深的AI开发者角度,给大家提出一些个人的开发技巧和建议,便于大家找到适合自己需求的方法. ...
最新文章
- 源码分析Handler机制
- python用途与前景-2019年Python就业及发展前景如何 看完你就清晰了
- 【配置】成本组件结构定义(OKTZ)
- 二进制转十进制-栈的方式实现
- select下拉框美化
- ISO时间转化时间戳
- [蓝桥杯][算法提高VIP]项链(dfs)
- .NET6之MiniAPI(二十三):Refit
- 先进的NumPy数据科学
- 论文浅尝 | 基于知识库的神经网络问题生成方法
- PTA16、列表元素个数的加权和(1) (10 分)
- shell中可能经常能看到:/dev/null 21
- input只改变光标的颜色 不改变字的颜色
- 蓝桥杯2020国赛太原理工学子成绩大跃进
- mybatis关联查询resultmap的使用详解resultmap
- [原创]Android秒杀倒计时自定义TextView
- 算法学习第一天-搭建能运行算法第四版的代码
- 单片微型计算机原理和应用答案,《单片微机原理及应用》 试卷A及参考答案
- iPhone 和 iPad 隐藏照片或视频教程
- 【机友会选手机攻略】合约机是什么?和裸机有什么区别?0元购机和购机入网送话费区别?...
热门文章
- python定位相邻节点_Python selenium —— 父子、兄弟、相邻节点定位方式详解
- 时间管理 SMART 与 四象限
- Android 开发使用lambda实现 JDK8兼容
- android-手势-基础知识总结
- 串灯控制盒去掉怎么接_仿木地板瓷砖怎么样?仿木地板瓷砖怎么铺?
- rocketmq原理_消息中间件漫谈:RocketMQ延时消息应用及原理剖析
- 测试工程师,必须掌握的shell变量知识
- 论文计算机辅助辅助教学应用,计算机辅助教学应用论文.doc
- 测试监控系列:使用vb批量统计nmon结果
- 四年测试工程师经历,下一步转开发还是继续测试?