一、人脸识别
- 人脸验证(face verification):输入一张人脸图片,验证输出与模板是否为同一人,即一对一问题。
- 人脸识别(face recognition):输入一张人脸图片,验证输出是否为K个模板中的某一个,即一对多问题。
二、One Shot Learning
One-shot learning就是说数据库中每个人的训练样本只包含一张照片,然后训练一个CNN模型来进行人脸识别。若数据库有K个人,则CNN模型输出softmax层就是K维的。
但是One-shot learning的性能并不好,其包含了两个缺点:
- 每个人只有一张图片,训练样本少,构建的CNN网络不够健壮。
- 若数据库增加另一个人,输出层softmax的维度就要发生变化,相当于要重新构建CNN网络,使模型计算量大大增加,不够灵活。
为了解决One-shot learning的问题,我们先来介绍相似函数(similarity function)。相似函数表示两张图片的相似程度,用d(img1,img2)来表示。若d(img1,img2)较小,则表示两张图片相似;若d(img1,img2)较大,则表示两张图片不是同一个人。相似函数可以在人脸验证中使用:
对于人脸识别问题,则只需计算测试图片与数据库中K个目标的相似函数,取其中d(img1,img2)最小的目标为匹配对象。若所有的d(img1,img2)都很大,则表示数据库没有这个人。
三、Siamese Network
若一张图片经过一般的CNN网络(包括CONV层、POOL层、FC层),最终得到全连接层FC,该FC层可以看成是原始图片的编码encoding,表征了原始图片的关键特征。这个网络结构我们称之为Siamese network。也就是说每张图片经过Siamese network后,由FC层每个神经元来表征。
两张图片的相似度函数可以表示成:
不同图片的CNN网络所有结构和参数都是一样的。我们的目标就是利用梯度下降算法,不断调整网络参数,使得属于同一人的图片之间d()很小,而不同人的图片之间d()很大。
四、Triplet Loss
Triplet Loss需要每个样本包含三张图片:靶目标(Anchor)、正例(Positive)、反例(Negative),这就是triplet名称的由来。
我们希望CNN网络编码输出 尽可能小,
尽可能大。
α称为边界margin。
根据三张图片,定义损失函数:
对于m组训练样本:
关于训练样本,必须保证同一人包含多张照片,否则无法使用这种方法.
同一组训练样本,A,P,N的选择尽可能不要使用随机选取方法。因为随机选择的A与P一般比较接近,A与N相差也较大,毕竟是两个不同人脸。这样的话,也许模型不需要经过复杂训练就能实现这种明显识别,但是抓不住关键区别。所以,最好的做法是人为选择A与P相差较大(例如换发型,留胡须等),A与N相差较小(例如发型一致,肤色一致等)。这种人为地增加难度和混淆度会让模型本身去寻找学习不同人脸之间关键的差异.
五、Face Verification and Binary Classification
除了构造triplet loss来解决人脸识别问题之外,还可以使用二分类结构。做法是将两个siamese网络组合在一起,将各自的编码层输出经过一个逻辑输出单元,该神经元使用sigmoid函数,输出1则表示识别为同一人,输出0则表示识别为不同人。
每组训练样本包含两张图片,每个siamese网络结构和参数完全相同。这样就把人脸识别问题转化成了一个二分类问题。引入逻辑输出层参数w和b,输出表达式为:
另一种表达式:
上式被称为方公式,也叫
方相似度
六、neural style transfer
卷积
我们先来从可视化的角度看一下卷积神经网络每一层到底是什么样子?它们各自学习了哪些东西。
首先来看第一层隐藏层,遍历所有训练样本,找出让该层激活函数输出最大的9块图像区域;然后再找出该层的其它单元(不同的滤波器通道)激活函数输出最大的9块图像区域;最后共找9次,得到9 x 9的图像如下所示,其中每个3 x 3区域表示一个运算单元。
可以看出,第一层隐藏层一般检测的是原始图像的边缘和颜色阴影等简单信息。
继续看CNN的更深隐藏层,随着层数的增加,捕捉的区域更大,特征更加复杂,从边缘到纹理再到具体物体。
Cost Function
神经风格迁移生成图片G的cost function由两部分组成:C与G的相似程度和S与G的相似程度。
Content Cost Function
表示图片内容C与生成图片G之间的相似度
比较C和G在CNN第l层的激活函数输出与
,
中间层越相似,则cost 越小。 方法就是使用梯度下降,不断修正G的像素值,使得J不断减小
Style Cost Function
利用CNN网络模型,图片的风格可以定义成第ll层隐藏层不同通道间激活函数的乘积(相关性)。
例如我们选取第ll层隐藏层,其各通道使用不同颜色标注,如下图所示。因为每个通道提取图片的特征不同,比如1通道(红色)提取的是图片的垂直纹理特征,2通道(黄色)提取的是图片的橙色背景特征。那么计算这两个通道的相关性大小,相关性越大,表示原始图片及既包含了垂直纹理也包含了该橙色背景;相关性越小,表示原始图片并没有同时包含这两个特征。也就是说,计算不同通道的相关性,反映了原始图片特征间的相互关系,从某种程度上刻画了图片的“风格”。
接下来我们就可以定义图片的风格矩阵(style matrix)为:
最终,cost function为: