深度学习基础—人脸识别

news2024/11/25 11:41:11

        在人脸识别领域,常常有两个词容易被混淆,人脸验证和人脸识别。人脸验证是输入一个人的照片和名字(或者ID),验证这个人是否和名字相符。人脸识别是输入一个人的照片,识别这个人是否是数据库中存在的人。人脸验证问题是1:1问题,而人脸识别是1:K问题,假设K=100,也就是数据库有100个人,那么人脸识别就需要一一和数据库的照片进行相似度对比,即人脸识别的错误率是人脸验证的100倍。因此我们可以通过训练一个准确度很高的人脸验证系统,然后将其运用到人脸识别上,就能起到不错的效果。

        要解决人脸验证问题,首先要解决One-Shot学习。

1.One-Shot学习


        假设数据库只有4张照片,编号1是需要验证的照片,她和左列第二个人是同一个人,识别系统应该能认出来,但是编号2这个人不存在数据库中,系统应该识别不出来,那通常情况下,数据库中只保存一个人的一张照片,而不是多张,经验告诉我们,用一张照片作为训练集,训练的网络表现很差(欠拟合),如何用一个人的一张照片就可以训练出健壮的网络就是One-Shot学习的目的。

        有一个好办法就是学习Similarity函数,定义函数d(),函数的两个参数是两张照片,计算两张照片之间的差异值,如果小于阈值就认为相似,也就是同一个人,如果大于阈值就认为不相似,也就是不是同一个人。通过让网络学习这个函数,输出差异值来判断是否是同一个人。

        我们需要让新图片或需要识别的图片,依次和数据库的图片做对比,从而确定某个人是不是已经存在数据库中的人。这样做还有一个好处,在训练好的网络结构下,即使数据库新增某个人的照片,我们的识别系统依然可以正常工作。

2.Siamese 网络


        要想实现相似度函数的学习,就需要用到Siamese网络网络:

        这是一个普通的卷积神经网络,包含卷积层、池化层和全连接层等模块,一张图片输入进去,最后经过全连接层得到向量,假设向量是128长度,我们可以把这个向量看成提炼了特征的编码向量(前提一定是这个向量足够优秀,也就是能代表这个图片),记为f(x),x是输入样本。

        这里我们需要对比两张照片,那就需要将两张照片输入相同的卷积神经网络(参数一样),得到两个照片的编码向量,然后计算相似度函数:

        即计算编码之差的范数。而Siamese网络架构就是对于两个不同的输入,运行相同的卷积神经网络,然后比较它们。

        我们前面提到,编码向量需要足够优秀,能代表这个图片。换句话说,我们需要训练同一个卷积网络,让网络输出的向量具有这样的特征:相似的照片(同一个人)他们的相似度d()尽可能小,编码向量的距离尽可能接近;不相似照片(不是同一个人)他们的相似度d()尽可能大,编码向量的距离尽可能远离。这样的编码向量才是优秀的。

        了解了网络的输出和架构,那么应该如何定义损失函数来达到我们上述的目的?

3.Triplet 损失


        Triplet 损失即三元组损失,需要我们提供一组图片,这组图片有三张,一张称为Anchor(用于作为其他图片的对比模版),一张称为Positive(这张和Anchor是同一个人,因此相似,用Positive代替),第三张称为Negative(这张和Anchor不是同一个人,因此不相似,用Negative代替),后面取首字母代替照片类别,即A、P、N。

        现在用这三张照片构成两组对比,(A,P)和(A,N),我们希望d(A,P)值很小,因为他们是同一个人,而d(A,N)值很大,因为他们不是同一个人。因此有如下公式:

        这个公式说明我们希望P与A更相似,N与A更不相似。但是如果网络训练的全是0编码向量,也满足关系式,此时没有意义。因此做如下改动:

        通过添加a(正数),来确保不会出现d(A,P)=d(A,N),从而也就避免了输出无意义的编码向量问题,同时也能确保输出更有区分度的编码向量。比如:d(A,P)=0.50,d(A,N)=0.51,这样虽然满足没有改动的关系式,但是区分度不高,明显他们都是比较相似的。通过添加a=0.2,此时编码向量的相似度就不满足关系式,从而网络会继续训练,得到更好的编码向量。

        注意,我们需要把a作为超参数进行调试,一般不小于0.2。

        有了上述分析,就可以给出损失函数:

        如果出现d(A,P)-d(A,N)+a<=0,那么就说明满足关系式,我们可以认为此时识别正确了(已经能区分相似和不相似),因此损失值取max,输出为0。如果d(A,P)-d(A,N)+a>0,此时损失值就取该值,说明还有优化空间,继续梯度下降等优化算法减少损失,直到满足关系式。

        整个网络的代价函数应该是训练集中这些单个三元组损失的总和。假如有一个10000个图片的训练集,里面是1000个不同的人的照片,我们要做的就是取这10000个图片,然后生成多个三元组,然后训练学习算法,对这种代价函数用梯度下降。

        注意:1.三元组至少需要同一个人的两张不同照片以上,如果每一个人只有一张照片,那就无法组成三元组,也无法训练。2.选择三元组时,如果随机选择A、P和N,满足A和P是同一个人,A和N是不同人,那么就很容易满足关系式,网络也就无法学习到有用的信息。因此需要选择难以学习的三元组,即d(A,P)≈d(A,N),这样算法会尽力学习使d(A,P)更小,d(A,N)更大,从而学习到有用的信息。

