帖子

人脸识别初学者,不能错过的4大核心知识点!

[复制链接]
  • TA的每日心情
    开心
    2018-10-31 09:40
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    27270  楼主| zhaoliyuan1973@ 发表于 2018-11-28 16:49:24 1#
    首先我们来看一下检测跟踪:检测是将图像中所有人脸的位置全部确定出来;跟踪是对于已经认定的人物,持续地抓出他一段时间内人脸框或者人脸位置的变化情况。
    当形成了一系列的跟踪串后,需要对跟踪串进行质量评价以及帧评价抓拍。挑选出跟踪串中质量最高的照片,这张照片就是人脸的抓拍照。
    得到人脸抓拍照后,可以在不同的照片库中对其进行检索,再通过其相似度来判断照片中的人是谁,或者可能是谁。
    不管是静态图像中的人脸识别,还是视频中的人脸识别,核心都是人脸的特征提取。根据机器计算能力的强弱,可以把特征提取的方法分为传统手工设计的特征、神经网络的特征,以及基于深度学习的特征。

    01人工设计的LBP特征
    在说LBP特征之前,我们先回顾一下特征设计,特征设计最重要的是鲁棒性。比如说一张图片可能被加了不同的光照,有一些角度旋转,或者是被放大缩小。那么怎样使得这个特征在不同的光照旋转或尺度变化中,具有稳定的表达呢?这是特征设计中一个很重要的问题。
    说完这个问题以后,我们再看一下LBP特征的具体方法:
    11.jpg
    给定一张图像,能够提取图像中间的每一个像素点以及周围8个与它相邻的像素点。将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。
    这样,3*3邻域内的8个点经比较可产生8位二进制数,即得到该窗口中心像素点的LBP值,来反映该区域的纹理信息。
    试想一下,LBP特征怎样与我们刚才说的鲁棒性相对应?
    我们看一下光照的鲁棒性:因为LBP特征其实是在某一个像素点以及它的临域来取值,这个时候如果外界施加了很强的光照,我们可以认为在局部的小区域内,它的光照施加值或者施加的幅度是一致的,这样就形成了局部的光照不变性
    而对于旋转或尺度,如果按照一定的规则来构建二进制串的话,它其实是有旋转不变性。对于尺度来说,就相当于用图像的一个像素点以及它的邻域来构建LBP特征,如果它的尺度发生变化,仍然是可以通过图像中间的某一区域块,以及它的邻域区和邻域块来构建LBP特征。
    当我们定义了LBP特征以后,人脸识别的特征提取如下图所示。
    12.jpg
    首先需要把输入的原始图像转换成LBP图像,其次在LBP图像上进行分块,对于每一块构建一个值的直方图,最后再把所有区域的直方图一次连接到一起作为特征向量接受下一级的处理。
    这里面区域的划分以及LBP图的形成,都有很多不同的变种,这些工作在原始LBP的技术上面也得到了充分的发展。
    但是很容易看出,LBP特征其实会有很多问题,比如图片中的人脸出现了一定的侧脸,形成的直方图很有可能与原始的直方图有很大差异性,或者被拍者出现了一些极端的表情,原始的分块方式很可能就不再适用。
    总而言之,简单的LBP特征对真实复杂的人脸识别难以适应,复杂的特征非常依赖于专家经验,难以设计。
    02 神经网络特征
    当机器拥有强大的计算能力,我们更多地会采用自动学习的神经网络特征。
    神经网络特征其实是模拟了人类的细胞或者神经元的传导机制,包括一些权重的连接,对输入信号的处理等。
    从局部到中层再到高层,类似于一个不断融合和汇总过程。对应到人脸上其实是一个很好的表达形式,一开始可能关注于人眼的局部,中层特征关注于人眼的区域,高层特征则更加关注人脸的整体性。
    13.jpg
    现在流行的卷积神经网络,它有两个关键的模块,第一是卷积模块。正如我们刚才所说,构建一个全部连接的神经网络,它的参数量非常大而且可能会有冗余信息。
    所以在全连接的技术上面,研究学者提出了局部连接的神经网络。比如可以把眼睛的区域连接到固定的神经元上,嘴巴的序列连接到一个固定神经元上,但这样的过程仍然会有很多冗余计算。所以在此基础上,业内又提出了卷积神经网络,用很多不同的卷积和对图像整体来进行特征提取。
    卷积神经网络第二个重要的模块是池化,对某一个区域的整体来进行一些操作。
    通过这种池化的操作,能够一定程度上克服图像的一些旋转和局部的细微变化,从而使得这个特征的表达更加稳定。
    因为卷积的高效特征提取以及池化的局部不变性,卷积神经网络在图像识别领域大放异彩。

    03 深度学习人脸特征提取的公开方案
    下面我们来看一下,基于深度学习的人脸特征提取,一些比较有名和公开的方案。
    首先是卷积神经网络在人脸识别中的奠基之作,2014年FaceBook提出了一种名为Deep Face的方法。
    14.jpg
    这个方法用到了三维的人脸对齐,更重要的是它开启了人脸识别的特征提取模型训练的方案,引入了一种更新更好人脸特征提取的方案。经过很多层的卷积神经网络,最后接入到一个4000类的人脸分类的任务中去,并在这个模型的训练过程中间形成一个特征的表达。
    这个特征的训练过程,其实是利用了图像分类的原理,基于这样一套方法, FaceBook提出的这个方案能够很好的在开放环境中间进行人脸识别。除了技术之外,在这里我们还要考虑另外一个因素——数据。
    这个工作使用了大概400万张照片,这个数据量相对于当时的传统方法来说是非常巨大的,所以这个工作其实也一定程度上的反应了数据取得成功。
    接下来是港中文提出的DeepID方法,在FaceBook基于分类任务的基础上,提出了一些额外的优化函数设计,主要是将优化目标从单独的分类变成了分类与比对相结合的方案。这个方案更加接近于我们实际中的使用。

    15.jpg
    这个方案能够使得分类比对相互促进,使得表达能力更加的强大。因为港中文的的数据远远少于FaceBook之前的工作,为了弥补数据量的不足,港中文的工作也提出了将人脸划分成不同的区域、尺度,通过尺度和区域特征的融合,达到效果的最大化。
    人脸特征提取里面最近最经典的论文,是谷歌在2015年提出的FaceNet。我们之前说过,Facebook提出的方法其实利用了分类准则,使得特征具有类别的区分性,而港中文的方法面对着我们最终要使用的人脸相似度比对,加入了一些人脸比对的准则。
    谷歌的方法表现更加直接,即根据人脸比对来进行优化函数的设计。这个优化函数可以理解成,当我们有一个锚点,同时又有同类别的另外一个样本,以及不属于这个类别的样本。我门的目标就是使得同类之间的样本距离足够小,不同类的样本距离足够大。这种思路隐含着类内距离内间距离的同时优化,可以看成是人脸特征比对定制的一个目标函数。
    当然,谷歌提出的方法同样是基于他们后端庞大的数据库来构建,论文中间宣称他们已经有超过了2亿张的图像。此方法也更加符合工业界的应用,因为工业界不缺样本。

    04 人脸识别的进程
    除了算法和方案,我们仍然需要关注最近人脸识别的发展进程。
    对于学术界而言,可能大家会比较关注一些优化函数的设计。举个例子,如果直接利用分类准则去训练模型的话,假设有十类的分类任务,那么模型训练后特征的分布就如下图所示,是散斑状。
    对于这种形式有一些容易混淆的样本,使得它的实际分类准确率没有那么高。目前学术界针对这样的情况有几种处理的方案:
    第一种基于类中心的优化,把它从一个散斑状的状态变成空间中间团聚的状态;还有一些是这个散度不断的减小,使它类似于发射的直线。还有一些是几何球面的约束,来优化最终结果。
    16.jpg
    工业界则可能更加关注数据迭代的构建,这里面有个词叫涟漪效应。多涟漪效应,或者说多数据的涟漪构建,其实就是相当于利用某一个特定场景的数据,来提升针对这个场景所训练出的模型效果。同时又能将这个场景的数据与其他场景的数据结合起来,提升通用的泛化能力。
    当然,一种典型的数据迭代模式,是我们提供了一些算法、集成上线、上线以后要进行不断的数据回收、清洗筛选,最后这些数据又能够充分加入到算法优化过程中去。
    这里面我们要强调的是,好的数据带来的提升往往大于好的算法,但处理海量数据的能力还需要有强大的算法支持。