• 【61】Siamese网络


    上篇笔记里提到的函数d的作用:

    输入两张人脸,然后告诉它们的相似度

    实现这个功能的一个方式就是用Siamese网络

    经常看到这样的卷积网络,输入图片x(1)
    然后通过一些列卷积,池化和全连接层
    最终得到这样的特征向量(编号1)

    有时这个会被送进softmax单元来做分类,但在这里不会这么做
    关注的重点是这个向量(编号1),假如它有128个数,它是由网络深层的全连接层计算出来的
    要给这128个数命个名字,把它叫做f(x(1))
    可以把f(x(1))看作是输入图像x(1)的编码,取这个输入图像(编号2)
    在这里是大雄的图片,然后表示成128维的向量

    2. 建立人脸识别系统
    建立一个人脸识别系统的方法:

    如果要比较两个图片的话,例如这里的第一张(编号1)和第二张图片(编号2)
    要做的就是把第二张图片喂给有同样参数的同样的神经网络
    然后得到一个不同的128维的向量(编号3),这个向量代表或者编码第二个图片
    要把第二张图片的编码叫做f(x(2))
    用x(1)和x(2)仅仅代表两个输入图片
    他们没必要非是第一个和第二个训练样本,可以是任意两个图片

    最后如果相信这些编码很好地代表了这两个图片,要做的就是定义d 
    将x(1)和x(2)的距离定义为这两幅图片的编码之差的范数:

    对于两个不同的输入,运行相同的卷积神经网络,然后比较它们
    这一般叫做Siamese网络架构

    这里提到的很多观点,都来自于Yaniv Taigman,Ming Yang,Marc’ Aurelio Ranzato,Lior Wolf的论文
    他们开发的系统叫做DeepFace

    3. 训练网络
    不要忘了这两个网络有相同的参数,所以实际要做的就是训练一个网络
    它计算得到的编码可以用于函数d,它可以告诉你两张图片是否是同一个人
    更准确地说,神经网络的参数定义了一个编码函数f(x(i))

    如果给定输入图像x(i),这个网络会输出x(i)的128维的编码
    要做的就是学习参数,使得如果两个图片x(i)和x(j)是同一个人
    那么得到的两个编码的距离就小

    前面几个幻灯片我都用的是x(1)和x(2),其实训练集里任意一对x(i)和x(j)都可以
    相反,如果x(i)和x(j)是不同的人,那么会想让它们之间的编码距离大一点

    如果改变这个网络所有层的参数,会得到不同的编码结果
    要做的就是用反向传播来改变这些所有的参数,以确保满足这些条件

  • 相关阅读:
    spring boot多数据源配置(mysql,redis,mongodb)实战
    迷你MVVM框架 avalonjs 学习教程3、绑定属性与扫描机制
    迷你MVVM框架 avalonjs 学习教程2、模块化、ViewModel、作用域
    迷你MVVM框架 avalonjs 学习教程1、引入avalon
    chrome36可以使用自定义元素的回调了
    VML元素的相关资料
    不使用Math.random实现随机数。
    迷你MVVM框架 avalonjs 1.3.4发布
    iscroll源码学习(1)
    对avalon的类名操作进行升级
  • 原文地址:https://www.cnblogs.com/lau1997/p/12384901.html
Copyright © 2020-2023  润新知