人脸检测综述---2010之2017

文章转载于:https://www.imooc.com/article/details/id/32443

重点总结如下:

1  按检测对象类别分,目标检测可分为两类:

     通用目标检测:检测图像中往往有多个类别目标,目标检测核心:n(目标类别数) + 1(背景)=(n + 1)分类问题;这类目标检测:模型比较大,速度较慢,很少有STOA方法能做到CPU real-time. 如imageNet2017 中VID目标检测为200类目标;VOC2012检测20类目标。

     特定类别目标检测:仅检测图像中某一特定目标,目标检测核心:1(目标) + 1(背景) = 2分类问题,这类目标检测:模型较小,速度要求非常高,基本要求CPU real-time.例如 人脸检测  行人检测  车辆检测等等。

2  现状及存在问题

    2.1)深度学习作用明显

          非深度学习阶段: 经典检测算法都是针对特定目标提出,虽然可以检测各类目标,但要用于多目标检测,需要每个类别分别训练模板,相当于200个特定类别检测问题。如,CVPR2001  Viola-Jones(VJ)是针对人脸检测问题(小样本训练),CVPR 2005 HOG + SVM针对行人检测(小样本训练)。

              深度学习阶段:检测算法都是针对通用目标提出的,如性能更好的Faster-RCNN, R-FCN系列,速度更快的YOLO.SSD系列。强大的深度学习只要一个CNN就可以搞定多类别检测任务;这些方法都是针对多类别方法的;

  基于深度学习的通用目标检测方法和特定目标检测方法之间的关系:

             针对通用目标检测方法(多类别检测任务),都可以用来解决单类别问题;如人脸检测,行人检测,车辆检测,视频鉴黄等特定目标检测问题的SOTA都是在通用目标检测方法的基础上,结合单类别问题的特性,有针对性的改进。

 in short: 特定目标检测依赖于通用目标问题检测

      2.2)现状---研究重点

           目前以DL为主的CV算法,研究重点是通用目标检测,这些方法在人脸检测问题上效果都不错,可以适当改进后,直接就能用,为什么还要研究呢?

            Faster-RCNN系列:优点:性能高,缺点:速度快,在GPU上都无法real-time,无法满足人脸检测对速度的极高需求;既然性能不是问题,这类方法研究的重点,如何减少时间/提高速度;

             SSD系列:优势:速度快,在GPU上能实时,在CPU上也不能实时,缺点:对密集小目标检测效果差,而人脸刚好就是密集小目标,这类算法研究的重点:如何提高密集小目标的检测性能,同时速度也要尽量快,GPU实时在算法应用中依然存在问题;

             级联卷积CNN系列: 优势:速度快,性能可接受,缺点:复杂背景或人脸数量增加时,速度会严重下降,这就是级联算法的通病,

     当前人脸检测依附于通用目标检测-------这是事实和现状;  速度快 性能高 此双高是我们设计模型的目标,目前还是存在一些挑战性问题的。

3  评价指标---通常有三个指标:召回率  误检数  速度

        3.1  召回率(recell):

              什么是召回率: detector检测出来的矩形框越接近人工标注的矩形框,说明检测结果越好,通常交并比IoU大于0.5就认为是检测出来了

               recall = 检测出的人脸数量 / 图像中总人脸数量 = (检测出的人脸数)  / (检测出的人脸数  + 漏检人脸数)

         3.2  精缺率(precision):

           精确率 = 检测出的人脸数 /  detector检测的所有人脸数  = detector检测出的人脸数 / (detector检测出的人脸数  +  误检数)

          误检数( false positives ): detector也会犯错,可能会把其他东西认为是人脸,量化指标:误检数false positives; 如何判断一个边框是否是false positives? detector检测出来的矩形框与任何人工标注框的IoU都小于0.5,则认为这个检测结果是误检,误检越少越好;论文中一般比较1000个或2000个误检时的召回率情况; 工业应用中通常比较100或200个误检的召回率情况。

          3.3  检测速度

           是个算法都要比速度,人脸检测更不用说,detector检测一幅图像所用的时间越少越好,通常用帧率(frame-per-second,FPS)来表示。

存在的小问题:不同论文的测试环境和测试图像可能不一样;

           测试环境:特点差别很大,CPU有不同型号/主频,有多核多线程的差异;GPU也有不同型号的差异;内存差异,显卡差异等等(推荐,算法帧率评估与北京复杂度无关,不同算法应在相同设备,同一数据集下,帧率才有可比性;作者将的是最好或最坏的情况!)

in short: (1 + 2同)一般情况下,误检数越多,召回率越高,同等误检数下比召回率;同等测试环境和图片下比较速度;

4  人脸检测常用数据库---FDDB(2845) , WIDER FACE(32k) , AFLW(16k)   CelebA(200K)

        数据集介绍reference:   https://blog.csdn.net/s_l1994/article/details/81017746

        这里重点介绍两个数据库: FDDB 和 WIDER FACE   这个两个数据库都有官方长期维护,各种算法都会提交结果进行比较;

