卷积神经网络(五)——面部验证与神经风格转换

卷积神经网络(五)

——面部验证与神经风格转换

(原创内容,转载请注明来源,谢谢)

一、概述

本文主要讨论面部验证和神经风格转换两种技术,都是CNN的实际应用。

二、面部验证

1、人脸识别与面部验证

总体来说,面部验证是人脸识别的基础。面部验证相对而言数据量小,准确度要求也没有那么高。

2、一次学习

一次学习(one-shot learning),是用于解决面部验证常用的问题。

存在问题:1)面部验证常用于考勤等系统,通常来说没有太多的训练数据,每个员工可能就录入一张照片。而实际验证的时候,会是各种样子出现在人脸识别系统中。2)另外,公司员工人员变动是常事,如果采用训练的方式,则每次人员变动都需要重新训练整个网络。

由于数据量太少,无法进行神经网络的训练,因此面部验证用了称为一次学习的方式,核心思想即比对两张图片的相似性。

记d(图1,图2)为两张图的差异值,当d小于等于某个阈值,则认为这两张图是同一个人。

因此,one-shot的目的,在于训练出一个系统,使得同一个人的不同照片的d很小,不同的人照片的d很大。

另外,对于公司人员变动,只需要修改基准照片,增加或删除基准照片即可。

3、slamese网络

上述的训练方式,可以采用一种称为slamese网络来实现,即对基准照片采用cnn,在网络最后去掉softmax层,认为最后一层全连接层的输出,即为该图片经过这个神经网络的编码,记为函数f(x)。

两个图片之间的差异,可以用||f(x1) - f(x2)||²来表示,记为d(x1, x2)。训练的目标是同一个人的不同照片求出来的这个值很小,不同人的照片这个值很大。

4、triplet损失

三元组损失(triplet loss),是slamese网络训练的要素,拿三张图片,一张是基准图片(anchor),一张是和基准照片相同人的照片(positive),一张是不同人的照片(negative)。

拿anchor分别和positive和negative计算||f(x1) - f(x2)||²,会得到两个数值d(A, P)与d(A, N),最终训练出来的函数旨在:

||f(A) - f(P)||²- ||f(A) - f(N)||²+α ≤,其中α是一个较小的正数,目的是拉开d(A, P)与d(A, N)的数值的差距。

代价函数记为max(||f(A) - f(P)||²- ||f(A) - f(N)||²+α, 0)。这里训练集需要注意的是,需要同一个人的不同照片,这样才能计算d(A, P),因此建议1万张图片中,包含1千个人左右,这样每个人10张照片。

注意事项:由于相对于P,N如果从图像库中随意抽出一张图片,很容易使得d(A, P)小于d(A, N)。这样训练出来的神经网络不够好,因此最好选择图片的时候,选择P和N比较相似的图片,如尽量着装、发型等较为相似的人的照片放在一起训练。

训练过程是采用梯度下降+反向传播,来优化代价函数,进而训练处神经网络。

这个网络的输出,类似一个二分类问题,输出函数可以用下面的函数定义,训练参数也主要是训练w和b。这里输出加了sigmoid,保证输出结果在0~1之间,表示不是同一个人,1表示是同一个人。

需要说明的是,因为基准照片已经存在,因此可以提前训练好并且直接存储对应的f(x)的值,则每次新来一个照片,只需要计算这张新照片的f(x),并且从存储调出对应的y,计算二分类结果进行判断。这样每次判断的速度会加快。

三、神经风格转换

1、概述

神经风格转换,是CNN的另一个实际应用,目的是将两张照片合成一张照片。其中一张照片提供内容(content,简称C),另一张照片提供风格(style,简称S),合成的照片(generated image,简称G)既含有C的内容,又含有S的风格,如下图所示:

深度神经网络处理图片时,在不同的层,处理不同的内容,前面的层主要处理识别线条、纹理等内容,而后面的层则处理识别更复杂的图像。

2、训练过程

1)初始化G的时候,可以随便初始化一个图,这个图可能是一堆混杂颜色的噪音图等。

2)对C和S正向神经网络计算输出,并反向传播,优化代价函数。

3)重复步骤2,直到代价函数比较小,输出结果。

3、总代价函数

由于输入的是两张图片,而且一张取内容,一张取风格,因此代价函数是由这两张照片的代价函数加权求和的结果。

采用加权求和,说明C和S的代价函数计算方式不一样,后面会逐一介绍。

4、内容代价函数

内容代价函数为了让C的内容在G中也有相似的内容。

内容相似很好理解,两张图片内容相近,则一张图片的每个位置的输出,在另一张图片也应有类似的输出。

从数学角度来看,即两张图片对应的矩阵,每个对应位置的元素的值,都应该接近,则表示两张图片的内容相似。

计算方式:使用VGG神经网络来计算,取隐藏层第l层,这里的l最好是中间的层。定义这一层的输出是a[l],则内容代价函数如下图蓝色字体部分内容,乘以1/2目的是归一化。

5、风格代价函数

风格代价函数为了让S的风格在G中也有相似的风格。

风格相近的判断,并不能像内容相近那样,简单的要求对应位置的数值相近。

考虑到神经网络的某一层l,其为nH*nW*nC,即一个图片的多个信道,现在从这里入手来考虑图片的风格相似。

当一幅图片中,出现条纹的地方都是黄色的,如果另一幅图片也具有这样的性质,则可以认为两幅图片的风格比较相似。而处理条纹的信道和处理颜色的信道通常不在一个信道中。

因此,这两个信道对应位置的元素相乘,会得出一个值。

如果另一个图片和这个图片风格相似,这同一层,同两个信道的对应位置元素相乘,得到的值应该和之前那个图片的值相近。

这就是处理风格相似的原理。

从数学角度,定义第l层,第k个信道,第(i, j)位置的输出为a[l]i,j,k。第l层第k和k’信道的对应位置元素乘积定义为符号G[l]kk’,则G的值如下图所示。这个G又称为gram矩阵。

进而,定义出第l层的代价函数如下图所示,其中前面乘以1/(2nh*nw*nc)²是归一化项。这里两个G都是矩阵,相减需要采用F范数(frobenus norm)计算方式。

因此,总的风格代价函数是所有层代价函数的求和,这里给每一层加上一个不同的权重λl。

至此,就完成神经风格转换的计算。

四、不同维度的卷积计算

二维卷积已经很熟悉了,这里可以推广到一维和三维,比较简单不再赘述,直接附图。

——written by linhxx 2018.03.14

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180314G0MCMT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券