4.人脸验证与二分类


        除了使用Triplet 损失来学习网络的参数,还有一种方法也可以学习参数,主要思路就是将网络改造成二分类网络,我们来一起看看:

        还是采用Siamese网络架构,输入两张照片,然后把输出的编码向量输入到logistics回归单元,如果是相同的人,输出1,否则输出0,从而转化为二分类问题。下面给出逻辑回归单元的细节:

        假设编码向量为128长度,上述公式把每个元素看成一个单元,通过取编码向量差的绝对值和权重w、偏差b线性组合,并经过激活函数比如sigmoid函数,得到二分类的输出。其中对于编码向量差的绝对值还可以替换成卡方相似度:

        注意:

        细节1:Siamese网络架构决定上下两个卷积网络的参数相同。

        细节2:假设第一张图片是数据库存在的图片,第二张图片是新图片,那么不需要每次都计算第一张图片的编码向量,这样会浪费计算资源。可以将存在数据库的图片预计算编码向量并存储,需要时直接读取编码向量即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2202312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VScode中配置可编写C/C++代码

VScode的下载 下载地址&#xff1a;https://code.visualstudio.com/ 安装中文插件 重启后&#xff0c;生效&#xff01;&#xff01;&#xff01; 下载和配置MinGW-w64 https://github.com/niXman/mingw-builds-binaries/releases 这里可以自行选择线程模型WIN32或posix&a…

【Linux报错】“-bash: cd: too many arguments“

问题描述 今天使用 cd 想要调整某个文件目录时&#xff0c;发现以下报错 原因分析&#xff1a; arguments 是参数的意思&#xff0c;该报错提示参数过多&#xff0c;意味着系统识别到了多余参数 本质原因&#xff1a;你的命令中输入了多余的 ”空格“ &#xff0c;检查一…

手写Spring第三篇番外,反射的基本使用

上一篇发出去之后&#xff0c;我有一个朋友说 beanDefinition.getBeanClass().newInstance() 这句代码太突兀了&#xff0c;就像是在甜甜的睡梦中&#xff0c;突然脚踩悬崖惊醒。 像我这种插朋友两刀的人必须安排了&#xff0c;不止安排 newInstance 还把反射基本用法也给安排了…

耳夹式耳机哪个品牌音质好?耳夹式蓝牙耳机排行榜!

当下&#xff0c;耳夹式蓝牙耳机愈发受到大众的青睐。不管是在上下班的途中、进行运动锻炼之时&#xff0c;还是休闲居家的日子里&#xff0c;这种耳机都能为使用者带来极为便捷的体验。不过&#xff0c;市面上的耳夹式蓝牙耳机品牌繁杂多样&#xff0c;产品品质也是良莠不齐&a…

【win10】VMware Workstation 16安装win10专业版及安装VMware Tools操作说明

参考链接 VMware虚拟机安装win10系统教程&#xff08;巨细&#xff09;_vmware安装win10-CSDN博客https://blog.csdn.net/gdidea/article/details/129523700 win10专业版安装说明 下载win10安装包 百度网盘 链接: https://pan.baidu.com/s/1kf4ORdXYgcqwAz2j86LSZw?pwdk4…

MySQL(八)——索引

文章目录 索引索引的数据结构索引的具体结构页的概念独立表空间文件页的结构页文件头和页文件尾页主体页目录数据页头 B树在索引中的应用索引分类按数据结构分按字段特性分按物理存储分按字段个数分 索引语法创建索引查看索引删除索引 索引优化SQL执行频率慢查询日志profile详情…

【机器学习导引】ch3-线性模型-2

优化理论&#xff1a;梯度下降&#xff08;Gradient Descent&#xff09; 梯度下降法的基本思路 梯度下降法是一种优化算法&#xff0c;目的是找到函数 f ( x ) f(x) f(x) 的最小值。图中提到“如果能找到一个序列 x 0 , x 1 , x 2 , … x_0, x_1, x_2, \dots x0​,x1​,x2​…

有手就会!低代码让你告别繁琐开发流程

近几年&#xff0c;随着低代码与无代码相关话题的火热&#xff0c;逻辑编排作为其重要构成部分也备受关注&#xff0c;集团内外不乏优秀的实践。之前在做技术调研时发现了不少业内逻辑编排相关的方案&#xff0c;陆续整理记录下来。今天先为大家带来低代码开发领域的 JNPF。 1.…

