吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换

人脸识别:验证一张人脸是否在库中,同时还有判断是否为真人。

 

1.One-Shot 学习

Similarity 函数   d(img1, img2):图片两两对比差异

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换

如果有新的人加入不需要重新训练,只需将照片放入库中即可。

 

2.Siamese网络

目的:把人脸图像放入网络中得到编码,并做比较。

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换

这里有一个技巧:可以将库中的图像x(2)的编码f(x(2))保存下来,预测的时候只计算f(x(1))即可。

3.三元损失函数 Triplet loss

目的:通过学习神经网络的参数,得到优质的人脸图像编码。

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换

我么想要左边的编码相似,因为这是同一个人,我们希望右边的编码差异大,因为他是不同的人。 
三元组损失就是,我们希望anchor图片和positive图片更近,anchor图片和negative图片更远。我们可以用以下公式表示: 

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换

其中∂是超参数,它不小于0.2,这个∂是为了确保网络对于所有的编码不会总是输出0而设置的,也为了确保它不会把所有的编码都设成互相相等的。 
三元素损失函数的定义基于三张图片,分别是A,P,N,其中A,P是同一个人,A,N是不同的人。损失函数如下: 

                         吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换

通过最小化上述的代价函数,达到的效果就是L(A,P,N)=0,整个网络的代价函数应该是训练集中这些单个元组的损失的总和。如下:

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换

注意: 应该尽量选择难训练的(A,P,N)对,即吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换,这样才能竭力使d(A,P)变大,使d(A,N)变小。

 

4.面部验证与二分类(Face verification and binary classification)

可以将人脸验证当作一个监督学习,创建一个只有成对图片的训练集,不是三个一组而是成对的照片,目标标签是1表示一对照片是同一个人,目标标签是0表示图片中是不同的人。如下图所示: 

                        吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换

 

5.神经风格转换

神经风格转换:就是利用一张内容图片和一张风格图片,生成一张新的图片。 如图所示:

                                         吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换

深度卷积神经网络究竟在学什么?

依次对各个层进行如下操作:

  • 在当前层挑选一个隐藏单元;
  • 遍历训练集,找到最大化地**了该运算单元的图片或者图片块;
  • 对该层的其他运算单元执行操作。

1. 浅层的图片看到的图片块越小,只能识别一些纹理和边缘阴影等

2. 越深层的图片可以看到的图片块越大,可以识别到一些复杂的事物

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换

代价函数

风格迁移的目标是由内容图片C和风格图片S,生成最终的风格迁移图片G。

定义代价函数 

J(G)=αJcontent(C,G)+βJstyle(S,G)

  • J_content(C, G): 代表生成图片G的内容和内容图片C的内容的相似度
  • J_style(S, G): 代表生成图片G的内容和风格图片S的内容的相似度
  • alpha, beta: 两个超参数用来表示以上两者之间的权重

执行步骤:

  • 随机初始化生成图片G,如大小为(100, 100, 3);
  • 使用梯度下降算法最小化上面定义的代价函数 J(G)。

其中,内容代价函数 

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换(l选择中层,因为浅层太纹理,深层太具体)

风格损失函数  

  • 对比图片l层神经网络上各个通道之间的相关性
  • 首先计算风格矩阵(Style/Gram Matrix)K通道**函数与K’通道**函数的乘积在宽(i)x高(j)的加和
  • S与G的相关性为两个风格矩阵的差的平方和在所有不同通道上的加和

对于两个图像,也就是风格图像和生成图像,我们需要计算一个风格矩阵,更具体一点,就是用l层来测量风格我们设a(i,j,k)为隐藏层中(i,j,k)位置的**项,i,j,k分别代表位置的高,宽,以及通道数。现在我们要做的就是去计算一个关于l层和风格图像的矩阵如图所示:

  吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换                                         吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换

       同样的我们对生成的图像也进行这个操作。我们先来定义风格图像,设这个关于l层和风格图像的G是一个矩阵,这个矩阵的宽度和高度都是l层的通道数,在这个矩阵中,k和k′被用来描述k通道和k′通道之间的相关系数,具体的用符号i,j表示下界,对i,j,k位置的**项乘以同样位置的**项,也就是i,j,k′位置的**项,将它们相层,然后i和j分别到l层的高度和宽度,将这不同位置的**项加起来,如下公式所示: 

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换即Jstyle(S,G)

 

6.一维到三维推广(1D and 3D generations of models)

2D to 1D

  • 如心电图扫描,可以将电极信号转化为一个序列
  • 1D数据只有宽没有高,卷积核再一维的宽上进行扫描
  • 通常一维数据我们使用循环神经网络处理,用卷积神经网络的情况较少

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换

2D to 3D

  • 如CT扫描(一种X光扫描,通过CT扫描,可以输出身体的3D模型),电影等
  • 3D数据不只有宽和高,还有深(),卷积核在3D立体上进行扫描
  • 注意3D图片深度与通道的区分,通道是图像像素的深度,不是这里的立体图像块的深度

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.3) 人脸识别和神经风格转换