吴恩达-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表示某一层激活层的输出:
      Jcontent(C,G)=14×nH×nW×nCall entries(a(C)a(G))2J_{content}(C,G) = \frac{1}{4 \times n_H \times n_W \times n_C}\sum _{ \text{all entries}} (a^{(C)} - a^{(G)})^2
    • 风格损失函数定义:定义Gram matrix表示图像的风格表征,也就是下面公式中的Gij。计算图像S和图像G各自风格表征的接近程度。
      Jstyle(S,G)=lλ[l]Jstyle[l](S,G)J_{style}(S,G) = \sum_{l} \lambda^{[l]} J^{[l]}_{style}(S,G)
      这个是每一层的风格损失值的加权和,风格损失计算方法如下:
      Jstyle[l](S,G)=14×nC2×(nH×nW)2i=1nCj=1nC(Gij(S)Gij(G))2J_{style}^{[l]}(S,G) = \frac{1}{4 \times {n_C}^2 \times (n_H \times n_W)^2} \sum _{i=1}^{n_C}\sum_{j=1}^{n_C}(G^{(S)}_{ij} - G^{(G)}_{ij})^2
      其中,Gram matrix的定义是Gij=viTvj=np.dot(vi,vj){\displaystyle G_{ij} = v_{i}^T v_{j} = np.dot(v_{i}, v_{j}) },最后得到的矩阵是nc*nc,每一个元素都一定程度代表对应的两个通道之间的相似程度。
      在这里插入图片描述
    • 注意,这里内容损失函数只计算一层,但是风格损失函数计算多层
    • 两个损失值合并,α和β都是超参:
      J(G)=αJcontent(C,G)+βJstyle(S,G)J(G) = \alpha J_{content}(C,G) + \beta J_{style}(S,G)

2、代码

可以参考【中英】【吴恩达课后编程作业】Course 4 -卷积神经网络 - 第四周作业

二、人脸识别

1、理论

  • 人脸识别的应用可以分为两类:
    • Face Verification:研究的问题是给定一个人脸+id与数据中存有的对应id的人脸进行比对,判断是否是这个人,是1比照1的应用(目前高铁站使用的就是这种)
    • Face Recognition:研究问题是给定一个人脸与数据中存有的所有人脸进行比对,判断是否在其中,是1比照K的应用
    • 虽然这两种应用是不一样的,但是后者实际上是前者的升级版,两者有很多共同之处,可以借鉴。
  • 人脸识别问题的解决思路:
    • 首先,不能直接用图像进行比较,应该利用dnn将其表征为向量
      • 这部分其实也是一个无监督问题,我们希望从这个神经网络中得到的是每个图对应的表征
      • 训练的时候,我们通过对loss函数的构造,使得训练出来的表征可以使得同一个人的脸相似,不同的人的脸不同,对loss的定义如下:
        (3)J=i=1m[f(A(i))f(P(i))22f(A(i))f(N(i))22+α]+\mathcal{J} = \sum^{m}_{i=1} \large[ \small \mid \mid f(A^{(i)}) - f(P^{(i)}) \mid \mid_2^2 - \mid \mid f(A^{(i)}) - f(N^{(i)}) \mid \mid_2^2+ \alpha \large ] \small_+ \tag{3}
        其中,A表示输入的要验证的图像,P表示对应ID的图像,N表示随意的负例图像(具体训练,细节不明,待研究,可能类似于word2vec的负采样?),f()表示表征。
    • 其次,比较向量之间的相似程度就可以判断人脸是否相似
      • Face Verification研究的问题就是,给定的人脸的表征向量与给定id在数据中的表征向量的相似函数是否满足某个阈值
      • Face Recognition研究的问题就是,从数据中找到给定的人脸的表征向量对应的id
  • 可以提升准确程度的一些细节:
    • 对图像进行剪裁预处理,只保留人脸部分,可以去掉一些干扰信息
    • 对数据中的每个人多放几张照片(不同光线,不同时间下的)

2、代码

可以参考【中英】【吴恩达课后编程作业】Course 4 -卷积神经网络 - 第四周作业

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章