码迷,mamicode.com
首页 > 其他好文 > 详细

人脸识别如何做到one-shot learning?(转)

时间:2018-02-07 12:02:25      阅读:685      评论:0      收藏:0      [点我收藏+]

标签:info   font   标签   softmax   系统   描述   article   应用   col   

来源:http://blog.csdn.net/ice_actor/article/details/78603042

1.什么是人脸识别

??这部分演示了百度总部大楼的人脸识别系统,员工刷脸进出办公区,在这个演示中主要应用到了人脸识别技术和活体检测。 人脸识别的术语: 1)face verification:输入图像、名字ID判断输入图像是不是名字ID指定的用户 2)face recognition:有一个包含K个用户的数据库,拿到一幅图片,然后判断图片中的人是不是在数据库中,在输出指定用户name,不在就输出未识别。 ??人脸识别要比人脸验证要困难的多,在人脸验证中准确率99%也许可以接受,但是放到包含100个用户的人脸识别数据集下,这个误差就会被放大,意味着1%的概率会出错。在后续我们首先构建人脸验证系统作为基本模块,如果准确率够高就可以把它用在识别系统上。人脸验证系统的难点在于解决one-shot learning(一次学习)问题。

 

2. one-shot learning

??one-shot的意思是你需要通过单单一张图片,就能去识别这个人,但是在深度学习中只有一个训练样本时,它的表现并不好,那么如何去解决这个问题呢? ??假如员工数据库有四个员工,当某个员工来的时候,你想通过人脸识别系统判断他是不是四个员工之一,系统需要做的是仅仅通过一张照片,来识别前面这个人。所以在one-shot学习问题中只能通过一个样本来进行学习以能够认出同一个人,大多数人脸识别系统都要解决这个问题,因为在你的数据库中每个雇员可能都只有一张照片。有一种办法是将人的照片输入卷积神经网络,使用softmax单元输出5个标签,分别对应四个员工和四个都不是,但是这样的效果并不好,假如有新的员工加入你的团队,你就需要重新训练你的神经网络,这个确实有些糟糕。

 

要让人脸识别做到一次学习,为了能有更好的效果,你需要做的是学习similarity函数,详细的说就是下图中d表示的函数,d以两张图片作为输入,然后输出这两张图片的差异值,如果是同一个人的两张照片,希望输出一个很小的值,如果是两个差异很大的人的照片d输出一个很大的值。这样新加入一个员工只许将其的照片加入到数据库中即可,不需要重新训练模型。

技术分享图片

 

3.Siamese网络

??Siamese网络就是实现上节函数d的训练,你经常会看到如下的网络结构,输入一个图像经过一系列的卷积、池化和全连接层最终得到一个特征向量,有时候会将其输入softmax单元来做分类,但是在这里我们不需要将其输入softmax单元。加入输出的特征向量大小是128维,将其命名为f(x),你可以将其看成输入图像的编码。

技术分享图片

?

从上面的描述可知,计算两个图片的网络结构有着同样的参数,所以实际只需要训练一个网络,它计算得到的编码可以用于计算函数d,换句话说其实就是神经网络的参数定义了一个编码函数f(x)可以将图片转换成向量编码。所以我们需要做的就是训练这个网络,使其在两张图片是同一个人的时候距离函数尽可能的小,不是同一个人的时候距离函数尽可能的大。

 

详细内容请参考上述原文!

人脸识别如何做到one-shot learning?(转)

标签:info   font   标签   softmax   系统   描述   article   应用   col   

原文地址:https://www.cnblogs.com/gczr/p/8425371.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!