暂略。
参考:https://blog.csdn.net/hjimce/article/details/49955149
本文主要记录2013年CVPR的一篇利用深度学习做人脸特征点定位的经典paper:《Deep Convolutional Network Cascade for Facial Point Detection》,论文的主页为:http://mmlab.ie.cuhk.edu.hk/archive/CNN_FacePoint.htm 。这篇paper是利用深度学习搞人脸特征点定位的开山之作,想当年此算法曾经取得了state-of-art 的结果。后来face++发表的几篇paper的思想,都是在这篇paper的算法上进行扩展的。
在之前学过的各种深度学习模型中,一般就只有一个CNN,可这篇paper是由十几个CNN组成的。文献中如下网络结构图片:
具体内容看链接,讲的很好。
这是2013年face++的大牛们提出粗到精人脸特征点定位算法paper:《Extensive Facial Landmark Localization with Coarse to fine Convolutional Network Cascade》,基本上是在《Deep Convolutional Network Cascade for Facial Point Detection》的基础上做了一点修改。
参考:https://blog.csdn.net/hjimce/article/details/50099115
相比较汤老师的文章,本篇文章的创新点:
1.网络输入不是人脸检测器检测到的人脸,而是用CNN预测人脸的bounding box。这个对初始level定位精度提高非常多,当我们输入一张图片的时候,我们用CNN,分别预测出Inner points和Contour points的最小包围盒:切记:上面的两个部分的特征点预测是完全分开的,各自的网络可以进行并行训练、预测。就像上面,两部分的分开预测,第一层次的目的都是为了获得Bounding Box。
在这篇paper的算法中,被预测的68个人脸特征点分为两个部分。
第一部分: 主要是人脸五官的特征点预测,这部分预测点的个数为51,在文献中又把这部分特征点命名为:Inner points,貌似文献中并没有显示51个点,如下图所示:
第二部分: 用于预测人脸外轮廓的17个特征点。我们又称之为:Contour points ,请记住Contour points和Inner points这两个名词指的是哪部分特征点,我后面都使用这两个词进行讲解。
Inner points和Contour points这两部分相互独立,用不同的网络结构进行预测,也就说这两部分可以并行计算,其中contour point的预测比较简单,paper的大部分精力都花在讲解inner points 上面,算法也都是讲解inner points,因为inner points是五官特征点的位置,定位比较复杂,所以才要花费更多的精力去提高精度。
一、Inner points预测
Inner points的预测是一个四层次的DCNN模型。level 1就是我们前面讲的预测bounding box;level 2 用于这51个点的初始定位,也就是粗定位;level 3 用于精定位;level 4 用于更精定位(这一层次对精度提高很小)。
第一层次(level 1): 这个就是我们上面讲的预测最小包围盒。输入一张完整的图片,我们通过这一层CNN,预测这51个点的最小包围盒(Bounding Box)。Bounding box 包含矩形左上角的坐标、右下角的坐标,也就是网络的输出是一个4维的向量:
网络的输入: 把level 1得到的最小包围盒中的图片裁剪出来,作为输入,进行51个点人脸特征点预测。
网络的输出:因为我们是要预测51个特征点,所以CNN的输出是102神经元。
第三层次(level 3): 因为我们上面一层的网络,已经预测到了51个特征点,然而这51个点的位置还不够高,我们需要对其做进一步的精定位。
第二层次预测的51个点,之所以精度不够高,是因为我们输入的图片是大的图片,是对全局的统一预测(具体解释可以参考文献《Deep Convolutional Network Cascade for Facial Point Detection》),容易受冗余信息的干扰。说的简单一点吧:假设你要定位嘴巴的特征点,你的输入图片就应该只有嘴巴部分的区域图片,这样的精度才会比较高,而不是你把一整张人脸图片作为输入,这样冗余信息太多,容易干扰到我们的嘴巴区域的定位。
因此我们这一层次的网络,就是要利用level 2的网络预测到的51个点,把五官的图片裁剪出来,然后对五官进行分别的定位。具体的示意图如下:
网络输入:利用level 2的51个点,对五官图片裁剪,把裁剪的五官,进行分开训练、预测。因为我们要各个器官分开训练,因此自然而然本层需要有4个CNN模型,每个模型用于预测各自的特征点。
网络输出:各个器官的特征点。
第四层次(level 4):这一层次的输入,与文献《Deep Convolutional Network Cascade for Facial Point Detection》相比,稍稍做了修改。跟我想象的有点不一样,paper通过把level 3的各个五官预测结果,计算各五官的旋转角度,然后把五官都摆正了,作为第四层次网络输入图片,然后在进行预测。
二、Contour points预测
这17个点的预测比较简单粗暴,就只是两个层次的DCNN模型,这两个层次说的简单一点就是类似上面Inner points的第一、二两个层次网络。
第一层次:这个在前面已经讲过了,也就是预测Contour points的最小包围盒(下图中的底部示意图)。
第二层次:CNN直接预测这17个特征点。
这个预测过程,没有精定位过程。也就是没有第三、四层次的CNN精定位,一来是因为这些脸庞特征点的图片区域比较大,如果加上第三、四层次的话,会比较耗时间;二来是因为paper还没想到比较好的方法,用于精定位。
总结:总的来说呢,这篇文献的思想和《Deep Convolutional Network Cascade for Facial Point Detection》的思想是一样的,看文献的名字就知道了,是在这篇paper的基础上,进行改进的一种用于多个特征点预测的网络结构。因为paper《Deep Convolutional Network Cascade for Facial Point Detection》只预测5个特征点,于是face++他们就在这篇文献的基础上做了改进,使网络结构可以用于很多个特征点的预测。
从这篇paper的创新方面讲:
1、文献把人脸的特征点定位,分开成两个部分了:Inner和Contour两部分特征点,进行分开预测
2、在Inner的预测部分,从level 2 开始把五官裁剪分开,进行精定位。
3、在每个器官的每个特征点的定位方面,文献并没有像《Deep Convolutional Network Cascade for Facial Point Detection》的方法,把每个特征点的都用独立的网络进行定位,不然如果按照《Deep Convolutional Network Cascade for Facial Point Detection》的思想,51个特征点的定位,精定位的每一层次就要有102个CNN模型(因为《Deep Convolutional Network Cascade for Facial Point Detection》文献每个特征点的精定位是用了两个网络进行训练、预测,然后用两个网络的输出作为平均值,所以是102个网络),这样太耗时间了,万一我要定位300个特征点,不得崩溃。因此face++的这篇paper并没有把每个特征点分开独立训练、预测,仅仅把各个器官分开训练。
4、多了一个bounding box 层,可以大大提高特征点粗定位网络的精度。
具体细节:https://blog.csdn.net/hjimce/article/details/50099115