前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[DeeplearningAI笔记]one-shot learning/Siamase网络/Triplet损失/

[DeeplearningAI笔记]one-shot learning/Siamase网络/Triplet损失/

作者头像
演化计算与人工智能
发布2020-08-14 14:31:50
1K0
发布2020-08-14 14:31:50
举报

4.4 特殊应用:人脸识别和神经网络风格转换

吴恩达老师课程原地址[1]

4.1 什么是人脸识别

Face verification 人脸验证 VS face recognition 人脸识别
Face verification 人脸验证
  • 人脸验证
    • 输入是一张图片,以及人的姓名或者 ID 作为标签
    • 输出是这张输入的图片是否是这个确定的人
    • 这时候也被称为 1 对 1 问题
  • 人脸识别
    • 人脸识别问题比人脸验证问题困难的多,其输入为一个具有 K 个人的数据集,将一张图片作为输入,如果这张图片是这 K 个人中的某一个,则输出这个人的 ID。
    • 也就是说如果人脸验证的错误率是 1%,即正确率为 99%,则这个系统在人脸识别问题上的准确率只有
    0.99^{k}

4.2 One-Shot learning

  • 在绝大多数人脸识别项目中,你需要通过单单一张图片或者单单一个人脸识别样例就能去识别这个人。
  • 而历史上深度学习系统只有一个训练样例时,它的表现并不好。
One-Shot learning
  • 通过一个样本来进行学习,以能够认出同一个人--因为在工业界中你的员工照片往往只有一张。
learning a "similarity" function
d(img1,img2)=degree\ of\ differemce\ between\ images

然后输出两张图片的差异值--如果你放进同一个人的两张照片,你希望他能输出一个很小的值,如果你放进两个长相差别很大的人的照片

If\ d(img1,img2)<=u 则判别这两张图片为同一张图片
>u则判别这两张图片为不同的图片

4.3 Siamese 网络/DeepFace 系统

“Taigman Y, Yang M, Ranzato M, et al. DeepFace: Closing the Gap to Human-Level Performance in Face Verification[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2014:1701-1708.

  • 方法是把第二张图片传给有相同参数的同样的神经网络,然后得到一个不同的 128 维的向量。
    • 这个向量能够代表一整张图片的信息,
  • 对于一张图片而言,其可以通过卷积神经网络将其转化为一个 128 维度的向量--用以表征整张图片。而得到的向量通过
f(x^{(i)})

进行表示,而系统的目的就是调整参数使得如果

x^{(i)}

x^{(j)}

表示的是同一张图片则

\parallel f(x^{(i)})-f(x^{(j)})\parallel_2

的目标函数可以尽可能的小。得如果

x^{(i)}

x^{(j)}

表示的是不同的图片则

\parallel f(x^{(i)})-f(x^{(j)})\parallel_2

的目标函数可以尽可能的大。


4.4 Triplet 损失

learning a "similarity" function

“Schroff F, Kalenichenko D, Philbin J. FaceNet: A unified embedding for face recognition and clustering[J]. 2015:815-823.

  • 对于使用 Siamese 网络的损失函数设置为三元组损失函数然后应用梯度下降。
    • 但是注意,这一过程不能使得 f(A) = f(P) = f(N)=0,所以等式的右边需要减去一个很小的数。
    (f(A)-f(P))^{2}-(f(A)-f(N))^{2}\le0-\alpha
    (f(A)-f(P))^{2}-(f(A)-f(N))^{2}+\alpha\le0

    这里的

    \alpha

    习惯被称为 margin.

    • 为了使用三元组损失函数进行梯度下降,需要比较成对的图像。即对于是同一个人的图片你需要将两者的三元组损失设置大一些,而对不同人的图片你需要将两者的三元组损失设置小一些。对于同时看三张图片(Anchor 原始图片(A),positive 同一人物图片(P),negative 不同人物图片(N))
    • 用数学公式表达这一过程即为:
    d(A,P)\le d(A,N)
    (f(A)-f(P))^{2}\le(f(A)-f(N))^{2}
    (f(A)-f(P))^{2}-(f(A)-f(N))^{2}\le0
  • 三元组损失函数基于 A,P,N 三张图片,其中 A 和 P 代表了同一个人,而 A 和 N 代表了不同的人。
  • 三元损失函数可以被定义为
L(A,P,N)=max((f(A)-f(P))^{2}-(f(A)-f(N))^{2}+\alpha,0)
J=\sum^{m}_{i=1}L(A^{(i)},P^{(i)},N^{(i)})
  • 在训练过程中
d(A,P)+\alpha\le d(A,N)

往往很容易达到,这就使在选择图片数据构成难以训练的 A,P,N 三元组--

d(A,P) \approx d(A,N)
流行的命名方式
  • 对于深度学习领域网络模型的命名方式可以采用“_Net”或"Deep_"的形式,例如对于用于人脸识别的网路,可以将其命名为“FaceNet”或“DeepFace”

4.5Face verification and binary classification 面部验证与二分类

  • Triplet loss 是一个学习人脸识别卷积神经网络参数的好方法;将人脸识别当成一个二分类问题也可以很好地调整神经网络的参数。
面部验证与二分类

“Taigman Y, Yang M, Ranzato M, et al. DeepFace: Closing the Gap to Human-Level Performance in Face Verification[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2014:1701-1708.

  • 将 Siamese 网络得到的两个 128 维的编码向量后接上回归用的神经元,将其转化为一个回归问题,并且输出为 0 或 1 表示两个输入的图片是否来自同一张人脸。这就将人脸识别问题转化为一个二分类的问题。
\hat{y}=\sigma(\sum^{128}_{k=1}W_{i}|f(x^{(i)})_{k}-f(x^{(j)}_{k})|+b)

其中

\sigma

表示非线性激活函数。或基于 **X-square similarity 函数的回归方法**

\hat{y}=\sigma(\sum^{128}_{k=1}W_{i}\frac{(f(x^{(i)})_{k}-f(x^{(j)}_{k}))^{2}}{f(x^{(i)})_{k}+f(x^{(j)}_{k})}+b)
  • 注意,在这个问题中,训练的输入是两张图片,而输出是 0 或 1.
    • 并且由于使用的是一个 Siamese 网络,所以上下两个卷积神经网络的参数完全相同。
    • 对于门禁系统而言,如果下方的图片来自离线的员工数据集,可以事先将表示向量计算好并保存起来。而上方的图片来自员工进入时实时的图片。通过预先计算数据库中中已有图片的编码向量的方法,可以大大节省人脸识别的时间

参考资料

[1]

吴恩达老师课程原地址: https://mooc.study.163.com/smartSpec/detail/1001319001.htm

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DrawSky 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4.4 特殊应用:人脸识别和神经网络风格转换
    • 4.1 什么是人脸识别
      • 4.2 One-Shot learning
        • 4.3 Siamese 网络/DeepFace 系统
          • 4.4 Triplet 损失
            • 4.5Face verification and binary classification 面部验证与二分类
              • 参考资料
              相关产品与服务
              人脸识别
              腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档