当前位置:   article > 正文

吴恩达《深度学习专项》笔记(十三):CNN应用:人脸识别与风格迁移_吴恩达 深度学习 人脸识别

吴恩达 深度学习 人脸识别

在这堂课里,我们要学习两个具体的应用:人脸识别、风格迁移。

相信大家已经在很多地方见识过人脸识别应用了:在火车站,要通过身份证和人脸核实身份;办理业务时,可以用手机完成人脸识别以核实身份;进办公楼时,员工只要刷脸通过就可以打开门禁。通过这节课的学习,我们能够学会如何用CNN完成人脸识别。

神经网络风格迁移是一项有趣的应用。它利用了CNN捕捉图像抽象信息的特点,能够把一幅图像的风格转移到另一幅图像上,从而生成一幅新的图像。这项技术不需要从头训练网络,学完这门课后,我们能快速地用代码实现神经网络风格迁移。

课堂笔记

人脸识别

准确来说,在人脸识别(Face Recognition)任务中,会给定一个有 K K K个人的数据库。之后,每一次识别都会输入一张图片,输出这张图片是 K K K个人中的哪一个,或者没有检测到相关人士。

有一个与这个相关的任务叫做人脸验证(Face Verification)。这个任务稍微简单一些,输入是一张图片和一个标记身份的数据(比如身份证号),要求输出图片中的人是否符合该身份。

单样本学习

按我们之前学的方法,假如我们在 K K K个人的数据库上做识别(分类)任务,应该套用一个CNN模型,并在模型最后接一个 K + 1 K+1 K+1类的softmax,表示输入图片是K个人中的哪一个,或者都不是。

但是,这样的架构不适合人脸识别任务。以公司的门禁识别为例,这种方法有如下的缺点:

  1. 每来一个新同事,模型就要重新训练一次。
  2. 每个人都得上传大量的个人照片供网络训练。

理想情况下,我们希望模型能从一张人脸照片中学会分辨这张人脸,这样每个新同事只需要上传一张照片即可。这叫做单样本学习(One-shot Learning)。

为了完成单样本学习,我们可以从另一个角度来建模人脸识别问题:如果输入的人脸和数据库里某张人脸极为相似,我们就说识别出了这张人脸;否则,就说没有识别到有效的人脸。

这样,人脸识别问题就被转换为了一个求两张图片相似度的问题。我们可以让网络学习一个输入是两张图片,输出是二者相似度的一个映射。

孪生网络

在完成和相似度有关的问题时,一种常见的做法是使用孪生网络(Siamese Network)。

假设网络的倒数第二层有128个神经元。在普通分类网络中,这128个神经元输出的长度为128的向量会被输入进最后的softmax层。而在孪生网络中,我们要去掉softmax层,并用这个没有sofrmax的网络 f f f分别输出两张图片 x ( 1 ) , x ( 2 ) x^{(1)}, x^{(2)} x(1),x(2)对应的128维向量 f ( x ( 1 ) ) , f ( x ( 2 ) ) f(x^{(1)}), f(x^{(2)}) f(x(1)),f(x(2))。这样,每张图片有了唯一对应的一个128维向量,这个向量可以看成是该图片的编码(encoding)。而我们又知道,对向量求相似度是很方便的。我们可以利用两张图片的编码求出相似度。

说起向量的相似度,最容易想到是向量间的距离 ∣ ∣ v − u ∣ ∣ 2 ||v - u||^2 ∣∣vu2。因此,我们可以i设法让网络学会这样一种关系:

  • x ( i ) , x ( j ) x^{(i)}, x^{(j)} x(i),x(j)是同一人,则 ∣ ∣ f ( x ( i ) ) − f ( x ( j ) ) ∣ ∣ 2 ||f(x^{(i)}) - f(x^{(j)})||^2 ∣∣f(x(i))f(x(j))2很小。
  • x ( i ) , x ( j ) x^{(i)}, x^{(j)} x(i),x(j)不是同一人,则 ∣ ∣ f ( x ( i ) ) − f ( x ( j ) ) ∣ ∣ 2 ||f(x^{(i)}) - f(x^{(j)})||^2 ∣∣f(x
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/366337
推荐阅读
相关标签
  

闽ICP备14008679号