联系我们
- 地 址:北京市海淀区北四环西路9号 ,主 营:人脸识别,活体检测,身份证识别,银行卡识别,名片识别,车牌识别,OCR识别等及智能识别技术。
- 电 话:13146317170 廖经理
- 传 真:
- 邮 箱:398017534@qq.com
人脸识别之人脸检测
人脸识别之人脸检测
背景介绍
人脸检测(Face Detection),就是给一幅图像,找出图像中的所有人脸位置,通常用一个矩形框框起来,输入是一幅图像img,输出是若干个包含人脸的矩形框位置(x,y,w,h),就像这样。
人脸检测对于我们人类非常容易,出于社会生活的需要,我们大脑中有专门的人脸检测模块,对人脸非常敏感,即使下面这样的简笔画,大脑也能轻易检测出人脸,和各自的表情。人脸检测非常重要,那到底有什么用呢?(2015的A Survey)
自动人脸检测是围绕自动人脸图像分析的所有应用的基础,包括但不限于:人脸识别和验证,监控场合的人脸跟踪,面部表情分析,面部属性识别(性别/年龄识别,颜值评估),面部光照调整和变形,面部形状重建,图像视频检索,数字相册的组织和演示。
人脸检测是所有现代基于视觉的人与电脑,和人与机器人,交互系统的初始步骤。
主流商业数码相机都内嵌人脸检测,辅助自动对焦。
很多社交网络如FaceBook,用人脸检测机制实现图像/人物标记。
从问题的领域来看,人脸检测属于目标检测领域,目标检测通常有两大类:
通用目标检测:检测图像中多个类别的目标,比如ILSVRC2017的VID任务检测200类目标,VOC2012检测20类目标,通用目标检测核心是n(目标)+1(背景)=n+1分类问题。这类检测通常模型比较大,速度较慢,很少有STOA方法能做到CPU real-time。
特定类别目标检测:仅检测图像中某一类特定目标,如人脸检测,行人检测,车辆检测等等,特定类别目标检测核心是1(目标)+1(背景)=2分类问题。这类检测通常模型比较小,速度要求非常高,这里问题的基本要求就是CPU real-time。
从发展历史来看,深度学习在其中的作用非常明显:
非深度学习阶段:这段时间经典检测算法都是针对特定目标提出的,比如CVPR 2001的Viola-Jones (VJ)是针对人脸检测问题,CVPR 2005的HOG+SVM是针对行人检测问题,TPAMI 2010的DPM,虽然可以检测各类目标,但要用于多目标检测,需要每个类别分别训练模板,相当于200个特定类别检测问题。
深度学习阶段:这段时间经典检测算法都是针对通用目标提出的,比如性能更好的Faster-RCNN, R-FCN系列,速度更快的YOLO, SSD系列,强大的深度学习只要一个CNN就可以搞定多类别检测任务(模型数量1 vs. 200,CNN真的慢吗?)。虽然这些都是多类别方法,但它们都可以用来解决单类别问题,目前人脸检测、行人检测等特定目标检测问题的State-of-the-art(SOTA)都是这类方法的针对性改进。
目前以深度学习为主的CV算法,研究重点是通用目标检测,这些方法在人脸检测问题上效果都不错,那直接用就好了,为什么还要研究这个问题呢?
Faster-RCNN系列:这类方法的优点是性能高,缺点是速度慢,在GPU上都无法实时,无法满足人脸检测对速度的极高要求,既然性能不是问题,这类方法的研究重点是提高效率。
SSD系列:这类方法的优势是速度快,在GPU上能实时,缺点是对密集小目标的检测比较差,而人脸刚好是密集小目标,这类方法的研究重点是提高密集小目标的检测性能,同时速度也需要尽可能快,GPU实时算法在应用中依然受限。
人脸检测还有特殊的级联CNN系列,后面会介绍。目前人脸检测研究抱通用目标检测的大腿,这是事实和现状,但其速度和性能双高的要求还是有挑战性的。
评价指标
评价一个人脸检测算法(detector)好坏,常用三个指标:
召回率(recall):detector能检测出来的人脸数量越多越好,由于每个图像中包含人脸的数量不一定,所以用检测出来的比例来衡量,这个指标就是召回率recall(这个解释不对,跟每张图包含几个人脸没有关系)。detector检测出来的矩形框越接近人工标注的矩形框,说明检测结果越好,通常交并比IoU大于0.5就认为是检测出来了,所以 recall = 检测出来的人脸数量/图像中总人脸数量。
误检数(false positives):detector也会犯错,可能会把其他东西认为是人脸,这种情况越少越好,我们用检测错误的绝对数量来表示,这个指标就是误检数false positives。与recall相对,detector检测出来的矩形框与任何人工标注框的IoU都小于0.5,则认为这个检测结果是误检,误检越少越好,比如FDDB上,论文中一般比较1000个或2000个误检时的召回率情况,工业应用中通常比较100或200个误检的召回率情况。
检测速度(speed):是个算法都要比速度,人脸检测更不用说,detector检测一幅图像所用的时间越少越好,通常用帧率(frame-per-second,FPS)来表示。不过这里有点小问题,很多detector都是图像越小、图像中人脸越少、检测最小人脸越大,检测速度越快,需要注意不同论文的测试环境和测试图像可能不一样:测试图像,最常用的配置是VGA(640*480)图像检测最小人脸80*80给出速度,但都没有表明测试图像背景是否复杂,图像中有几个人脸(甚至是白底一人脸的图像测速度);测试环境,差别就更大了,CPU有不同型号和主频,有多核多线程差异,GPU也有不同型号,等等(这个理解,个人觉得也有问题,算法帧率评估与背景复杂度无关,不同算法采用的数据相同,才有可能比性,作者实际将的是最坏,最好情况)。
一般情况下误检数越多召回率越高,同等误检数量下比较召回率,同等测试环境和图像比较速度,请尽可能保持公平正义。下图是评价指标的简单示例,图像总共包含7个人脸(黄色椭圆),某detector给出了8个检测结果(绿色框),其中5个正确,3个错误,这时候误检数为3,召回率为5/7=71.43%。
常用数据库
人脸检测的测试数据库有很多,这里仅选择FDDB和WIDER FACE,这个两个数据库都有官方长期维护,各种算法都会提交结果进行比较,而且很多早期数据库目前都已经饱和,没有比较意义。
第一个是2010年非约束环境人脸检测数据库FDDB FDDB : Main:
Jain V, Learned-Miller E. Fddb: A benchmark for face detection in unconstrained settings [R]. Technical Report UM-CS-2010-009, University of Massachusetts, Amherst, 2010.
FDDB总共2845张图像,5171张,人脸非约束环境,人脸的难度较大,有面部表情,双下巴,光照变化,穿戴,夸张发型,遮挡等难点,是目标最常用的数据库。有以下特点:
图像分辨率较小,所有图像的较长边缩放到450,也就是说所有图像都小于450*450,最小标注人脸20*20,包括彩色和灰度两类图像;
每张图像的人脸数量偏少,平均1.8人脸/图,绝大多数图像都只有一人脸;
数据集完全公开,published methods通常都有论文,大部分都开源代码且可以复现,可靠性高;unpublished methods没有论文没有代码,无法确认它们的训练集是否完全隔离,持怀疑态度最好,通常不做比较。(扔几张FDDB的图像到训练集,VJ也可以训练出很高的召回率。。需要考虑人品能不能抵挡住利益的诱惑)
有其他隔离数据集无限制训练再FDDB测试,和FDDB十折交叉验证两种,鉴于FDDB图像数量较少,近几年论文提交结果也都是无限制训练再FDDB测试方式,所以,如果要和published methods提交结果比较,请照做。山世光老师也说十折交叉验证通常会高1~3%。
结果有离散分数discROC和连续分数contROC两种,discROC仅关心IoU是不是大于0.5,contROC是IoU越大越好。鉴于大家都采用无限制训练加FDDB测试的方式,detector会继承训练数据集的标注风格,继而影响contROC,所以discROC比较重要,contROC看看就行了,不用太在意。
人脸检测(Face Detection),就是给一幅图像,找出图像中的所有人脸位置,通常用一个矩形框框起来,输入是一幅图像img,输出是若干个包含人脸的矩形框位置(x,y,w,h),就像这样。
人脸检测对于我们人类非常容易,出于社会生活的需要,我们大脑中有专门的人脸检测模块,对人脸非常敏感,即使下面这样的简笔画,大脑也能轻易检测出人脸,和各自的表情。人脸检测非常重要,那到底有什么用呢?(2015的A Survey)
自动人脸检测是围绕自动人脸图像分析的所有应用的基础,包括但不限于:人脸识别和验证,监控场合的人脸跟踪,面部表情分析,面部属性识别(性别/年龄识别,颜值评估),面部光照调整和变形,面部形状重建,图像视频检索,数字相册的组织和演示。
人脸检测是所有现代基于视觉的人与电脑,和人与机器人,交互系统的初始步骤。
主流商业数码相机都内嵌人脸检测,辅助自动对焦。
很多社交网络如FaceBook,用人脸检测机制实现图像/人物标记。
从问题的领域来看,人脸检测属于目标检测领域,目标检测通常有两大类:
通用目标检测:检测图像中多个类别的目标,比如ILSVRC2017的VID任务检测200类目标,VOC2012检测20类目标,通用目标检测核心是n(目标)+1(背景)=n+1分类问题。这类检测通常模型比较大,速度较慢,很少有STOA方法能做到CPU real-time。
特定类别目标检测:仅检测图像中某一类特定目标,如人脸检测,行人检测,车辆检测等等,特定类别目标检测核心是1(目标)+1(背景)=2分类问题。这类检测通常模型比较小,速度要求非常高,这里问题的基本要求就是CPU real-time。
从发展历史来看,深度学习在其中的作用非常明显:
非深度学习阶段:这段时间经典检测算法都是针对特定目标提出的,比如CVPR 2001的Viola-Jones (VJ)是针对人脸检测问题,CVPR 2005的HOG+SVM是针对行人检测问题,TPAMI 2010的DPM,虽然可以检测各类目标,但要用于多目标检测,需要每个类别分别训练模板,相当于200个特定类别检测问题。
深度学习阶段:这段时间经典检测算法都是针对通用目标提出的,比如性能更好的Faster-RCNN, R-FCN系列,速度更快的YOLO, SSD系列,强大的深度学习只要一个CNN就可以搞定多类别检测任务(模型数量1 vs. 200,CNN真的慢吗?)。虽然这些都是多类别方法,但它们都可以用来解决单类别问题,目前人脸检测、行人检测等特定目标检测问题的State-of-the-art(SOTA)都是这类方法的针对性改进。
目前以深度学习为主的CV算法,研究重点是通用目标检测,这些方法在人脸检测问题上效果都不错,那直接用就好了,为什么还要研究这个问题呢?
Faster-RCNN系列:这类方法的优点是性能高,缺点是速度慢,在GPU上都无法实时,无法满足人脸检测对速度的极高要求,既然性能不是问题,这类方法的研究重点是提高效率。
SSD系列:这类方法的优势是速度快,在GPU上能实时,缺点是对密集小目标的检测比较差,而人脸刚好是密集小目标,这类方法的研究重点是提高密集小目标的检测性能,同时速度也需要尽可能快,GPU实时算法在应用中依然受限。
人脸检测还有特殊的级联CNN系列,后面会介绍。目前人脸检测研究抱通用目标检测的大腿,这是事实和现状,但其速度和性能双高的要求还是有挑战性的。
评价指标
评价一个人脸检测算法(detector)好坏,常用三个指标:
召回率(recall):detector能检测出来的人脸数量越多越好,由于每个图像中包含人脸的数量不一定,所以用检测出来的比例来衡量,这个指标就是召回率recall(这个解释不对,跟每张图包含几个人脸没有关系)。detector检测出来的矩形框越接近人工标注的矩形框,说明检测结果越好,通常交并比IoU大于0.5就认为是检测出来了,所以 recall = 检测出来的人脸数量/图像中总人脸数量。
误检数(false positives):detector也会犯错,可能会把其他东西认为是人脸,这种情况越少越好,我们用检测错误的绝对数量来表示,这个指标就是误检数false positives。与recall相对,detector检测出来的矩形框与任何人工标注框的IoU都小于0.5,则认为这个检测结果是误检,误检越少越好,比如FDDB上,论文中一般比较1000个或2000个误检时的召回率情况,工业应用中通常比较100或200个误检的召回率情况。
检测速度(speed):是个算法都要比速度,人脸检测更不用说,detector检测一幅图像所用的时间越少越好,通常用帧率(frame-per-second,FPS)来表示。不过这里有点小问题,很多detector都是图像越小、图像中人脸越少、检测最小人脸越大,检测速度越快,需要注意不同论文的测试环境和测试图像可能不一样:测试图像,最常用的配置是VGA(640*480)图像检测最小人脸80*80给出速度,但都没有表明测试图像背景是否复杂,图像中有几个人脸(甚至是白底一人脸的图像测速度);测试环境,差别就更大了,CPU有不同型号和主频,有多核多线程差异,GPU也有不同型号,等等(这个理解,个人觉得也有问题,算法帧率评估与背景复杂度无关,不同算法采用的数据相同,才有可能比性,作者实际将的是最坏,最好情况)。
一般情况下误检数越多召回率越高,同等误检数量下比较召回率,同等测试环境和图像比较速度,请尽可能保持公平正义。下图是评价指标的简单示例,图像总共包含7个人脸(黄色椭圆),某detector给出了8个检测结果(绿色框),其中5个正确,3个错误,这时候误检数为3,召回率为5/7=71.43%。
常用数据库
人脸检测的测试数据库有很多,这里仅选择FDDB和WIDER FACE,这个两个数据库都有官方长期维护,各种算法都会提交结果进行比较,而且很多早期数据库目前都已经饱和,没有比较意义。
第一个是2010年非约束环境人脸检测数据库FDDB FDDB : Main:
Jain V, Learned-Miller E. Fddb: A benchmark for face detection in unconstrained settings [R]. Technical Report UM-CS-2010-009, University of Massachusetts, Amherst, 2010.
FDDB总共2845张图像,5171张,人脸非约束环境,人脸的难度较大,有面部表情,双下巴,光照变化,穿戴,夸张发型,遮挡等难点,是目标最常用的数据库。有以下特点:
图像分辨率较小,所有图像的较长边缩放到450,也就是说所有图像都小于450*450,最小标注人脸20*20,包括彩色和灰度两类图像;
每张图像的人脸数量偏少,平均1.8人脸/图,绝大多数图像都只有一人脸;
数据集完全公开,published methods通常都有论文,大部分都开源代码且可以复现,可靠性高;unpublished methods没有论文没有代码,无法确认它们的训练集是否完全隔离,持怀疑态度最好,通常不做比较。(扔几张FDDB的图像到训练集,VJ也可以训练出很高的召回率。。需要考虑人品能不能抵挡住利益的诱惑)
有其他隔离数据集无限制训练再FDDB测试,和FDDB十折交叉验证两种,鉴于FDDB图像数量较少,近几年论文提交结果也都是无限制训练再FDDB测试方式,所以,如果要和published methods提交结果比较,请照做。山世光老师也说十折交叉验证通常会高1~3%。
结果有离散分数discROC和连续分数contROC两种,discROC仅关心IoU是不是大于0.5,contROC是IoU越大越好。鉴于大家都采用无限制训练加FDDB测试的方式,detector会继承训练数据集的标注风格,继而影响contROC,所以discROC比较重要,contROC看看就行了,不用太在意。
上一条:AI计算机视觉中的目标分类
下一条:机器视觉技术原理