1.人脸验证与人脸识别
验证:输入为图像、名字、ID等,输出为输入的图像与其声明的是否是同一人;
识别:输入为图像,输出为该图像是否为数据库中的图像之一,如果是给出ID。
2.人脸识别较人脸验证更困难,在之后课程中先建立一个人脸验证模型,如果准确率优化到一定程度再逐步应用到人脸识别中
1.在人脸识别任务中最需解决的问题是“一次学习问题”,该问题是指通过数据库中保持的一张图片就能在此识别出统一个人的其他图像。
2.similarity 函数
d(image1, image2) = degree of difference between images,非明显如果输入为同一人的两张照片,输出值会非常小;如果是差异很大的两个人的照片,输出值会非常大。如果d(image1, image2) < Tau(阈值)则输出人为二者为同一人;反之,不同。由此可以解决人脸验证问题。 如果要解决人脸识别,就是要讲输入image与系统中所有的数据进行对比,看那个d值最小,则为该人;若每次对比输出值都较大,则该人不在数据库。
1.构建CNN对输入图像进行编码,即使用CNN某一全连接层给出的特征值作为输入图像的编码(f(x_i))
2.计算d函数值,根据该值判断是否是同一人
1.三元组损失函数:当检测的图像A(anchor)与相近的图像P(positive)对比时返回的距离近,而与差异大图像N(negative)对比返回的距离远,该函数可处理三种图像,因而成为三元组函数。
为了防止式子得出无用的结果(比如全是0),我们增加一个超参数:间隔(margin)alpha(比如:0.2)
也就是说d(A, P)要比d(A, N)大很多才可以,如上图所示,如果d(A, P)=0.5,d(A, N)=0.51,d(A, P)虽然小于d(A, N),但相差只有2%,这显然不如以证明P,N的差距,因此我们在设置间隔参数时至少令alpha = 0.2
因此三元组损失函数定义如下:
如果这个损失函数返回的是一个正直,那么将继续优化,直到输出为0或一个负值,那么整个网络进行梯度下降的损失函数为:
注意在训练时A和P需要成对出现,因此,如果我们要识别的人有1K个,那么数据需要10K个。
2.选择Triplet的A,P,N
如果在保证A和P成对选择(即同一人的不同照片)而N随机选择,那么很容易满足Triplet公式,这样不利于训练和应用模型,因此我们要选择d(A, P)和d(A, N)比较接近的P和N这样算法才会竭尽全力的训练来满足Triplet损失函数。
1. Triplet是学习人脸识别网络参数的有效方法,当然还有其他的学习参数的方法,即将这个问题转化成二分类问题:
这种方法就是可替换Triplet的思路,对于f(x_i) 和f(x_j)都输入到逻辑回归中进行处理,如果相同则Y_hat = 1, 如果不同则 Y_hat = 0。逻辑回归处理的公式如下:
也就是说在这种方法中是成对的选择图像进行模型参数训练,如下图
1. 示例
1.CNN网络的从浅层到深层所学到的特征呈先简单后复杂,先粗糙后细化的规律,如果可视化各层学习到的特征,我们会得到各层的特征如下:
Layer1:对边缘特征进行学习;
Layer2:对复杂的形状或者模式进行学习;
Layer3:对特定的图像进行学习;
Layer4:对特定的物体进行学习;
Layer5:对特定种类进行学习;
1. 神经迁移的代价函数:通过指定代价函数可以获取不同层次的特征。 首先我们需要定义一个关于G(Generated image)的代价函数J来评判生成的图像G的好坏,使用梯度下降法来最小化J(G)以便生成这个图像。
2.找到G的步骤
(1)随机初始化, G: 100x100x3(白噪声)
(2)使用梯度下降最小化J(G)
1. J_content公式
tips:l选择如果是比较浅的层,那么生成的图像更接近于content图像,如果太深则更接近style图像,因此我们需要选择较中间的隐藏层。
1.图像风格的概念
图像风格就是在网络的l层中,不同通道之间激活项的相关性。比如在卷积网络的某一层中,通道1检测的条纹,通道2检测颜色,如果输入图像中有棕色的条纹,那么通道1 和 通道2之间就是强关联性,而各层通道之间的关系总和就构成了图像的风格。
2.相关系数矩阵G[l]
相关系数是评估不同通道间激活项的相关性,其计算公式如下:
3.J_style(S, G)计算公式
如果将关联性计算应用到各层中,会让结果变得更好,需要给各层的J(S, G)设置权重
4. 代价函数
1.一维数据处理的实例:心电图(EKG)
2. 三维数据处理的实例:CT
3D卷积也可以用于电影检测方面,如果将电影的每一帧作为一个切片,输入到CNN中用以运动检测等项目。