第一个是2010年非约束环境人脸检测数据库FDDB FDDB : Main
         FDDB总共2845张图像,5171张,人脸非约束环境,人脸的难度较大,有面部表情,双下巴,光照变化,穿戴,夸张发型,遮挡等难点,是目标最常用的数据库。有如下特点:

           A) 图像分辨率较小,有彩色有灰度,所有图像都小于450*450,最小标注人脸20*20,绝大多数,图片只有一个人脸

           B) 如何使用FDDB数据集?  有其他隔离数据集无限制训练再FDDB测试,和FDDB十折交叉验证两种

              鉴于FDDB图像数量较少,近几年论文提交结果也都是无限制训练再FDDB测试方式,所以,如果要和published methods提交结果比较,请照做。              C) 结果有离散分数discROC和连续分数contROC两种,discROC仅关心IoU是不是 > 0.5, contROC是IoU越大越好;鉴于采用无限制训练 + FDDB测试的方式,  detector会继承训练数据集的标注风格,继而影响contROC,所以discROC比较重要。

  FDDB在非深度学习的年代是极具挑战性的,很少能做到2000误检0.9以上,经典VJ detector在2000误检也只有0.6593,但在深度学习的年代,这个数据库目前也快接近饱和了,FDDB可以看做是资格赛,选手的正式水平请看下面的WIDER FACE。 

第二个是目前2016年提出的,目前难度最大的WIDER FACE WIDER FACE: A Face Detection Benchmark:

WIDER FACE总共32203图像,393703标注人脸,目前难度最大,各种难点比较全面:尺度,姿态,遮挡,表情,化妆,光照等。有以下特点有:

          A) 图像 都是彩色图 ,分辨率普遍偏高,所有图像的框都缩放到1024 ,最小标注人脸 10*10

          B)  每张图像中人脸数偏多,平均人脸12.2/张,密集小人脸非常多;

          C)  数据集分三部分:练集train/验证集val/测试集test,分别占40%/10%/50%,测试集的标注结果(ground truth)没有公开,需要提交结果给官方比较,更加公平公正,而且测试集非常大,结果可靠性极高。

          D)   检测率情况划分为三个难度等级:Easy, Medium, Hard

WIDER FACE是目前最常用的训练集,也是目前最大的公开训练集,人工标注的风格比较友好,适合训练。总之,WIDER FACE最难,结果最可靠(顶会论文也有不跑WIDER FACE的,即使论文中用WIDER FACE训练)。

5 三系列对比-------Faster-RCNN系列   SSD/RPN系列   级联CNN系列

         Faster R-CNN系列:性能可以做到极高,但速度都很慢,甚至不能在GPU上实时;但由于没有在速度方面进行优化,所以 由于慢 而不受关注;

         SSD/RPN系列:有SSH和SFD,都是目前FDDB和WIDER FACE上的最高水平,性能水平与Faster R-CNN系列不相上下,同时也可以保持GPU实时速度,SFD的简化版FaceBoxes甚至可以CPU上实时,极有潜力上ARM; 

         级联CNN系列:有CNN Cascade, FaceCraft, MTNN, ICC-CNN,这一系列是深度学习方法中速度最快的,CPU都在10 FPS以上,级联CNN系列优化后轻松可以在CPU上实时,全面优化后的fastMTCNN甚至可以在ARM上跑起来;

 6  非深度学习和深度学习人脸检测实测对比

         非深度学习中最快的libfacedetection中的multiview_reinforce版本,和深度学习中我优化的fastMTCNN(MTCNN的加速版)做速度对比,

                  测试环境:multiview_reinforce是Intel(R) Core(TM) i7-4770 CPU @ 3.4GHz;

                                      fastMTCNN是Intel(R) Core(TM) i3-6100 CPU @ 3.7GHz,算是持平, 仅比较单核单线程的速度;

                  速度测试:multiview_reinforce是640x480(VGA), 最小人脸48,速度109.3 FPS;

                                      fastMTCNN是640x480(VGA), 最小人脸80,速度100 FPS

                   性能测试:multiview_reinforce 在FDDB上2000误检是0.85,

                                        fastMTCNN在FDDB上2000误检是0.92;

mtcnn 算法性能评估:PC端测试   arm端测试      https://blog.csdn.net/samylee/article/details/78421960

7  mtcnn表现及存在的问题

C++版MTCNN-light只需要OpenBLAS和OpenCV就可以跑了,不需要其他第三方库,用于测试性能完全够用了,但请不要用于实际项目和产品中,因为代码问题较多,

      7.1 场景不同,检测速度不同---问题:检测速度回随着图像北京的复杂的提升而下降

           输入VGA图像,最小人脸设置80,简单背景单人脸速度应该在40 fps以上。但复杂背景或人脸数量增加时,速度会严重下降,这就是级联算法的通病,在MTCNN中尤为严重,以后会详细分析成因和解决办法;

       7.2  设置最小人脸80,实际检测到的最小人脸理论上可以到达52甚至更小。这是由于MTCNN是分类加回归的多任务方法(深度学习都是),回归机制可以检测到最大IoU = 0.65的更大人脸和最小IoU = 0.65更小人脸,

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值