博客
关于我
One-Shot学习/一次学习(One-shot learning)
阅读量:795 次
发布时间:2023-02-23

本文共 758 字,大约阅读时间需要 2 分钟。

人脸识别系统面临一个关键挑战——一次学习问题。这意味着在大多数应用中,只需提供单张图片或一张人脸样例即可完成识别任务。然而,历史上深度学习在仅有一个训练样例时表现不佳。让我们通过一个直观的例子探讨这一问题,并提出解决方案。

问题背景

假设数据库中有4张员工照片,分别是Kian、Danielle、Younes和Tian。系统需要通过一张已知的Danielle照片识别前方的个人是否为她。如果是陌生人,系统应明确地将其识别为非数据库成员。一次学习问题的核心在于,只通过一个样本进行学习,以确保能够识别同一人

传统方法使用卷积神经网络(CNN)+ Softmax层进行分类,输出4种或5种标签(4名员工或非员工)。但这种方法效果有限,因为小样本集难以训练稳健网络。此外,新增人员后需要重新训练网络,这显然不现实。

解决方案:学习相似度函数

要实现一次学习,需要设计一个函数,能够通过一张图片识别另一个人。CNN能够提取图像特征,但直接使用难以解决小样本问题。因此,学习一个相似度函数尤为关键。

相似度函数的作用

函数d接受两张图片,输出差异值。当输入同一人两张照片时,差异值应最小;当输入陌生人时,差异值应较大。通过设定阈值(d>阈值为不同人,d<=阈值为同一人),可以有效解决人脸验证问题。

函数定义

函数d的核心是计算两张图片的差异。例如,输入两张图片后,输出差异值。通过训练网络学习这个函数,可以实现一次学习任务。一旦训练完成,只需对新图片与数据库内任意一张图片进行比较即可完成认证。

优势

这种方法解决了小样本问题。只要网络学会了相似度函数,新人员加入只需更新数据库即可,无需重新训练整个网络。

下一步

下篇文章将详细讲解如何训练神经网络,学习相似度函数d。

说明

记录学习笔记,如有错误请指正。转载请联系我。

你可能感兴趣的文章
Objective-C实现单循环链表算法(附完整源码)
查看>>
Objective-C实现单词计数(附完整源码)
查看>>
Objective-C实现博福特密码算法(附完整源码)
查看>>
Objective-C实现卡尔曼滤波(附完整源码)
查看>>
Objective-C实现压缩文件夹(附完整源码)
查看>>
Objective-C实现双向A*算法(附完整源码)
查看>>
Objective-C实现双向广度优先搜索算法(附完整源码)
查看>>
Objective-C实现反转字符串算法(附完整源码)
查看>>
Objective-C实现向量叉乘(附完整源码)
查看>>
Objective-C实现哈希表算法(附完整源码)
查看>>
Objective-C实现图书借阅系统(附完整源码)
查看>>
Objective-C实现图层混合算法(附完整源码)
查看>>
Objective-C实现图片erosion operation侵蚀操作算法(附完整源码)
查看>>
Objective-C实现图片的放大缩小(附完整源码)
查看>>
Objective-C实现图片腐蚀(附完整源码)
查看>>
Objective-C实现图片膨胀(附完整源码)
查看>>
Objective-C实现均值滤波(附完整源码)
查看>>
Objective-C实现域名转IP(附完整源码)
查看>>
Objective-C实现培根密码算法(附完整源码)
查看>>
Objective-C实现基于 LIFO的堆栈算法(附完整源码)
查看>>