• 深度学习——特殊应用:人脸识别和神经风格转换[13]


    目录

    • 人脸验证和人脸识别
    • one-shot learning problem
    • Siamese网络
    • 深度学习可视化
    • 神经风格转移
    • 一维到三维的推广

    一、人脸验证和人脸识别

    verification: 输入图像,姓名/ID  输出输入的图像就是给定的人

    recognition: 包含K个人的数据库,输入一张图  输出一个ID(如果输入的图像存在于数据库中)

    二、one-shot learning problem

    • 什么是one-shot(一次学习

    比如人脸识别,数据库中每个人只有一张图.对于一个输入,需要只根据一个example来判断输入是否在数据库中

    • 学习方案:学习相似函数d

    不可行:把人脸放到一个CNN网络中,然后输出softmax结果(5个人,6个结果,一个表示都不是),但是因为数据集太小

    可行的方法:学习相似函数

    输入两个图,然后d函数(similarity function)输出它们之间的差异(d(img1,img2)=degree of difference between images),如果差值小于一定值,则表示相同,否则表示不同(人脸验证)

    三、Siamese网络

    [Taigman et. al., 2014. DeepFace closing the gap to human level performance]

    • Siamese网络结构:如何学习d函数

    把两张图img1和img2输入相同结构相同参数的网络,分别得到编码后的结果(一个128维的向量)

    d函数:$d(x^{(i)},x^{(j)})=||f(x^{(i)})-f(x^{(j)})||_2^2$

    • Siamese网络学习

    学习网络中的参数使得

      • 若$x^{(i)}$和$x^{(j)}$是同一个人,则$d(x^{(i)},x^{(j)})=||f(x^{(i)})-f(x^{(j)})||_2^2$较小
      • 若$x^{(i)}$和$x^{(j)}$不是同一个人,则$d(x^{(i)},x^{(j)})=||f(x^{(i)})-f(x^{(j)})||_2^2$较大
    • 如何训练Siamese网络:Triplet loss

    [Schroff et al., 2015, FaceNet: A unified embedding for face recognition and clustering]

    定义Triplet loss,利用梯度下降来优化

      • 输入

    anchor是目标(A),positive(P)和anchor一样,而negative(N)是不同的

      • 基本目标

    anchor和positive的差值比anchor与negative的小

    也就是:$||f(A)-f(P)||^2+alpha leq ||f(A)-f(N)||^2 \ ||f(A)-f(P)||^2+alpha - ||f(A)-f(N)||^2leq 0$

    为什么要加$alpha$:$a-b leq 0$,若$a=b=0$,并不能说明问题,所以加一个超参数

      • 损失函数

    $L(A,P,N)=max(||f(A)-f(P)||^2+alpha - ||f(A)-f(N)||^2, 0)\J=sum_{i=1}^mL(A^{(i)},P^{(i)},N^{(i)})$

    训练集:对于1k个人的10k张照片,从10k里面产生的三元对(A,P,N),并计算loss

      • 如何选择A,N,P对

    不要随机选,因为可能很容易满足条件。应该选择不容易训练的三元组,也就是$d(A,P)approx d(A,N)$

    • 面部验证与二分类

    把验证问题转换成二分类问题,相同为1,不同为0

    将Siamese网络对输入图像的编码结果作为逻辑回归的输入,输出为$widehat{y}=sigma (sum_{k=1}^128w_{i}|f(x^{(i)}_k)-f(x^{(j)})_k|+b$

    四、深度学习可视化

     方式:遍历layer i层的隐藏单元,找出最大地激活每个隐藏单元激活函数的输入图片块

    每一层找出了3x3个隐藏单元,对应每个隐藏单元罗列了9个最大激活函数的图片块

    越靠后的层能看到的图片内容越多,所识别的特征也越复杂

     [Zeiler and Fergus., 2013, Visualizing and understanding convolutional networks]

     五、神经风格转移

     [Gatys et al., 2015, A neural algorithm of artistic style]

    把两张图进行融合,一张提供内容,另一个提供风格

     

      [Images generated by Justin Johnson]

    • 代价函数

    包含两个部分,一个用于评估生成的图片与内容图片的差异,一个评估生成图片与风格图片的差异

    $J(G)=alpha J_{content}(C,G)+eta J_{style}(S,G)$

    一般步骤:随机生成一张图,然后用梯度下降法来最小化代价$J(G)$

    • 内容代价函数
      • 找一个预训练好的ConvNet(如VGG)
      • 用隐藏层$l$来计算内容代价
      • $a^{[l](C)}$和$a^{[l](G)}$分别表示图像在$l$层的激活值
      • 代价为两个图像激活值的范数$J_{content}(C,G)=frac{1}{2}||a^{[l](C)}-a^{[l](G)}||^2$
    • 风格代价函数

    什么是风格:不同通道激活值间的关联程度

    怎么评估通道的关联度:各个通道激活值的相关系数。不同的通道会识别出不同的特征结果,相关系数表示当一个位置出现某特征时同时出现另一特征的可能性。比如出现条纹的时候也是橙色

    代价函数计算

      • (i,j,k)位置的激活值,对应(H,W,c)。$a^{[l]}_{i,j,k}=activation at(i,j,k)$
      • 风格矩阵$G^{[l]}$是任意两通道间的相关系数,是$n_{c}^{[l]}xn_{c}^{[l]}$的矩阵。这里采用的是非标准形式,没有减去均值。$k$和$k'$表示第几通道
        • 风格图的风格矩阵$G_{kk'}^{[l](S)}=sum_{i=1}^{n_H^{[l]}}sum_{k=1}^{n_W^{[l]}}a_{ijk}^{[l](S)}a_{ijk'}^{[l](S)}$
        • 生成图的风格矩阵$G_{kk'}^{[l](G)}=sum_{i=1}^{n_H^{[l]}}sum_{k=1}^{n_W^{[l]}}a_{ijk}^{[l](G)}a_{ijk'}^{[l](G)}$
      • 用$l$层的激活值来计算风格代价$J_{style}^{[l]}=frac{1}{(2n_H^{[l]}n_W^{[l]}n_c^{[l]})^2}||G^{[l](S)}-G^{[l](G)}||_F^2=frac{1}{(2n_H^{[l]}n_W^{[l]}n_c^{[l]})^2}sum_ksum_k'(G^{[l](S)}_{kk'}-G^{[l](G)}_{kk'})^2$
      • 考虑所有层的结果,并设置权重超参数$lambda$$J_{style}(S,G)=sum_llambda^{[l]}J_{style}^{[l]}(S,G)$

    六、一维到三维的推广

    一维应用:电子信号

    14x1($n_c$)

    *

    5x1

    =10x16(个filter)

    三维应用:CT检查,切片数据是三维的。相当于是1通道

    14x14x14x1($n_c$)

    *

    5x5x5x1

    =10x10x10x10x16(个filter)

  • 相关阅读:
    vss的ss.ini丢失或损坏导致的vss无法登录错误
    prtvu xsdabljc 视图代码
    安装Ehlib经验
    PHP连接MSSQL
    在Access中实现 case when功能
    快捷输入电大学号 delphi代码
    毕业预警的SP
    新系统班级名称规范化
    查询哪些学生没有做课程注册
    第一个PHP数据库查询应用
  • 原文地址:https://www.cnblogs.com/coolqiyu/p/8849847.html
Copyright © 2020-2023  润新知