如何有效恢复受污染除砷树脂的功能?

在半导体制造领域&#xff0c;砷是一种常见的杂质元素。然而&#xff0c;砷的存在不仅会严重影响芯片的性能和可靠性&#xff0c;还会对生产环境和人体健康构成威胁。通过使用高效的除砷树脂&#xff0c;可以有效地去除水中的砷元素。 然而&#xff0c;一旦除砷树脂受到污染&am…

一个月学会Java 第10天 详讲static和面向对象——继承与Java世上最厉害的IDE——IDEA

Day10 详讲static和面向对象——继承与Java世上最厉害的IDE——IDEA 今天的篇幅会比较长&#xff0c;因为牵扯到不少的内容还有面向对象的内容 第一章 static 首先我们先来填一下坑&#xff0c;之前挖的&#xff0c;说后面要详细讲解static这个关键字的作用&#xff0c;那在这之…

二叉树的构建与遍历

在介绍二叉树的篇章中&#xff0c;我们用方法简单创建了一个二叉树&#xff0c;如下代码&#xff1a; public treeNode creattree(){treeNode Anew treeNode(A);treeNode Bnew treeNode(B);treeNode Cnew treeNode(C);treeNode Dnew treeNode(D);treeNode Enew treeNode(E);tr…

新大话西游图文架设教程

开始架设 1. 架设条件 新大话西游架设需要准备&#xff1a; linux 系统服务器&#xff0c;建议 CentOs 7.6或以上版本游戏源码&#xff0c;。 2. 安装宝塔面板 宝塔是一个服务器运维管理软件&#xff0c;安装命令&#xff1a; yum install -y wget && wget -O in…

zabbix7.0配置中文界面

Zabbix 是一个广泛使用的开源监控解决方案&#xff0c;支持多种语言界面。本文将详细介绍如何配置 Zabbix 以使用中文界面&#xff0c;从而提高用户体验和可读性。 1. 环境准备 在开始配置之前&#xff0c;请确保你已经安装并运行了 Zabbix 服务器、前端和数据库。如果你还没有…

成品婚恋交友相亲源码打包APP小程序H5公众号可打包小程序APP公众号H5源码交付支持二开

聊天交友系统开发专业语聊交友app开发搭建同城交友源码开发婚恋交友系统相亲app小程序H5婚恋交友小程序的定制开发与行业新机遇婚恋交友app红娘连线系统app小程序开发一站式开发系统源码&#xff1a;婚恋交友H5与小程序开发详解 电商运营技术服务源码系统php相亲交友平台APP婚恋…

前端优化之路:git commit 校验拦截

但是想要做到高效落地执行&#xff0c;就需要做些别的功课&#xff0c;先展示下成果图 需要了解git hooks&#xff0c;它是git的钩子&#xff0c;就像vue拥有自己的钩子一样。 官方文档&#xff1a;https://git-scm.com/docs/githooks 项目安装 husky&#xff0c;建议稳定版本…

Linux进程间通信(个人笔记)

Linux进程通信 1.进程通信介绍1.1进程间通信目的1.2进程间通信发展1.3进程间通信的具体分类 2.管道2.1匿名管道2.1.1代码实例2.1.2 fork共享管道原理2.1.3 管道的读写规则与特点2.1.4 进程池 2.2 命名管道2.2.1 命名管道的创建2.2.2匿名管道与命名管道的区别2.2.3代码实例 3.Sy…

Spring Boot洗衣店订单系统:数据驱动的决策

3系统分析 3.1可行性分析 通过对本洗衣店订单管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本洗衣店订单管理系统采用JAVA作为开发语言&#xff0c;S…

如何安装Llama3.1 —— 附一键安装包!

一键安装包文末领取&#xff01; 下载地址 软件&#xff1a;Llama版本&#xff1a;3.1语言&#xff1a;简体中文大小&#xff1a;645 MB安装环境&#xff1a;Win10及以上版本(64bit) 软件简介 ‌‌LLaMA模型是Meta研发的大语言模型‌&#xff0c;旨在帮助研究人员推进他们…

vue-jsonp的使用和腾讯地图当前经纬度和位置详情的获取

1.下载&#xff1a; npm install –save vue-jsonp2.main.js中引入&#xff1a; //腾讯逆地址解析会用到jsonp import {VueJsonp} from vue-jsonp; Vue.use(VueJsonp);3.腾讯地图中使用 uniapp中获取*经纬度*和通过经纬度获取当前**位置详情** //获取当前经纬度 getLocation…

【AI系统】AI在不同领域的应用与行业影响

本文将探讨AI在不同技术领域和行业中的广泛应用&#xff0c;以及这些应用如何影响和改变我们的世界。 I. 引言 AI技术正日益渗透到各个技术领域&#xff0c;从计算机视觉到自然语言处理&#xff0c;再到音频处理&#xff0c;AI的应用正变得越来越广泛。这些技术的发展不仅推动…