吴恩达-deeplearning-第四课卷积神经网络-第四周 课程笔记 神经风格转换与人脸识别
课程来源:网易云课堂与coursera
一、神经风格转化
1、理论
- 问题描述:给定一张需要转化的内容图像(C)一张想要转化成的风格的图像(S),通过无监督学习的方法将其转化为有S风格的内容图像G。
- 解决方案:对C、S、G三个图像定义一个损失函数J,在对损失函数的优化过程中完成对G的训练,也就是说C、S是固定输入,G是通过训练优化的参数。
- 损失函数J分为两个部分:内容损失函数,与C、G有关;风格损失函数,与S、G有关。
- 内容损失函数定义:C图像的某一层的卷积输出与G图像的某一层的卷积输出的相似程度,公式如下,C和G的大小都是(nH,nW,nC),a表示某一层**层的输出:
- 风格损失函数定义:定义Gram matrix表示图像的风格表征,也就是下面公式中的Gij。计算图像S和图像G各自风格表征的接近程度。
这个是每一层的风格损失值的加权和,风格损失计算方法如下:
其中,Gram matrix的定义是,最后得到的矩阵是nc*nc,每一个元素都一定程度代表对应的两个通道之间的相似程度。
- 注意,这里内容损失函数只计算一层,但是风格损失函数计算多层
- 两个损失值合并,α和β都是超参:
2、代码
可以参考【中英】【吴恩达课后编程作业】Course 4 -卷积神经网络 - 第四周作业
二、人脸识别
1、理论
- 人脸识别的应用可以分为两类:
- Face Verification:研究的问题是给定一个人脸+id与数据中存有的对应id的人脸进行比对,判断是否是这个人,是1比照1的应用(目前高铁站使用的就是这种)
- Face Recognition:研究问题是给定一个人脸与数据中存有的所有人脸进行比对,判断是否在其中,是1比照K的应用
- 虽然这两种应用是不一样的,但是后者实际上是前者的升级版,两者有很多共同之处,可以借鉴。
- 人脸识别问题的解决思路:
- 首先,不能直接用图像进行比较,应该利用dnn将其表征为向量
- 这部分其实也是一个无监督问题,我们希望从这个神经网络中得到的是每个图对应的表征
- 训练的时候,我们通过对loss函数的构造,使得训练出来的表征可以使得同一个人的脸相似,不同的人的脸不同,对loss的定义如下:
其中,A表示输入的要验证的图像,P表示对应ID的图像,N表示随意的负例图像(具体训练,细节不明,待研究,可能类似于word2vec的负采样?),f()表示表征。
- 其次,比较向量之间的相似程度就可以判断人脸是否相似
- Face Verification研究的问题就是,给定的人脸的表征向量与给定id在数据中的表征向量的相似函数是否满足某个阈值
- Face Recognition研究的问题就是,从数据中找到给定的人脸的表征向量对应的id
- 首先,不能直接用图像进行比较,应该利用dnn将其表征为向量
- 可以提升准确程度的一些细节:
- 对图像进行剪裁预处理,只保留人脸部分,可以去掉一些干扰信息
- 对数据中的每个人多放几张照片(不同光线,不同时间下的)