您的位置:首页 > 移动开发

Andrew Ng's deeplearning Course4Week4 Special applications(特殊应用:人脸识别及神经风格转换)

2017-12-24 19:03 211 查看

一、人脸识别与验证

1.什么是人脸识别



人脸验证就是输入一个图片和姓名/ID,然后去数据库找这人的图像与当前图像进行匹配看看是不是同一个人。

而人脸识别是有一个K个人图像的数据库,而输入仅仅只有一个图像,你就得去数据库中找哪个人最接近输入的这个图像,识别出来(或者没有这个人)。

2.one-shot学习(一次学习)



因为人脸识别只能通过一个样本来学习,因此我们需要解决的就是一次学习问题。而这就需要一个similarity函数,它被用来计算2个图片之间的距离,如果距离小于我们设定的一个值,我们就认为它们是同一个人,反之则不是。那么该如何计算距离呢?我们看下图:



siamese网络将输入的图片经过一系列卷积、池化操作后,变为一个128维的向量,然后通过L2范数的平方来计算2者之间的距离。



正如上图所示,如果是相同的人,那么距离就会很小;不同的人,则距离会很大。



假设f(A)代表输入图像,f(P)代表相同的人的图像,f(N)代表不同的人的图像。

那么我们以||f(A)-f(P)||²-||f(A)-f(N)||²+α <=0来判断是否是同一个人,那么为什么要加α呢?是为了避免全都为0的情况,0-0自然小于等于0。

3.Triplet损失



根据上面所述,我们就可以得到一个损失函数如上图所示,J就是我们所定义的三元组损失函数。



还有一点要注意的是,如果APN是随机选择的,那么d(A,P)+α <= d(A,N)是很容易满足的,我们需要选择一些难度大的,如很接近但不是同一个人的图片集来训练。α就起到了拉大两对之间的距离的作用。

在人脸验证上,我们还可以用二分类,逻辑回归单元进行预测。



如上图所示,将2个图片转换为128维的向量,应用上图的公式去进行预测。在实际中,我们可以将数据库里的图片去进行预处理,这样可以加快识别的速度。

训练集x是一对图片,而y则是0.1集合。如下图所示:



二、神经风格转换

1.什么是神经风格转换



如上图所示,c代表原图,s代表风格图,生成的图片既具有c的内容,还具有s的风格,这就是神经风格转换。

2.深度网络在做什么



我们选择第一层的一个单元,发现有九格图片能最大化激活单元。可视化如下图所示:



第一层的隐藏单元通常会找一些简单的特征,如斜条、边缘、颜色阴影啊等等。



第二层找到了一些竖条纹,半圆形,橘红色的纹理等等。这时我们需要一个东西:相关系数,即当图片出现这种垂直纹理时,该处同时又是橙色的可能性。







由上面5张图我们可以看到由最简单的边缘到质地再到组合出的复杂物体。

3.代价函数



神经风格转换的代价函数公式如上图所示,为J(G)=αJcontent(C,G) + βJstyle(S,G)



我们需要随机生成一个图片G,这可能是一个像素噪点图,然后不断运行梯度下降直到最小化代价函数J(G).

4.内容代价函数



假设我们使用隐层l来计算内容损失。让a[L](C)和a[L](G)称为l层的激活。如果2者很接近的话,就代表2者具有相似的内容。
具体的计算公式为Jcontent(C,G)=1/4*mh*mw*mc *||a[L](C)-a[L](G)||²

5.风格代价函数



假设我们用l层来代表风格的激活,这个l既不能太浅,也不能太深。



上图分别代表了L层的风格代价和生成的图片G的代价,以及最终的风格代价函数。



假设能多选则一些层,去计算风格代价函数,并按照lambada权重进行相加,风格代价函数可能会更好。

三、一维到三维推广



类似于2维过滤的方法,我们也可以将其应用到1维和3维上。14*1的序列与一个5*1的过滤器(16个),最终输出10*16,再与1个5*16(32个)的过滤器,最终输出6*32。



三维的方法与二维及上面的一维类似,这里不过多阐述。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: